QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:
" P% E) ^. E( o# B% V( E! BSet blocksobj=ThisDrawing.Blocks.Add(基点, 块名)9 A, d( l' q; P- w
把选择集加入块中的方法:  z: {) v7 W- \& F8 U" \: C3 H0 C
ThisDrawing.CopyObjects(选择集,块)+ V4 q7 o! ~- g
插入块方法:4 y( B* }$ n2 X( G3 q
ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) # n3 L' s2 X5 H0 T
画块属性方法:
  u8 H! n6 ]+ C" ZThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
4 i1 p* i" I, W3 ]# {9 D一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
/ Z  x' v$ l$ S' D/ R1 Z编程思路:) T- \. R$ [: S3 W
1.定义一个空块
- P/ v* S/ b4 K5 N9 ^3 a2.在块中画一段弧(球服衣领)9 X( L9 U' ?' h& P- M
3.画多段线,镜像画出球衣7 Q: s! \2 F- C
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性
$ }, V# ^1 e7 @$ [( Q5.把多段线和属性复制到块中
/ S0 u. ^: F7 a4 J/ E' W6.提示用户点选球员位置和姓名/ D! o3 D$ n6 \0 n* @' R6 f
7.插入块,修改球衣号码属性、球员姓名属性
. f2 L6 E, L0 f. ]; g( {* `2 p2 R) n0 @& p0 Y  H* G
以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
  n. ]: u) l3 h* [& O) Y/ a: `Sub team()
* Q, W5 n; _/ PDim playerlay As AcadLayer '定义球员图层& S& P, H: \% \  b3 B+ l8 y. o- D
Dim playerblock As AcadBlock '定义块变量. F" R* ?6 c* s8 Q
Dim arcc(0 To 2) As Double '圆弧圆心% M" U- Z6 q: o- ?4 V7 ^) a( E
Dim linep1(0 To 2) As Double '线条端点1$ u6 M$ D' z$ u% n
Dim linep2(0 To 2) As Double '线条端点2/ P1 S9 Z8 }8 x0 {& w) u7 F
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
" N( R  o! O/ J$ f! v; tDim basep(0 To 2) As Double '块基点( M9 G$ G' b2 K" y
Dim playernumberpoint(0 To 2) As Double '块属性插入点
) M' f0 d8 a: Y' Z* f) BDim mytxt As AcadTextStyle '定义mytxt变量为文本样式5 u" b+ ?4 t% k4 O
Dim blockRef As AcadBlockReference '定义块属性变量
" `/ }  F. x8 ]  W, ^Dim Attr3 As Variant '插入块属性变量
. A5 Z1 f# f$ G2 j2 l6 E$ ^) @' }# z) V, n' q$ e
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块, S4 W" k" {; ^) p- b3 E- |( N

0 h! N' B( }2 C7 Darcc(0) = 0
- h, K: I2 h8 a6 h# e5 Varcc(1) = 430* |! {5 i8 X6 d; X9 R# R% Y
Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中- M; k% x) Y0 e0 p& ]# U/ ~+ M; P
" u6 E5 b& [0 C. T. }' V
pline(0) = 0
& @" t9 F' m0 }6 k6 d2 opline(1) = 200 t7 Q5 D( _, D* {: G
+ x0 H5 r: W- B3 ?
pline(3) = 100
) X2 B2 \7 k" y) `( r, \% C! I, Cpline(4) = 20- A, e$ f/ `  s2 E$ U

0 S9 a+ u6 R$ Upline(6) = 100
8 V# R/ _- o5 `  e- n/ jpline(7) = 250
7 i) Q& v4 `6 e) d" ^3 Q+ c: e4 u' U: s' V& `9 W
pline(9) = 125
/ a: E) r3 R2 Bpline(10) = 207
. B; L1 o6 v9 ?% b) ?1 h* Q" v& u3 P, X% z# i2 H+ z
pline(12) = 212" {+ ~3 d' a8 ~  e6 ^. ~' @
pline(13) = 257" C0 O4 i* P! p! o$ w/ A. p
5 T9 @" m3 t* l

+ k4 T  o( ~" e) @$ upline(15) = 112+ A/ u) i' F$ W+ D3 u6 O
pline(16) = 430
# e* O4 r" c: n9 H; m9 m7 `1 a" e* l! u
* o2 D- n4 j$ ^" _( r
pline(18) = 50
9 a: Y* q$ N& ~: M+ {; }) ^pline(19) = 430
! e' \% w8 K2 _9 S" M
5 z  a/ Y; X% h# S' P( fSet line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线3 Y' h% d6 n7 J  O4 `& A5 O
1 E2 ]# u% n: I3 Q0 C
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点+ t. ^7 s! P. q5 c( p
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
4 H" k5 d' R8 O4 o- t
3 j) O4 c. J! u1 J6 h4 yDim p(0 To 2) As Double '定义坐标变量
2 e7 ]0 P; x' U7 }Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式
+ F9 d- h: D/ W3 S3 Smytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体5 j% b& y7 w* H9 H5 O: E, [+ M
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt& N  w! `3 x$ I; R; v

! Z3 @! r  W+ ?: n) \, X; A( w3 Lplayernumberpoint(0) = 0 '块属性位置
- O! V9 ~. \* F, O. P- m9 j3 c1 Vplayernumberpoint(1) = 200
+ @& W8 j7 g. R2 X$ X. {, C; s- ~Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性6 Q9 _1 ?/ R, y  [* p9 e& P# H
attr1.Alignment = 7 '居中9 h/ ~% G" ^# _# M6 D$ g
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
0 P8 I7 k0 p1 y$ iSet attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
# J) Y$ L. l0 o1 lattr2.Alignment = 7 '居中, y1 }; O7 ~3 z  @/ z

' E) b- w1 o6 ?+ L$ m& Y6 q  ^
9 u5 {- c0 l/ s# t6 u) U5 ADim objCollection(0 To 3) As Object '创建选择集
6 E8 E2 q' ~& N0 mSet objCollection(0) = line1 '线条1加入选择集
( P4 |5 B  f& b' q  n; ]Set objCollection(1) = line2 '线条2加入选择集5 g' L$ _7 ]! f% R  S/ A$ H
Set objCollection(2) = attr1 '属性1加入选择集
% e) h7 i3 E9 r/ Q! x  Z6 _7 USet objCollection(3) = attr2 '属性2加入选择集. b+ h7 Y8 d8 C5 a

3 R$ T% H; v. j2 `$ oCall ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
5 j5 u# g4 L% V" G+ Z1 S
. P: B7 ]. h3 d2 b) dFor Each element In objCollection '在选择集中进行循环. X  p  B7 J, e
  element.Delete '删除线条和属性(此操作并不影响已创建的块)
. J! `9 T+ W( pNext
8 S1 z! ~+ r+ \0 _6 n$ T
, `/ G9 @- A3 R, W- s% \8 m2 s+ w' L: p7 U% s2 w
Set playerlay = ThisDrawing.Layers.Add("球员") '新建图层
, a- ~" I  J* C4 ?' w, aplayerlay.color = 2 '为黄色
' Q% V1 A% I8 T: Z9 M8 ^ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层6 Z3 U& \) d2 n1 B- O6 z$ P
( B0 l6 f' t3 Q6 c( }8 E, F
Dim p1 As Variant '块插入点位置
; N" O$ @" E5 w% o6 P
2 [! Y9 z1 }' P9 D& vFor i = 1 To 11 '插入块" n5 x3 w3 I( R
  pstring = CStr(i) & "号球员位置:"
, i* {, q; y- P6 V% h3 y, w# j5 y  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标
+ z2 @% {3 Z; |6 i: v7 r  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")* p# i' I  B2 \2 _  P
  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块$ R& z4 R& {6 U5 P$ \
  Attr3 = blockRef.GetAttributes '获取块属性
( ]5 j( j. Z7 H# s2 b1 f  Attr3(0).TextString = CStr(i) '赋值球员号码& b! V! n, ?6 B$ t/ h3 O
  Attr3(1).TextString = nstring '赋值球员姓名
; V' E8 L3 C  m+ `# e# pNext
. K! c" @0 W1 X+ O1 w$ k! n* F% A# V& {5 [$ P3 |* ]8 M$ P- `
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 )

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