QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
6天前
查看: 7210|回复: 6
收起左侧

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

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

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

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

x
定义块方法:3 S; D3 E8 O/ P
Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名): A. K- f  M4 V+ R* y% K; ^, ]& m
把选择集加入块中的方法:
# J6 ~/ f+ V1 @5 OThisDrawing.CopyObjects(选择集,块)
2 t7 E  {+ z2 k3 r) X插入块方法:
( G. C% w4 b' [* iThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) 1 i! W1 S1 [: i1 J8 x
画块属性方法:
) K6 [% c" ?; V4 l/ ^1 PThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
$ ]! l( i& ]0 k. W一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
+ B# }; Y, ^( Y编程思路:0 T: x( S, ~5 ]4 V7 I* n7 Z
1.定义一个空块
* ]  K/ T# G  o2 m6 [4 ^2.在块中画一段弧(球服衣领)4 L+ E& o7 ~, C; ?, }0 `
3.画多段线,镜像画出球衣3 {, `. t! o7 r. r9 K
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性% h+ k: f* Z: [1 w  U
5.把多段线和属性复制到块中
4 K1 l/ g! ?7 c6.提示用户点选球员位置和姓名
4 n6 C; A) r8 X- w+ u7.插入块,修改球衣号码属性、球员姓名属性
9 [+ `9 ?$ C0 f+ ?0 V; r, x" d& V' `7 n0 h
7 i+ W0 J' M' }+ t  ?1 s以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
& j' J' B4 D7 ^' W* GSub team()
6 X! S8 o: H& c- f' {* v7 bDim playerlay As AcadLayer '定义球员图层' ~, N/ z% R3 }1 q
Dim playerblock As AcadBlock '定义块变量
% \$ ]- g5 k$ z. t3 uDim arcc(0 To 2) As Double '圆弧圆心9 T* Q  n  c6 g6 U2 T
Dim linep1(0 To 2) As Double '线条端点19 F$ ?3 R7 ]- @( d
Dim linep2(0 To 2) As Double '线条端点27 |2 N6 }/ v; ~2 E6 @5 X' l
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
  g4 E* O" y% Y5 _Dim basep(0 To 2) As Double '块基点
% H. @* [/ s" N* eDim playernumberpoint(0 To 2) As Double '块属性插入点
* k1 l; m) Y9 W; SDim mytxt As AcadTextStyle '定义mytxt变量为文本样式
- c9 _1 ]3 T' z6 c# ADim blockRef As AcadBlockReference '定义块属性变量! ?+ O! I) i9 s& {: J. \( q3 B
Dim Attr3 As Variant '插入块属性变量
4 m& d' S8 `7 W- w3 w! j) i! Q) x
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
. J; V: Q5 \4 @( S  L
  o; _2 k$ u# j* s# q+ iarcc(0) = 09 v% J, p+ o+ A  f; S7 t5 _/ o
arcc(1) = 430
9 e- Z3 ^5 Q8 n2 WCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中
( c: I+ p4 S7 h" i- p$ K: ?; M* ~5 U5 b
pline(0) = 0" ^7 Z' x4 i/ u  U0 ]0 X' D
pline(1) = 20
7 {/ t2 W7 f4 `$ d0 o
9 z3 m1 {  @0 b  A4 U- g; fpline(3) = 100
( t' f+ w6 _4 {. w8 v4 Ypline(4) = 206 J9 W8 w- x3 F, p3 n: H
% Z9 t* s. U& R- H5 Q/ z1 G. w
pline(6) = 100( A) U# F, t, ^- q: e1 `- p. B
pline(7) = 250
9 A( |% s4 H3 N; M1 |; f/ V9 h2 h' R) P! l& }
pline(9) = 125
5 F, Q! A' }% M! Q0 jpline(10) = 207
! i. y, z9 ]3 N
" R1 t  g3 {8 i8 B! Q) bpline(12) = 2129 b. G8 j+ X% }5 _
pline(13) = 257' b5 L/ q1 Y* Z5 a
- [8 z! `/ {8 O) g2 k' e: g0 f: V
; L( R2 _& s2 H! ?
pline(15) = 112; C: q: R" P) l9 i9 D
pline(16) = 430( ^/ [6 K& I3 {3 ^: q5 j- v

% N3 B% j" n; G; `- q8 k* C6 }6 D+ z. t' Y* V
pline(18) = 50& U2 z/ Q; a7 @) W* \4 v; i9 O
pline(19) = 430
! @( a* N/ k, e( d4 V1 H" M; {7 K  p& w7 F* ~! |
Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
( T8 A# ^( a8 S1 v) \+ E3 `5 x# U/ l& t8 G' `4 L+ O+ h2 v. V
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点
( w7 Q) a+ G( J5 i* t/ JSet line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线7 W: F, ]5 H0 {* L/ q" C# m" j

: ~0 R# ?9 M6 T. VDim p(0 To 2) As Double '定义坐标变量
# W" I3 X, S6 ]0 M+ ^5 g' bSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式9 p0 F( `3 b  r8 \
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体
' }% d) \' \9 w  mThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt
: x% n+ B! Z: v# ?5 ^( |/ B+ O" P; ~! E1 K# r  V
playernumberpoint(0) = 0 '块属性位置& z% s, v( I8 Z, w3 R6 U. j
playernumberpoint(1) = 200
* u9 J+ Z7 L4 j) Z+ CSet attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性+ B( K# D9 w% x( D5 P* F
attr1.Alignment = 7 '居中( r, U* V2 o) J; r
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点$ u$ P  d/ s5 g% h' y: I' q
Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
3 s  [- P% g/ k  C0 \* uattr2.Alignment = 7 '居中
5 |+ k* q+ k, n
/ ^- U1 O8 e' e& d* `: H+ L7 s, ^' B& |
Dim objCollection(0 To 3) As Object '创建选择集) O7 p3 O( q% x+ X  b* p$ F* K8 `" s
Set objCollection(0) = line1 '线条1加入选择集
0 g. V1 |. o8 ZSet objCollection(1) = line2 '线条2加入选择集
  M# ~9 F. _; V8 v& W6 VSet objCollection(2) = attr1 '属性1加入选择集5 T2 b7 S$ n1 U( }" f0 V
Set objCollection(3) = attr2 '属性2加入选择集
. M) a5 I5 W: j& O) X* ~
# ?- q! v- C3 ]' g9 YCall ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中) T/ J! h( h$ I6 m) Q$ b6 B

. g: q# q* x2 B8 T5 h' ~For Each element In objCollection '在选择集中进行循环
2 r" r  D% p, D  element.Delete '删除线条和属性(此操作并不影响已创建的块)
8 A! t0 ]9 N' G2 q% P' a0 H  [% ENext
2 [# y! o: y/ \( c- s
; H# c' t% y  u6 e
. s) ~% t) }& {9 I( M! Y( E: uSet playerlay = ThisDrawing.Layers.Add("球员") '新建图层1 d% |# u/ ^( Z0 f$ Y
playerlay.color = 2 '为黄色  ~+ `7 I9 b2 a; A  `
ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层% t+ g; B  y1 x: L5 {4 e

6 X! F: l3 q5 ?3 u& J' @Dim p1 As Variant '块插入点位置
  {% {' g- ]$ ~( U  m3 U* S
) H  a, i3 ]# E& Q8 EFor i = 1 To 11 '插入块2 A. L4 ?* g% X7 d
  pstring = CStr(i) & "号球员位置:"
( x8 d5 W( H6 \0 }- ~7 ?  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标
7 Q9 @7 w6 f+ D: p  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
1 j* Q3 L' C3 G4 h% x! e! D  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块
+ o! _3 g) x4 J  Attr3 = blockRef.GetAttributes '获取块属性: l8 ]" y7 q9 X5 c. M8 ~+ H  {" T# i( Q
  Attr3(0).TextString = CStr(i) '赋值球员号码
- j$ U3 u" W, a4 ^2 d9 B  Attr3(1).TextString = nstring '赋值球员姓名
6 i6 ?+ y" _4 C, Q" yNext2 H4 K4 w0 g; i  |$ X; n

- E$ W  u: v  X. [% C- b  C8 q1 TEnd 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 )

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