QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:7 E7 V6 E/ G; R0 ?9 k
Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名)6 G& t. C5 S: M
把选择集加入块中的方法:1 _* s0 c/ Z4 @- J5 ~
ThisDrawing.CopyObjects(选择集,块)2 x# r0 @" @' Z9 m9 A
插入块方法:
+ `6 c5 e$ Z# B2 G1 @! F7 wThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度)
4 f# ^3 E* S( Y8 L画块属性方法:6 A, S" o: d  d  y: q8 R% `
ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值), e# D( I1 {5 \& T
一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
  J  J: h' Q, R* q编程思路:3 e/ C* ]7 M+ B; n& G- F1 F, Q
1.定义一个空块
; y; W& L4 [8 A. B. g: q2.在块中画一段弧(球服衣领)
" Z! ?5 w! x7 @3 @3.画多段线,镜像画出球衣3 d% i( e$ n! w0 H5 c/ {
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性
: y, t9 r3 G2 O. Z+ D# q2 B, E) m5.把多段线和属性复制到块中4 x1 \# k. G8 F
6.提示用户点选球员位置和姓名1 v# U; Q. c. K. Q/ b( I% j. J
7.插入块,修改球衣号码属性、球员姓名属性
9 \/ T; i3 L4 p' L4 [) y
$ e0 D/ F# [9 \/ w# {0 f以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。
, y+ _2 {1 B% y1 f3 YSub team()
$ \0 @# A# y7 E5 `Dim playerlay As AcadLayer '定义球员图层
  H/ r7 r$ T: D1 GDim playerblock As AcadBlock '定义块变量
" z! I# B% D4 ]1 |! W7 ~+ P0 SDim arcc(0 To 2) As Double '圆弧圆心
0 r: N, N7 n) W, `Dim linep1(0 To 2) As Double '线条端点1) k* g7 _& H. ?' ?+ n0 @" a- s
Dim linep2(0 To 2) As Double '线条端点21 o! Q4 {! g0 q: E0 ^: V4 {1 ]% v
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
, u! T, W* u/ S( j. s* hDim basep(0 To 2) As Double '块基点* N0 r! Q3 ]1 y! f
Dim playernumberpoint(0 To 2) As Double '块属性插入点% j% Y3 r/ q/ S( W; C
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式
' v0 K6 g4 o* J9 Y4 j6 _: f" pDim blockRef As AcadBlockReference '定义块属性变量
% r4 h/ R7 ]( i% @Dim Attr3 As Variant '插入块属性变量8 E  C& C$ ~. Y( b- X
. A6 B4 a8 f4 ]9 a: O( D+ t
Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
7 P0 Q; a! _& `5 X5 A. [4 A* M* ?5 c0 I% S# S
arcc(0) = 0- ^- f' _1 J* L+ O0 _
arcc(1) = 430
- K6 p, z$ z- v1 DCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中  v( ]  ^2 I1 _
5 r7 h0 u, P$ n/ d5 d
pline(0) = 0
: a6 X/ I0 ~) g# Kpline(1) = 20
- u7 w3 t% i9 C* A9 s8 B. T4 {
  |% O; ^7 q4 @$ j% k0 |pline(3) = 100$ W* _# ^" t6 c9 h
pline(4) = 20% u9 N4 t( W! s( Z8 t

" t2 R* d/ S/ b1 }/ hpline(6) = 100
  l" p1 y# R. r( v  K5 Z% W" Z& Ppline(7) = 2501 f+ x8 F4 P. s
& z3 X8 I: [) N. {' a% j5 F
pline(9) = 125
7 h6 G5 C  W5 spline(10) = 207
3 x. e. P/ W6 x. r5 O: Q
8 d: |% g2 I2 }pline(12) = 212
. B+ W. O: ~( K6 wpline(13) = 2575 x! _3 J! _2 o! U! K: x2 c

4 n( f& Q; w+ |
; {1 o; X- K0 o& q$ Upline(15) = 112! J) F' H/ O6 ~% W3 a( T7 `) n( W) A
pline(16) = 430; ?4 u& @, X1 I: R5 J9 F' }+ g& X
+ U: S8 h% q: J5 w
: t/ s! `* H+ V7 J- \
pline(18) = 50
2 B- Y. p# m0 b9 }1 ?) ipline(19) = 430( C+ |8 @- o1 c; p; P' \  u

( @0 r- v5 D, P8 k' L% XSet line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
4 j' Y. \. t# f$ v8 ^# j- K( E9 R+ ^& d# e7 z5 ]
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点# H7 T3 _6 S/ F% @
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
5 J# y# Q6 R/ l: v7 Y& O
1 R* l+ q3 @/ \" O5 FDim p(0 To 2) As Double '定义坐标变量
! n# j/ F, K* f' |Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式
! F7 U- g8 B8 y& U' d# u% qmytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体( J/ _' I! \# u0 L! L6 a5 t- N
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt7 A' Z% P, @3 a; r* n8 A$ k) I# l4 g

6 [; U9 A) t- t% wplayernumberpoint(0) = 0 '块属性位置+ J' [% e7 G& T& {" k  Y7 b6 e
playernumberpoint(1) = 200; w3 Y' c5 y! I
Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性+ ~" |- m5 J. |% X
attr1.Alignment = 7 '居中8 \6 p) |3 Y* e' g4 \! X% |
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点1 ~8 o* x  t7 l5 @/ @2 y
Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
2 i6 h) j6 m7 v/ s0 Qattr2.Alignment = 7 '居中& A4 A# Y9 r1 o
( A* b4 c  K9 ^$ o3 ^( A( C0 X. e

  a2 S+ _6 j8 C1 RDim objCollection(0 To 3) As Object '创建选择集+ }% G  {6 U6 `" L0 ^7 f
Set objCollection(0) = line1 '线条1加入选择集# ]( u9 V! P$ Y9 t& \5 F; }+ @* J" @
Set objCollection(1) = line2 '线条2加入选择集4 g* J) x* {# ]; V: W1 _* ]
Set objCollection(2) = attr1 '属性1加入选择集( N: j! q+ G# h4 p
Set objCollection(3) = attr2 '属性2加入选择集
7 Y4 ~1 o; c2 w
0 n- X. Q3 j& U/ {6 \' {Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中# x9 `! [: Q. e3 ~5 \$ V' c8 f

/ ]4 G% H# R' T& N) fFor Each element In objCollection '在选择集中进行循环
) Z! R; K: K7 i  element.Delete '删除线条和属性(此操作并不影响已创建的块)9 ~7 u& n. r3 z7 o
Next
$ I9 _  V3 |* m# \: d
8 a* p7 P  h; g$ q7 r) k
  c0 o( u! q1 b6 A" F+ A5 [Set playerlay = ThisDrawing.Layers.Add("球员") '新建图层
1 Q1 y' Q6 v; K6 y3 o& \  lplayerlay.color = 2 '为黄色
1 p) i* q: P! d! t" @2 RThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层2 X( n9 s8 K# ?' f2 p5 V/ {& M( I
- [" a# C! Y6 u% C/ G$ m9 a+ C
Dim p1 As Variant '块插入点位置
: C3 n- R" \- _1 [3 W" A0 {" a& k9 r5 i8 ?' l9 I7 k
For i = 1 To 11 '插入块
$ W  B" q9 s5 L" ]) F" H3 F  pstring = CStr(i) & "号球员位置:": M/ G: ], v, T2 M2 l5 B
  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标
% i; P7 e. S; ]2 {8 q  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
/ L5 K( p3 X5 R$ V  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块1 g" }1 a( q6 b6 i: Y. @
  Attr3 = blockRef.GetAttributes '获取块属性
% F; P3 Y8 Z0 ^- r  Attr3(0).TextString = CStr(i) '赋值球员号码
3 i( J2 S5 `5 a6 M8 \  Attr3(1).TextString = nstring '赋值球员姓名
% R- B( F! @5 g, K* _. }Next2 c- J2 c) t$ O; M2 o
# m- i* C2 i: h9 _6 O
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 )

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