QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:
; d" G& |% a" F% ~, x6 `* Z$ pSet blocksobj=ThisDrawing.Blocks.Add(基点, 块名), Y! C8 F& @# l3 P/ x
把选择集加入块中的方法:
" n" \. l& @) U$ ]: AThisDrawing.CopyObjects(选择集,块)8 E3 l9 B0 I) M) Z
插入块方法:
, @& l5 a: e' A% G, [+ c& CThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) 0 H( H1 V/ \+ F& G4 }
画块属性方法:: ?: c4 U" @5 r6 ^
ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
# {4 r% y5 M/ f1 h一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式, N8 b/ L& K- ?
编程思路:; T3 Z$ x: T. h) W% R& k+ T6 L
1.定义一个空块
4 H7 x2 q6 Z) r& s2.在块中画一段弧(球服衣领)- R+ E6 L& w) k" @# H0 H; {
3.画多段线,镜像画出球衣6 {8 n) F* n. Z9 t# n' a, F
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性9 b! R" |' T' t
5.把多段线和属性复制到块中. `5 r) q. |% c9 z( y
6.提示用户点选球员位置和姓名! z# y% }& R, K& Y
7.插入块,修改球衣号码属性、球员姓名属性
4 w4 Y! x; Z( \9 M
8 L6 v" v4 w+ A. y7 x以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。* v9 F4 X4 r/ Z
Sub team()
. L! W9 f1 f1 Q& j& ~- ]; X0 VDim playerlay As AcadLayer '定义球员图层: c# M+ U2 I5 Q2 r+ h% l; M
Dim playerblock As AcadBlock '定义块变量+ E, S+ u: b3 Q2 k
Dim arcc(0 To 2) As Double '圆弧圆心. i  o# w! W: Y: j$ B7 g
Dim linep1(0 To 2) As Double '线条端点1/ E4 q" t# L/ R+ _4 A8 E% L3 n
Dim linep2(0 To 2) As Double '线条端点24 d) i- i$ `7 [$ t, u
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
7 S+ f: b8 c0 e1 v& f% V/ }Dim basep(0 To 2) As Double '块基点2 _; _1 |. W- k' s8 t9 l, Y
Dim playernumberpoint(0 To 2) As Double '块属性插入点/ k8 M- L# F! j$ Y( ?7 U% s2 U
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式& o" z6 ?# A5 J& P6 t; o2 Y" W
Dim blockRef As AcadBlockReference '定义块属性变量
2 [4 O2 v/ p& L' u+ }/ \% ^Dim Attr3 As Variant '插入块属性变量
# k/ S9 b) a1 Y# m
  J5 a% I. B) v/ W/ K. A9 LSet playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
! |5 i$ T; F. {3 A" c! `
6 j2 F" S. S! G1 V( N; Z% Larcc(0) = 0
7 L8 y( T; x; ~9 A6 H9 parcc(1) = 430
9 D8 Y$ [& g' P& uCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中. z8 {! m3 E7 P" j6 J( T+ J

* e9 Q" m; B8 [/ Epline(0) = 0) q' u: M7 p7 }7 z+ G  R6 S; K% Z
pline(1) = 20
9 X( z5 V7 X! x' W/ o
" n# w! W3 {. z9 e0 Wpline(3) = 1004 ]  H' K! r6 k$ d8 b. B
pline(4) = 20
8 u% S% g8 E/ S
- L' z4 P% s* H* q# epline(6) = 100
. P, T3 a5 h% D! J: e0 ?pline(7) = 250& A! C. _% x4 X" \3 O6 _9 R. c

& q0 F2 F8 A9 \+ ]8 gpline(9) = 125
* W  f$ [! F5 h  r' D, D0 Spline(10) = 207; V6 U" t5 C- ~! n
4 H+ o% w  y. D8 _3 K
pline(12) = 212
  E; C" g6 k- Z0 `( gpline(13) = 257" s& g7 l% g1 |1 [" ?( ^9 E
1 @( g* \& X( D5 L

( C2 v0 a' G9 a8 `pline(15) = 112' S; w. W  N$ \/ c
pline(16) = 4304 Q* _" o+ r" I- N8 ]! [

9 u8 c" Y7 U+ h/ ]! a* b
3 {6 L; S# z$ V. T+ N( npline(18) = 50
& r+ u/ w0 R+ Upline(19) = 4305 g7 l  h- K8 g% w

0 u6 X: z# P+ g% o7 B6 PSet line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
9 M$ b' X; ?  _& i
2 x+ S  B' ?* B1 `# `, Ilinep2(1) = 1 '镜像轴第二点位于Y轴上任一点6 ?  m2 {" O6 E
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线" a" K; F$ }! W8 P4 x

& ]  C& @" ^1 d' nDim p(0 To 2) As Double '定义坐标变量
; ?* W1 {- g% a# _8 WSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式' w0 i1 D8 L# Z/ D* q4 o9 f* b
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体
' k( }5 m: J" xThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt$ M3 B( ?* R4 C4 i$ c
6 h) I3 t$ `; m; D0 b2 ]! x
playernumberpoint(0) = 0 '块属性位置. S: g$ m0 D8 ?+ u5 N8 Z5 z
playernumberpoint(1) = 2004 l* Q' P9 b* c* H% g5 d6 z4 X
Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性
8 z0 b2 D- Y! p; D4 uattr1.Alignment = 7 '居中
% z1 i& ~4 G8 u6 L' Wattr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
& N% M4 |6 C$ x3 _3 ^8 F+ XSet attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性, o, b7 S/ `7 K1 a- J: y6 g
attr2.Alignment = 7 '居中
% I( J, Z; b5 T; K4 _4 S3 X: b3 \
, C" g4 [' p. M1 k& f, z- ]6 J, o6 h
Dim objCollection(0 To 3) As Object '创建选择集
7 x; A6 ?- ?6 X* p, s4 ~Set objCollection(0) = line1 '线条1加入选择集+ A  D5 q$ N* F% o" c
Set objCollection(1) = line2 '线条2加入选择集4 i# T! ^/ A$ C; p0 w) Q! O) ~
Set objCollection(2) = attr1 '属性1加入选择集
/ |* D( p( L; x" q2 j6 u) LSet objCollection(3) = attr2 '属性2加入选择集: u/ v9 c, q" E2 e# k: G6 q0 T

4 P6 V: O$ L' H8 ~/ Z3 nCall ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
" K. C% q! G9 s7 s- Y7 V, v
( ^, O3 ]/ ~) u1 ?3 v& p& Q0 O* A: UFor Each element In objCollection '在选择集中进行循环6 V, u; I/ n, y) b. j  p9 t! i
  element.Delete '删除线条和属性(此操作并不影响已创建的块)
5 ^7 N! X9 q4 u# NNext
4 Q4 E6 C( S3 S% V/ I3 F
: k: @! I) D+ u& Z" d0 c
" m" o* j, H, x  pSet playerlay = ThisDrawing.Layers.Add("球员") '新建图层
( u$ U; q  F+ |& ^# v; x" Fplayerlay.color = 2 '为黄色
" c# p4 }" s& r% j6 X8 uThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层: q  v/ c2 q/ G9 L
) J' K3 N& ^1 k
Dim p1 As Variant '块插入点位置8 Y) K3 d, F/ J! Q6 u

/ F! \+ z/ V: F/ u. hFor i = 1 To 11 '插入块# m3 y/ r- W& m& x* y4 ]( g! d( o
  pstring = CStr(i) & "号球员位置:"
2 D4 t6 x: K2 p$ I  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标
) h. j  \7 R0 L' X  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
6 w0 l3 V4 \* D5 |" y  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块
5 a$ L3 r6 G4 F: Z' L* I! J( V" r  Attr3 = blockRef.GetAttributes '获取块属性+ g* }$ k4 C) e8 h: }/ J0 B3 }
  Attr3(0).TextString = CStr(i) '赋值球员号码
, f' Y' r& H  q8 H  Attr3(1).TextString = nstring '赋值球员姓名/ R, J' \* T3 E" @' m! m5 M
Next! \% x! }0 O) q6 Y% u2 Z
2 n% D4 S- m" ~; X7 @9 W7 p+ {
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 )

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