QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:
  I- X9 }5 W( F) iSet blocksobj=ThisDrawing.Blocks.Add(基点, 块名)
9 K) e8 M& l4 c9 q( [$ ^把选择集加入块中的方法:
1 Q6 w2 g, u! R5 n: X7 NThisDrawing.CopyObjects(选择集,块)6 @% y; E- k( D- J! Z: g
插入块方法:' I1 m% E/ l7 B
ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) % Y! S$ G) w1 t! K
画块属性方法:
1 z+ F4 v/ J) u- c+ aThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
4 ]$ f/ Y( ]) J$ }1 m& _一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式  b. u5 @/ a6 U/ S+ W
编程思路:
, Z4 l- [, j& s! C; M1.定义一个空块( q5 W0 T( p& |& u7 Z0 c* X+ T
2.在块中画一段弧(球服衣领)  L: O9 D* j  e6 U. L! a5 I+ r! g
3.画多段线,镜像画出球衣: W# y# P+ G/ a; o' I- K
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性
, r. |1 x2 [. I# D  g# E5.把多段线和属性复制到块中
" ^5 N( a7 H& d7 @& l, o* m6.提示用户点选球员位置和姓名8 @9 Y4 @2 |8 |5 P* ?
7.插入块,修改球衣号码属性、球员姓名属性4 R0 [. e" s) r0 f# j

' c+ i! ]9 S" ~  t" s3 M& G以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。# \; f9 E$ h) N& Z
Sub team()
, c0 s: G4 Q  n! Z/ ODim playerlay As AcadLayer '定义球员图层
2 j$ G8 K0 c( g3 p9 A. t0 M! @Dim playerblock As AcadBlock '定义块变量. [- t* L* T5 y! `% f9 l2 I& ]
Dim arcc(0 To 2) As Double '圆弧圆心
( ^# y: ~) ~+ T+ \Dim linep1(0 To 2) As Double '线条端点11 x+ |0 m9 K* l9 G9 ^; q: D! Q& r6 [
Dim linep2(0 To 2) As Double '线条端点2
  f* i: `2 {' e3 u2 vDim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
( M& t, ~0 m* E0 ?" w$ KDim basep(0 To 2) As Double '块基点3 I, k. w3 T  z  X3 K
Dim playernumberpoint(0 To 2) As Double '块属性插入点' W  d  s; F: U- A4 H2 K
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式) `4 K( c1 h3 G! o1 y+ x
Dim blockRef As AcadBlockReference '定义块属性变量9 e6 B( ]8 S2 S; z4 `" P
Dim Attr3 As Variant '插入块属性变量2 e/ d* s7 t6 q1 q
' M( I- q; ^. a# T
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块% w; z& J5 r' ?

- _' a' Z. G- H' m. p1 k% qarcc(0) = 0) m- H" a. m& I. |
arcc(1) = 430
: v" ~0 U) A1 B" ]Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中
2 Z: l/ g" y% W$ @% |& b) q& u! K( o+ |8 _( |* G& T- W: Z
pline(0) = 0
1 J0 \& U5 S2 Bpline(1) = 20
- @: d" o1 X5 t  Z8 P7 N' H; m
- v0 i! u5 T5 h+ J1 l1 Wpline(3) = 1009 @; a3 R/ O5 L, v9 o3 K2 h1 f
pline(4) = 20
# F4 M' G4 d, q! I( D( A( l" @6 D/ e6 ~! W# q( X& T$ r
pline(6) = 100
* }7 f: @3 o, d% B* s0 vpline(7) = 250. r1 y+ Q" \! Z. F5 g8 [

, m2 x: J: e0 d7 P5 ]8 vpline(9) = 125
* Y3 F8 L  y; p* z  J% opline(10) = 2076 _0 d! ?% j/ h% Q6 Q4 \
- x8 |% u0 h- {! |) @# d! Z0 a
pline(12) = 212
  ]% a  h* k, C- \: a8 \pline(13) = 257
! h9 P6 |6 h& v; n+ h; N
* R4 u4 _. q/ s" u
" d) t) z" K6 gpline(15) = 1125 H, ]2 w: l2 r! n( a, g9 a
pline(16) = 430* O; [* E: _: r8 n, Q$ J" E" |

8 O# P& H( V9 h8 x2 J6 p! u  E1 M( J/ i. `. V: D8 c7 R
pline(18) = 509 \3 H/ U; d$ Q5 B7 g+ E( H
pline(19) = 430
0 b$ l& H% u. p; ?7 [7 {! a) r
5 V1 @2 G. B% [; b9 d* QSet line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线; n& o! ]5 J* B6 e/ p

; Z+ v* v. d# Y. s. _' Dlinep2(1) = 1 '镜像轴第二点位于Y轴上任一点: @; R1 ~6 `7 j6 _3 M. \/ ~# X2 Z
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
+ K! u# {: e8 t, P5 ]$ P) ~
  K1 j  O6 s3 a: }' C; fDim p(0 To 2) As Double '定义坐标变量
! a  ]0 x" c4 l% t' HSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式  G& y+ f4 n0 r0 W. p/ p5 H
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体
5 R' s% j5 D- \8 v" j6 `1 bThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt
* Y; d; Y$ x+ s9 T$ S- U- Y, C8 S  E& }6 c: z* s) _
playernumberpoint(0) = 0 '块属性位置
9 ^/ z* Q/ a$ w$ F% U* u3 Jplayernumberpoint(1) = 200
  P3 c( M% o" CSet attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性) A' j% ~- l- P/ {! }$ q+ Z  z( c
attr1.Alignment = 7 '居中9 s9 g8 a. g7 z% [  f( Y) S" U
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
+ b. z! ?7 b" d0 F8 }Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
' T( w' u9 ~4 O- p8 cattr2.Alignment = 7 '居中" v! L: n: f, i4 j' F# w9 R# s% R
; t+ @2 C% _. h3 U7 N% B
& R5 f+ m7 A# b( V1 i
Dim objCollection(0 To 3) As Object '创建选择集( c5 `1 x4 `: s# l+ r/ I7 _
Set objCollection(0) = line1 '线条1加入选择集, f$ y! m, E( `% A7 C$ p/ \5 Y+ D
Set objCollection(1) = line2 '线条2加入选择集
1 ]! n6 {) I  }5 GSet objCollection(2) = attr1 '属性1加入选择集( E+ {% X5 q7 g( z8 F
Set objCollection(3) = attr2 '属性2加入选择集
: P) z! t7 W3 G9 [0 y" t9 a5 ^! ?9 J$ o; W% E3 s) ?1 D
Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
3 M& J, f- H' h+ x
6 `3 u! n- {2 T! e7 ZFor Each element In objCollection '在选择集中进行循环" p1 Y/ F  ?- p1 f* f% T
  element.Delete '删除线条和属性(此操作并不影响已创建的块)" ~  }6 ^- ~, m6 i, J" }4 f
Next/ V7 K! }0 U7 E$ W/ s" ?  {
" f; m4 k) i; t# H9 @

- o3 [/ f; k. J# u1 U3 |+ xSet playerlay = ThisDrawing.Layers.Add("球员") '新建图层3 b+ ]7 a' P& Z5 Q# x: B2 _
playerlay.color = 2 '为黄色
1 k' Y$ @* n% t  B: l+ B! qThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层
! [) Y  Z, b, i" q2 L  i1 Z, K- N* d' O( \; j
Dim p1 As Variant '块插入点位置
3 K, `' n) O, x% T3 O; q: d1 M9 G6 c& m$ g* Q: w0 ~
For i = 1 To 11 '插入块4 M. b) ?6 G% e3 b: D
  pstring = CStr(i) & "号球员位置:"6 y7 _8 j: G, N& |5 y& d' G, L
  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标7 C- M' Z8 @; C* [$ {
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
; v5 A- S; z- E  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块
, d* _5 e: b2 W; O  Attr3 = blockRef.GetAttributes '获取块属性6 I! ~5 G5 i9 N% \) c
  Attr3(0).TextString = CStr(i) '赋值球员号码* h+ ]2 W2 Q3 a  v$ b/ P6 N
  Attr3(1).TextString = nstring '赋值球员姓名7 S1 Q& G/ l( K0 K2 g2 N, A; A
Next. ?! H# L* M' g

5 j. P3 [. I2 W9 X% ~  J2 gEnd 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 )

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