QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:! r5 Y, g  c$ u& N8 M: O" Z
Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名): u+ F% G4 A6 s5 U# G: G
把选择集加入块中的方法:7 e3 [/ u! g: y
ThisDrawing.CopyObjects(选择集,块)8 a$ P: j5 _. N7 P& l3 N( [
插入块方法:
  }8 g6 z% L$ u9 F3 X4 p- ^ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) : b* u  x; O# u9 `# X+ f2 z
画块属性方法:
' l5 M, d$ F7 o  \3 e2 gThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)3 M  L9 C3 N8 w/ e2 D4 z
一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
# f% q0 q2 u% s- r0 X编程思路:3 M3 P7 G' e7 z7 ~& h8 B& U( s2 D
1.定义一个空块
4 H0 i4 O; I7 ^2.在块中画一段弧(球服衣领)
6 s3 s8 j1 R5 E- _# F( X; C3.画多段线,镜像画出球衣
: L% B$ t% k# S2 E4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性: k+ C, _: ]" ]# E, Z
5.把多段线和属性复制到块中" M- B! Q& I5 G8 B: `
6.提示用户点选球员位置和姓名
3 i+ v9 u$ n+ Y) o- P7.插入块,修改球衣号码属性、球员姓名属性8 Y6 v7 r" \$ V/ m1 U! A

& h, [* l  d$ s# A以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
# W, J2 J4 B, Y# nSub team()
8 o7 _! X/ ?0 MDim playerlay As AcadLayer '定义球员图层0 V. F- A# S. _# V6 S- d& a
Dim playerblock As AcadBlock '定义块变量2 u! X: g% @/ h' ^
Dim arcc(0 To 2) As Double '圆弧圆心! u% Y' v. K) |7 U( ^
Dim linep1(0 To 2) As Double '线条端点1& ~/ H) s! w3 ^! Y7 R9 y
Dim linep2(0 To 2) As Double '线条端点2# j. C! o0 s, y4 I) {
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点8 b! [* h. R  ?: t
Dim basep(0 To 2) As Double '块基点3 F4 y* v$ C6 \. ^1 M% L
Dim playernumberpoint(0 To 2) As Double '块属性插入点
9 N/ n1 K8 A5 iDim mytxt As AcadTextStyle '定义mytxt变量为文本样式! e7 Q  ~. H" N" B* S; {8 j
Dim blockRef As AcadBlockReference '定义块属性变量
  ^- }6 c& [- {, Z, m- h5 i% R/ n0 vDim Attr3 As Variant '插入块属性变量
% \& W1 y- [5 U' A8 h/ |8 L4 i/ G. T& O8 l
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
4 T# M- L/ D* G& r" a* h" y* Y" \* t4 x& i
arcc(0) = 00 X/ @! H+ z: k; R4 v5 H
arcc(1) = 430
8 \' v. }" ~8 t! o' VCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中
) l1 R7 `; D8 q- K) e- i
! I' u: B7 V3 j5 w! qpline(0) = 0. _" F3 x3 F; h4 H# m1 A% m
pline(1) = 20: Q, L  N, S" c' l
+ {2 s, x& R( w4 X# G
pline(3) = 100: {0 G5 F- y" V% v8 ]: d
pline(4) = 20
! `# i; h5 k' c) o/ [
$ h* Q4 h' z6 Hpline(6) = 100! B) J2 i# Z0 r5 m0 b# q2 a
pline(7) = 250
$ @& E5 V- s6 |7 Y& ~! K
( k+ X: G7 ~2 N. L- r+ Y! Q- S+ t1 }* H1 }pline(9) = 125
! g, ]8 o3 m  U, }pline(10) = 207, o7 D# r5 s0 |0 D$ L$ C

1 j% \2 C" j& A+ N1 s8 @2 ?: Cpline(12) = 212
2 t+ }/ ?. [7 I! ]" kpline(13) = 257
: e, S2 U$ Z0 a: x
, ?9 s- s5 Z) W1 }0 X; Y
% h' O8 o8 l* }' v4 Bpline(15) = 112% z- e0 Y3 o( \: f: m- Y
pline(16) = 4303 H2 I0 K  S/ G% x8 r, T

, p$ m" P6 x- {- x; `% h
+ l& B7 m* R( `+ p! @* lpline(18) = 50
; @9 I1 _2 G8 y# ?% n3 U* H' ^% qpline(19) = 430
) t5 k  `7 B# O9 r$ b3 f
, q: b  {2 @2 z9 y* k5 @9 Q: ?1 ~Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线* W: Y3 @0 U! X' z2 S& F- H8 R
: W9 K( e# U; |, t( W% v2 x
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点' q# k* L. \+ y8 f" H; `* |& q
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线4 y! K( j9 {" t$ ]8 B9 d5 }! b

' e8 O! O/ x$ zDim p(0 To 2) As Double '定义坐标变量. W- c5 {+ c$ j- O. d7 Y+ W/ k
Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式& h4 |& J$ U; P- W# P# h. [8 |8 Z
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体- x8 D' z; D$ @# r+ _; C
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt
8 l& f4 y* d* a- |, F& l5 O
5 Q) }5 V: x) z3 Z8 {$ ^/ ]playernumberpoint(0) = 0 '块属性位置$ |5 H* l4 r2 d4 u
playernumberpoint(1) = 200
* l, [( w6 `3 u; q( S; D. VSet attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性
" [! z1 l* F- ?3 _/ Qattr1.Alignment = 7 '居中
" n& B( a7 b. e  n' W7 ^attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
$ ^9 k2 L3 z! e) U, VSet attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性, m& w9 a  k3 B  k; w! C
attr2.Alignment = 7 '居中
) W5 x- A  c4 t% @' E5 k; R
2 W" z/ v+ B' ~4 p# j1 p( H
: N" n1 R  Y$ I2 c7 hDim objCollection(0 To 3) As Object '创建选择集8 I/ z' m1 d$ ?) \4 S
Set objCollection(0) = line1 '线条1加入选择集0 \/ \/ U' J- ]; p8 d7 E# Q
Set objCollection(1) = line2 '线条2加入选择集! \0 T  x$ [6 ]
Set objCollection(2) = attr1 '属性1加入选择集' I2 q# {( M2 M0 w4 U& u
Set objCollection(3) = attr2 '属性2加入选择集; Y1 q. L6 L, R! I% L, f) t' A; \
1 U/ c, C4 w( r' z. Q
Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中0 b0 y+ V; m8 R- E, a

6 g, q' ]6 }: }0 K% W" F9 mFor Each element In objCollection '在选择集中进行循环$ ]! G) _# C! }+ b
  element.Delete '删除线条和属性(此操作并不影响已创建的块)$ b2 _4 t! \5 U$ w5 @5 _- K" y, Z
Next
1 P7 y8 I* G: g- w4 I1 r3 P5 P& P6 G- a0 n% \2 U: e

3 q: [8 j4 p. G% S4 ASet playerlay = ThisDrawing.Layers.Add("球员") '新建图层! ?/ J" f" S0 _
playerlay.color = 2 '为黄色
+ ?; j. L4 L. x9 FThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层2 L# m) k% R, B- r' B6 ]
- b7 r  G- P  F/ c/ p
Dim p1 As Variant '块插入点位置
  ?4 B  S( B& K2 b" B7 N* \) f! U9 z
For i = 1 To 11 '插入块
4 n$ L% E  ^' x. w5 n  pstring = CStr(i) & "号球员位置:"
! U+ ?5 v% l: ]' L  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标! |, F- U2 \& A% r" E0 G+ z8 Z' r
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")( R% m' r1 u% O; r, H" I' ^
  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块9 F; q" R" n6 w) \) x9 B
  Attr3 = blockRef.GetAttributes '获取块属性4 x" M8 D5 y* @( F  N; a
  Attr3(0).TextString = CStr(i) '赋值球员号码" [( m. l$ ]/ u" D- d1 d) P
  Attr3(1).TextString = nstring '赋值球员姓名0 f  }: K/ \, s. Q- ]
Next
8 C7 `/ l1 _& ]
8 ?" X1 r+ ^& O& a+ X; X5 _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 )

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