QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:
4 Q- z, g6 Q0 t5 y/ `Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名)% H2 S" U! \% M. O0 E; O
把选择集加入块中的方法:& {) }2 h! q, k5 U+ C/ w
ThisDrawing.CopyObjects(选择集,块)/ C& w! p- T  j- E# P; ~
插入块方法:
+ j# j% O5 p% W) Z$ Y. xThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) # L7 W2 o! V& q. l" l) L
画块属性方法:* o- \( @) ~9 ?
ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
$ d# V1 h7 A2 x6 C一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式+ c' I+ s/ r: Q' o" S! |9 v( H
编程思路:) y- e* S( ^1 J# P8 C. F
1.定义一个空块- ^2 E* J* _- n+ {  o% k& A$ i7 [
2.在块中画一段弧(球服衣领)
+ ^  ?) Y  _! s% Z7 @; o! }3.画多段线,镜像画出球衣! K9 n+ ^& g) P$ W+ d
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性4 B+ w; A" K# w) F6 m" F
5.把多段线和属性复制到块中
! E5 P6 W1 S- H! u6.提示用户点选球员位置和姓名
- E$ b) H: N' o7 V7.插入块,修改球衣号码属性、球员姓名属性
! c( J3 U7 p/ V4 v
* f; d" L4 L' D0 q) c) {; C以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。7 F$ |9 @5 V! I9 P
Sub team()
" `0 D0 O* H5 s# z7 [Dim playerlay As AcadLayer '定义球员图层
3 J; |3 a8 q4 n+ e/ x+ L' |$ XDim playerblock As AcadBlock '定义块变量; _/ m+ W6 O4 t2 ^8 {
Dim arcc(0 To 2) As Double '圆弧圆心0 z& S) d6 l7 A' ]
Dim linep1(0 To 2) As Double '线条端点14 n5 P1 q; p* |
Dim linep2(0 To 2) As Double '线条端点2& ~  h$ f8 e/ [% c. k* ?% r1 w
Dim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
) M, G* H- l$ q; K: F' DDim basep(0 To 2) As Double '块基点6 ?1 w* q! b: S; m5 j
Dim playernumberpoint(0 To 2) As Double '块属性插入点  z/ Z  r: }. j% v" A' N
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式& o* v8 P1 g5 n% o* C9 S
Dim blockRef As AcadBlockReference '定义块属性变量
  V- |1 [8 |3 HDim Attr3 As Variant '插入块属性变量
! H5 }! T  G8 h3 e
% {% g8 @& Q3 ^* g% n! XSet playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块
" n. {; p- z0 ]$ X8 C1 n# m; d# B  @$ J- _$ W
arcc(0) = 0
- p* I+ }+ A9 j$ B4 Zarcc(1) = 430
! g8 u, H. j! E- {Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中/ s! D& c) x3 K, P( {

$ ?* e# Z* A+ s! Y. Cpline(0) = 0
' i& g' m- M, d1 epline(1) = 202 W/ j. l" N$ X/ y( R, [- z' @
0 J* I) V/ [$ f! T( X/ f
pline(3) = 100
! o8 r- M0 O" w* Kpline(4) = 20
( ^  I6 A" C5 h# e8 X* H, u0 X
; v/ {0 J; i9 s* `pline(6) = 100
4 c' \% Z' _( Q1 c) [% epline(7) = 250( L2 y6 m# ]: Z; g/ g
2 k9 V$ j2 D6 Z- p
pline(9) = 125/ r  ~4 }$ o9 L+ w. J/ }4 e3 ]+ d
pline(10) = 207. V2 N7 R4 |" Y  h) x  \0 m

% p& i# h7 H$ q2 P0 X# S( c* Kpline(12) = 212
- I) T6 c7 q9 F) Y" kpline(13) = 257
& w4 Y8 v2 S' b! S$ k# ~3 n) R( s7 F( x  P: Q1 l
5 |7 v! q& U( }% E1 Z
pline(15) = 1127 t+ Q" n9 Y) p' N7 }  X
pline(16) = 430" N) _3 b& {6 r3 Y' Y0 w6 b

3 U8 D1 h  T# G9 j3 I% Y( N  E& S$ M( L; p( P  M+ U# ~9 T
pline(18) = 50
/ _  E  i6 P. g# G$ H- V2 `pline(19) = 430% U  m$ [" w% ~9 A  |3 O) z+ ?
4 m; ^8 f3 P5 k+ b9 T
Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线" m6 ^  b: u$ P9 H5 g  h! ~

6 o/ U) z  t" a) [linep2(1) = 1 '镜像轴第二点位于Y轴上任一点9 U' v0 D$ i4 {- x1 D: C: v- A7 y
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
9 Y$ x  v7 ^( z5 }7 b
0 k  C+ R8 q2 H7 p1 i0 FDim p(0 To 2) As Double '定义坐标变量
' i: ~* D) Z: E0 m2 c" mSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式* c& f- q: M, u8 |; a, d
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体
5 f- M& \; p( ?& b; h' _ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt# j& Y, ]9 `( R( k8 P8 M+ @' y

! {+ G/ j( r: V) a% n2 t& ~, Nplayernumberpoint(0) = 0 '块属性位置) Q; B% M! P/ \/ B* a
playernumberpoint(1) = 200+ x3 `6 {4 s( ~* \4 B/ f2 t7 X
Set attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性( P7 F3 o2 T+ k6 n
attr1.Alignment = 7 '居中6 v& }$ j, y9 `) v
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
# \- z: p- j! ~6 t2 z4 vSet attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性3 p( K# l- X+ V! A2 h
attr2.Alignment = 7 '居中% s# k* u. b3 ^  z. J$ B

, u/ z( ?  F$ J# J: G
* U. [  w7 A- ~  y! Q4 `0 pDim objCollection(0 To 3) As Object '创建选择集
# j: o1 M: C; J  ^" ]/ f) oSet objCollection(0) = line1 '线条1加入选择集: v% q+ C3 L: Z
Set objCollection(1) = line2 '线条2加入选择集
. S  p& h) f' o& j# {Set objCollection(2) = attr1 '属性1加入选择集8 ^( N  D* e6 a0 A
Set objCollection(3) = attr2 '属性2加入选择集
- l. k' U% `; S4 O4 @
# M& L) |/ x8 l7 s" F7 D$ uCall ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
+ R1 z4 l- z3 X$ w: y7 _+ [
* [) B3 t1 r+ iFor Each element In objCollection '在选择集中进行循环
! }- v' W) C( q+ C) d! J$ [; H$ j  element.Delete '删除线条和属性(此操作并不影响已创建的块)
" \9 A: ~# l1 V! \( J5 `" J+ uNext: o  e" a- [2 q2 B

  A* H! ~+ X/ n! |7 M" e& v; R! e1 k+ H5 ^! l4 O
Set playerlay = ThisDrawing.Layers.Add("球员") '新建图层
! Z" W" g; j$ w- }2 D" k1 Gplayerlay.color = 2 '为黄色% J1 B( M2 ~. K7 {
ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层6 e$ `* j5 M. l5 X3 f$ d
% n$ v4 m2 n1 b5 V1 v1 d' i
Dim p1 As Variant '块插入点位置+ q% D1 n) G6 v& D) z* x. g- d2 d

9 `' i$ x1 Z0 O$ e- k5 A+ uFor i = 1 To 11 '插入块
. N3 p* [; S, e4 V; e# F  pstring = CStr(i) & "号球员位置:"9 Y  f9 P" O& X/ ~
  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标+ i- V" |4 l7 _1 o
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
  F5 v, V( W6 V# ^5 Q7 z5 r  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块
" x& j$ S. C) Y+ y4 m  Attr3 = blockRef.GetAttributes '获取块属性
" @( o5 q9 A! x: P/ h- D  Attr3(0).TextString = CStr(i) '赋值球员号码
: S3 |3 r; g/ F# e. V0 K' l  Attr3(1).TextString = nstring '赋值球员姓名- }& k- H% S. i6 j5 w9 N6 j# Z6 |
Next
& _/ a  v% y7 r+ _, B5 T0 L, N( f* b* c, |5 t5 n
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 )

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