QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 7245|回复: 6
收起左侧

[分享] Autocad vbA 初级教程(13) 块操作

[复制链接]
发表于 2006-9-22 15:59:01 | 显示全部楼层 |阅读模式 来自: 中国江苏常州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
定义块方法:( t, l# V7 b7 l0 z0 {: T
Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名)
& B  v% i, f. j! h% u8 L把选择集加入块中的方法:
* y2 n! ?. L" A, K0 GThisDrawing.CopyObjects(选择集,块)  p8 q3 n+ ~' i4 f+ s& D! @
插入块方法:
" z, p* G# R" S; L5 ]* T; e/ YThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度)
: e8 b, V6 D& M9 F$ A/ ]画块属性方法:
. {' C( R; V# D. ~3 i& gThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
8 \( J" V) l# w) m! u- o1 [1 z一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式5 d$ W# T1 N2 v: l, r# Z9 w% s
编程思路:
+ i0 W: A7 _* L0 ?" f1.定义一个空块' D0 D! o3 K$ s1 G( x, b
2.在块中画一段弧(球服衣领)
+ Z" S5 }$ @$ I+ n& W2 n" p3.画多段线,镜像画出球衣9 P+ s+ b! v, ~4 X
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性
$ D0 V# I0 b9 E1 R" a  q5.把多段线和属性复制到块中
& A1 A3 b1 N2 r3 C2 R: ~/ Q/ U6.提示用户点选球员位置和姓名+ v. M. g4 b5 a4 z3 s" b. A
7.插入块,修改球衣号码属性、球员姓名属性) I$ U% u$ d5 r  j% P

8 c, n* @: c- G6 }& y以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
" x# M7 f8 c. v7 {4 a2 YSub team()0 ^% O: m) ?& R' [/ i6 ^. O
Dim playerlay As AcadLayer '定义球员图层
) X! l; @5 J$ g. D+ iDim playerblock As AcadBlock '定义块变量- g) t0 v0 X! a0 W& P
Dim arcc(0 To 2) As Double '圆弧圆心
( V! e- Y0 n* v7 bDim linep1(0 To 2) As Double '线条端点1# q( Q4 `4 E6 b# ^/ X
Dim linep2(0 To 2) As Double '线条端点2. J' I" w, [. S6 ^: z4 M) W, _
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
) z! l0 O4 L: b. c5 v1 J) L: s1 mDim basep(0 To 2) As Double '块基点  b2 y' Q- I* n4 D$ `& i+ T
Dim playernumberpoint(0 To 2) As Double '块属性插入点0 @0 E, m4 l" ~- \- R# O8 l
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式
" M" `. G/ k/ g" B) k- ?* jDim blockRef As AcadBlockReference '定义块属性变量% r$ a$ U% e- v& p
Dim Attr3 As Variant '插入块属性变量
. W) y+ o; R8 _7 _+ \8 d; `' s8 ^2 ?  D9 @+ ^0 y
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块/ J3 f3 J+ F  N8 l) B8 @' z/ e0 ^
' C7 m8 c5 m' m$ U3 T& l
arcc(0) = 0
9 U# ^! H. A4 V, `4 Sarcc(1) = 4305 Z# R' f+ B9 n
Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中; N7 i+ M1 S1 f9 f2 m' `; A

6 D+ k* _" w, fpline(0) = 00 F0 z1 `9 R$ @
pline(1) = 20
& ^* W6 o6 F' b+ I( c# U$ K- Q4 \9 U# Y# q. G9 F$ R
pline(3) = 1006 `. p& d8 W/ v
pline(4) = 20
6 K2 D, V0 J4 }3 f- T( q; t
2 d" t% N, D, D$ c( v: Jpline(6) = 1008 x$ @7 j8 U, C+ r8 C, b
pline(7) = 250# H8 C1 n7 g1 b3 q+ Z6 Z- v
1 @8 Q+ R1 d* {2 P3 b: @8 T/ {
pline(9) = 125
% ]1 R) ?; J% n0 S3 {5 D: dpline(10) = 207! h! E  W  _  X" E! I: l/ {) k

) z# ~. l, b! g( J2 @6 Ipline(12) = 212
; b4 H* ]+ }( H: w/ Jpline(13) = 257
3 {3 Z( r9 p* V  l& g/ f  `
% n. g; y7 A+ `; n% p# w, ?( E4 ^- @) f7 M' M( @
pline(15) = 1121 w( ~+ q% h- [  P1 h) `! e5 `
pline(16) = 430
. I9 E* |5 [9 j% @% |# f5 ^2 l/ d$ }' t+ w6 c! V; `
- B" d1 E6 u7 _& `5 B1 y9 G  f
pline(18) = 50
) y1 l5 P! E  I9 }. V+ `pline(19) = 430
: \/ q! r; [# d8 i0 e* M7 L" x1 I& K
0 I# V) {! D6 D; YSet line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
, Y8 ~" X! }  z* ?5 s5 A$ m) [8 \5 M" w4 E( t: A
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点
8 g# }6 T" s$ b& v+ ~' a# ?6 TSet line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
" n& ^8 G5 x, d/ V
; A  p2 A& ~& E3 _* nDim p(0 To 2) As Double '定义坐标变量
1 x3 `: Z% X# c6 dSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式
- m0 B5 ~. `3 M. Z: C2 U1 }mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体4 D( m) Z4 m4 k* E( F# d+ g
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt8 }% I4 C1 u2 g3 O
; d7 ]7 e" r( _! ?0 W
playernumberpoint(0) = 0 '块属性位置# `/ b* b, e4 l7 _8 R8 k
playernumberpoint(1) = 200
& H6 b" V! r2 W) E0 w# }: G3 QSet attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性9 X1 y, A; m) @: o; w
attr1.Alignment = 7 '居中$ w+ ?6 g5 X! N. S
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
; F) l! B# K, Q+ r  F; X+ c! cSet attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性: W7 Y" O( ~8 |
attr2.Alignment = 7 '居中& o) e* |% t! \3 b' r

; }! _- y! K  r2 u$ {" G' o( c( ]6 E! z" u
Dim objCollection(0 To 3) As Object '创建选择集
$ M) S) n5 h4 L+ S- bSet objCollection(0) = line1 '线条1加入选择集
) Z$ E  [+ [* g* tSet objCollection(1) = line2 '线条2加入选择集6 C; z% b6 b( n! f. x8 z+ k
Set objCollection(2) = attr1 '属性1加入选择集
4 R8 x: C, l* @$ W# eSet objCollection(3) = attr2 '属性2加入选择集7 P" h- w" c$ X4 i
1 }- n7 |2 F3 R
Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
9 X  R7 r+ R# U! C& a) ^( U! F) i% `3 s" w3 {8 G& ]  C* t5 _" V1 a
For Each element In objCollection '在选择集中进行循环; f5 h' D3 I8 _$ x; F) \& k7 k7 v; d# O
  element.Delete '删除线条和属性(此操作并不影响已创建的块)
. s" W$ y3 ~" Y. ?) i' V5 q9 k/ gNext. x! ]& |* m' F3 I3 f
" U. J" _" m: w0 R
9 g7 Y9 }& g2 X; y' E( \* X
Set playerlay = ThisDrawing.Layers.Add("球员") '新建图层1 V9 T' X3 K) G8 z& n
playerlay.color = 2 '为黄色2 ?% D* x8 \8 l# F& k0 \, I
ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层1 F. u  j* g  H; B" O

' ?( g0 {* ^. c% b9 q6 F8 f5 }Dim p1 As Variant '块插入点位置
$ M1 L# g, y( p( N0 e7 u% Q% A. O7 H6 E7 H
For i = 1 To 11 '插入块
% t: d6 k; o$ d# P; y  pstring = CStr(i) & "号球员位置:"' [5 N3 _' B" q# ?
  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标& K+ p- _) o  E3 J$ |
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
% l0 g# H3 P* W" c! w+ p  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块
7 v7 A' M+ Q( l. J  Attr3 = blockRef.GetAttributes '获取块属性7 Q+ w- ?3 [7 P0 \3 E% o' [& ^
  Attr3(0).TextString = CStr(i) '赋值球员号码
, B8 p' O- w) |1 B  Attr3(1).TextString = nstring '赋值球员姓名/ h5 t: C5 M% v( @, V( W- Y# V
Next
8 P% t* u3 s- P( W+ o% E( e7 m5 G% m7 ?
End Sub
发表于 2008-10-30 11:26:25 | 显示全部楼层 来自: 中国山东烟台
太好了,本人正在研究这方面的程序,借鉴一下
发表于 2009-2-12 11:28:27 | 显示全部楼层 来自: 中国上海
感谢楼主的分享,在CAD2009中尝试一下,有问题来咨询楼主您。
发表于 2010-1-18 23:04:10 | 显示全部楼层 来自: 中国四川成都
正在找这方面的资料呀……
发表于 2010-5-25 13:42:55 | 显示全部楼层 来自: 中国福建泉州
非常受用,谢谢楼主
发表于 2010-8-31 17:16:15 | 显示全部楼层 来自: 中国台湾
非常詳細的VBA教學,對初學者是一大幫助.謝謝!
发表于 2010-11-30 17:50:54 | 显示全部楼层 来自: 中国浙江杭州
资料很好的
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表