QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:
5 Z: _' i# O; n, _% C  r. K: tSet blocksobj=ThisDrawing.Blocks.Add(基点, 块名)+ Z$ u7 X7 Y; d0 _% k$ b$ [) E
把选择集加入块中的方法:
* {1 u. e  g2 _" {2 zThisDrawing.CopyObjects(选择集,块)) X4 d1 u! W5 ^: i
插入块方法:7 K% V; _5 i3 I# T- J) g! S
ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度)
* ?3 B! W7 v- m  e& I( b: j  R画块属性方法:
" O0 C" o4 B" M8 W/ a' bThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
. n1 i2 a' H  y" g9 |1 ^  Z. ]7 i  o一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
' [+ J* ?1 X9 ?% D编程思路:( U3 u) M: d+ Y$ h$ ]
1.定义一个空块7 ^- Z" I; l* U$ e6 `
2.在块中画一段弧(球服衣领)$ ?8 v. A, u) c" d3 C7 @+ q) T9 P
3.画多段线,镜像画出球衣' A# x* v4 ?: c. |
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性$ q. N" p% Y: ^( g' t
5.把多段线和属性复制到块中
5 W" q& V6 Y4 {; r/ X; j8 W6.提示用户点选球员位置和姓名
. ^# w" l, t7 _, M/ R7.插入块,修改球衣号码属性、球员姓名属性: E! S1 ?7 B, ?; i7 ^. J

" a* J5 Q+ \8 N+ ~: M+ j以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。- O) E5 k* L  s1 d; P, h, i+ z/ r; @
Sub team()/ p4 z$ p  Z. N/ ~" K# x
Dim playerlay As AcadLayer '定义球员图层
+ m# x5 q. j# _2 j' lDim playerblock As AcadBlock '定义块变量0 b) ?* ^' c9 w5 m: W6 {: G% Y
Dim arcc(0 To 2) As Double '圆弧圆心
6 U% N, z5 X( l& S; `, d" d, D( [Dim linep1(0 To 2) As Double '线条端点1
- `1 t0 ]/ S. q( iDim linep2(0 To 2) As Double '线条端点2+ B; p0 Z( X  f2 |0 R
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点/ S% ?1 W. G* R/ x( ~0 t) M7 N2 t& ^
Dim basep(0 To 2) As Double '块基点
' W2 q  o- a3 E  ?* g; GDim playernumberpoint(0 To 2) As Double '块属性插入点+ b0 ~5 V0 t9 J0 r6 d7 u9 F. `
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式7 r. h) y0 n6 l2 G+ t
Dim blockRef As AcadBlockReference '定义块属性变量0 ^7 n" p4 z8 e: M& D* A* S
Dim Attr3 As Variant '插入块属性变量# v5 n. L( Q! r/ T& X

4 K. b5 a1 O( QSet playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
. {4 c! u0 W4 v  R
2 s' R( f9 F! v$ ?arcc(0) = 0
$ e8 u$ j) }3 x- n7 Zarcc(1) = 430
% u+ M% A4 m& H9 `$ d- |) s7 w% JCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中- J! ]/ E- r' R7 E$ D4 z
! J( n9 K& |) E' k6 U  D6 X3 B2 l
pline(0) = 00 l6 t$ u% b/ p2 K4 `
pline(1) = 20
+ h$ J9 S5 a; E( r! S' i+ _2 ?' P' q) I
pline(3) = 100" k5 P# h: S  q1 k" z
pline(4) = 20
5 W4 ~5 @/ i) G- h  c1 c
  ^( b, h& _, X* ]pline(6) = 100/ L6 V6 m% k% ]9 H) d! i
pline(7) = 2507 G0 P! ?1 n) f% P, X

' Y/ X$ p, ~% S7 S/ a) Mpline(9) = 125+ O7 A8 |8 x: O% j6 N
pline(10) = 207
' s! C7 p: v( K5 v, h7 ?1 m3 X$ a& J8 _4 ~& Z
pline(12) = 212
# {) o; [# a/ u& r: Q8 lpline(13) = 257% M7 N5 T" h; B4 F

! ?" g) o3 p2 t/ C0 B! C- u  Z. S" u5 E0 U4 z4 _9 ~  F
pline(15) = 1129 b( N+ U9 Y' q9 t: L
pline(16) = 430
' k- t+ h! i: R! |9 ]
0 `2 D  w; L' e* w' m7 j( d
. m8 O! e/ ]' }3 Ppline(18) = 50' C" x$ D- w( e( ^" f* a8 J& h7 d, ^
pline(19) = 430/ C$ b) G) [/ D4 `+ W! e4 M
- [) _! T% Z6 `5 u
Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
. u$ A2 P6 `5 L; q' g0 a6 R- K" Z' L
, B* i; c* u1 N, Q2 Alinep2(1) = 1 '镜像轴第二点位于Y轴上任一点; ]; z: K. t! H8 D8 s% d4 D, X3 i
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线) d: P* J2 Y2 N# t2 a

: a$ z, b/ k" G8 \$ F" UDim p(0 To 2) As Double '定义坐标变量
7 P* g; T+ q8 V% ?1 USet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式  G  I4 E( r3 Q
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体
5 M0 z) p# ?; b  B" b  v6 w1 BThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt
$ |& a, L3 a3 {
$ R! V+ S+ m8 nplayernumberpoint(0) = 0 '块属性位置
. A! E5 \( y0 P* Cplayernumberpoint(1) = 2004 D, U  M. P$ S0 I. z5 x8 a
Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性
3 b8 G! {$ }! vattr1.Alignment = 7 '居中4 ?  o' O9 S( [1 B
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点1 i& [& e0 t3 s, ~8 x& k8 Q
Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
$ A, M; [9 H4 {6 Eattr2.Alignment = 7 '居中
* Q5 X9 {- R" U6 `7 c4 S. R: C# O' ~" S  q

0 R7 T  M7 B; r' v$ |4 j! p! WDim objCollection(0 To 3) As Object '创建选择集% t" }  ~, x# L: a
Set objCollection(0) = line1 '线条1加入选择集
1 z- Q5 G# K! u5 DSet objCollection(1) = line2 '线条2加入选择集# U8 e; q+ y' O3 j/ j$ ~' t
Set objCollection(2) = attr1 '属性1加入选择集2 w8 e9 y. \& Y
Set objCollection(3) = attr2 '属性2加入选择集
0 D3 [; e, T/ k
( ~# g; f# N; t* q% \+ H( Z8 ZCall ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
! q6 @) O- E# g7 E, |, B
& C/ Y7 q" Y1 I% P; z5 A8 BFor Each element In objCollection '在选择集中进行循环
& Q" |5 w0 y6 d* ?9 S. {! s. a. @( b  element.Delete '删除线条和属性(此操作并不影响已创建的块)
/ x: [3 s5 w; L! o6 s- m" X/ e9 h! yNext
% T" D0 E9 }3 V- t- T
6 }4 _# T- M+ u3 W
+ o2 ]6 h8 A  g5 ySet playerlay = ThisDrawing.Layers.Add("球员") '新建图层
1 ~9 u# e" U1 S* E; kplayerlay.color = 2 '为黄色
+ o/ J! |4 A9 e! C; K' bThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层  t# m: r& N# S; q) p

% p& S6 |* F- i8 KDim p1 As Variant '块插入点位置4 S7 y* K# Q2 b7 x

  Y" v: o7 R  c. P# b  sFor i = 1 To 11 '插入块
7 ^- t# a' V9 }  pstring = CStr(i) & "号球员位置:"
# f' `" O- O6 B- I  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标
# Z8 |: a$ o4 Q: C( U  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")9 q5 v# o, B7 ~
  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块
" @9 b' s* z3 I) T3 |, S0 y# L  Attr3 = blockRef.GetAttributes '获取块属性: R* M% i* j4 O
  Attr3(0).TextString = CStr(i) '赋值球员号码
0 [1 [$ a9 M, E6 l# k9 y7 J0 U# m  Attr3(1).TextString = nstring '赋值球员姓名% D6 J3 ]# A  _5 L
Next
6 @$ l0 H$ ^; [0 p. i: [3 k9 S( g- E! R7 v! h( L9 R! }1 E
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 )

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