QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 7230|回复: 6
收起左侧

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

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

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

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

x
定义块方法:
& U- d7 G) O- I3 JSet blocksobj=ThisDrawing.Blocks.Add(基点, 块名)9 n: p: |* q8 s$ C) J" u3 @
把选择集加入块中的方法:* g* }: F# k  ]2 s- Z# i6 C
ThisDrawing.CopyObjects(选择集,块)
# x) l7 U6 R" x插入块方法:4 I8 Z' S" x# B. g" ?) d
ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) 5 g, S0 O& R( b+ q6 w: [1 j6 g
画块属性方法:
" Y5 n& m8 x: l4 ~; ^! |0 V* V1 sThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)5 W3 K* O# `; m. p) }
一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式
/ u: J) ?/ t' [" L编程思路:
0 s, U- ?8 _- H7 Q8 p* m1.定义一个空块1 z& s- C4 c5 }9 ?. u  ?0 D2 C$ h
2.在块中画一段弧(球服衣领)
/ t- y  d4 \( f7 A  L+ ~, E2 m* a3 Z$ J3.画多段线,镜像画出球衣) H( l) C) n# q  S
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性% g1 g( X. I4 Y9 H0 Z
5.把多段线和属性复制到块中
, X* b5 g8 M3 G  @6.提示用户点选球员位置和姓名# }5 _8 d, @2 b$ D
7.插入块,修改球衣号码属性、球员姓名属性
% v0 L6 e/ ~' D% Z3 q9 a9 t* ?8 W! T/ j  s
以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。# P$ {2 a8 u# \2 y$ s7 F0 `6 l3 H
Sub team()( Y: y! y  |1 C" u* X9 R
Dim playerlay As AcadLayer '定义球员图层0 D6 b; v, }; ]' }' x+ {
Dim playerblock As AcadBlock '定义块变量8 Y1 H8 y' X5 ?2 r6 K. G9 }
Dim arcc(0 To 2) As Double '圆弧圆心/ a7 ?3 C" K" E- {7 A
Dim linep1(0 To 2) As Double '线条端点1
% D; H: I" t1 I" p  r2 H: {Dim linep2(0 To 2) As Double '线条端点2
8 m0 M! T" t; V2 H; h& JDim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
8 j! l, H7 M$ }Dim basep(0 To 2) As Double '块基点
1 f2 M9 b/ G% g7 g$ G- A, FDim playernumberpoint(0 To 2) As Double '块属性插入点5 n& W& M7 }, U6 }: ]
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式+ o1 c/ z  E- _. G/ H
Dim blockRef As AcadBlockReference '定义块属性变量
& w5 h$ z; Z7 I5 zDim Attr3 As Variant '插入块属性变量1 B! n4 T  \* R, h& v( o2 k

; i7 b% X; n9 @! I+ Y  |& TSet playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块$ Q7 ~; ?. W" X
( R/ G# r5 u2 D& {5 z. P
arcc(0) = 0
2 h1 y8 N" y! P; g: u' D  sarcc(1) = 430
2 k3 u1 ?$ B) e8 lCall playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中
7 Y8 Q0 e2 q0 i
- B8 L  {  V  S+ ^pline(0) = 0" h' w' _- b' ~+ r. P; D; s
pline(1) = 20' j' ~# ^" {, C! l0 F- L+ t! k7 G
4 y4 X9 E, G% Q* v0 F3 b3 T" S
pline(3) = 100* }5 s; O; [+ H
pline(4) = 20
: _7 o1 _6 |- r" b3 E4 u" B! @  m$ R0 q; U; b- M
pline(6) = 100
2 y% d2 E$ g7 k* y, g: Hpline(7) = 250
4 |( b5 ?( q( M2 V+ J
- x4 }5 z, s. b9 `. ppline(9) = 125
+ h: _7 j; U4 z9 Ipline(10) = 2072 ?0 A# \. p( H( a% q

/ g" [! e7 U$ B+ rpline(12) = 212+ h, c1 G  w0 Z* p' j4 H% b6 `
pline(13) = 257
/ k; I' ~$ f+ R* h" Z" C
4 [' q9 K% n8 \$ u: q- q
$ s/ w, c( @! K8 u1 Rpline(15) = 112, z( e" [& {1 E! w
pline(16) = 430
' h. l; [5 x8 a4 c  h/ o3 {& e% s( F' X

1 `+ ?( B& }" h- i$ |/ R* Opline(18) = 50
2 a9 s2 y( a. A/ i! Z9 ?; B5 rpline(19) = 430
( Q# O, P2 M/ F7 N/ n
, I: L9 N$ g; ?Set line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
& C9 l0 A0 A5 G" Y; i0 B* ?, Q# G9 @9 b) H7 a$ @9 @
linep2(1) = 1 '镜像轴第二点位于Y轴上任一点
5 @, g8 I! s. D/ q1 t6 b3 tSet line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线; M6 a7 G/ V! }* n" p
; p! U8 O* X- J/ ]) A
Dim p(0 To 2) As Double '定义坐标变量
  J( `/ t  j! e' PSet mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式7 X$ B# [$ L9 N
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体# E6 v% u4 z9 f; H8 V( e( f* I( K
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt
6 `2 I3 S* c. T" a
: [& \' E; @' _: a9 Y& V& _  Fplayernumberpoint(0) = 0 '块属性位置* _" e1 J4 F% a) K& f+ Z5 B* X
playernumberpoint(1) = 200
3 Z0 O+ h  B& s" e5 vSet attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性$ e  g: J+ q3 _6 @
attr1.Alignment = 7 '居中
! d5 H. ~4 U* C' U) h2 W* pattr1.TextAlignmentPoint = playernumberpoint '重定义对齐点$ F) p7 K3 T' b! c, w* o
Set attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
7 q. k0 k  e& G" L/ A! xattr2.Alignment = 7 '居中( {9 Z" z4 \, R7 h& r* k2 R% H

+ {+ k  W8 s3 m# P8 j# I- R
' a* f( e+ Y0 P. F( b: A$ {& eDim objCollection(0 To 3) As Object '创建选择集
% E- x$ h+ P/ U+ CSet objCollection(0) = line1 '线条1加入选择集: d$ t& s/ }# N2 D8 M5 H2 S
Set objCollection(1) = line2 '线条2加入选择集
: ?. T6 h  {% g1 g& NSet objCollection(2) = attr1 '属性1加入选择集9 y+ F6 t* _  q# q3 d: L& h
Set objCollection(3) = attr2 '属性2加入选择集$ \# M5 t, E+ _* T8 Y

: N# O6 p7 W9 e4 O$ ]: s! I/ e" {Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中
7 U; m' E5 U6 G* o+ ?
7 I) X0 z( T# {- D+ lFor Each element In objCollection '在选择集中进行循环; }2 r, @" O% u* q) u: V( B
  element.Delete '删除线条和属性(此操作并不影响已创建的块)
1 o6 B6 l* H0 \. H4 ?; v$ d) y7 cNext
4 D; T! D7 ?' g  ]" d3 C1 B/ n  ^( G$ y& \
3 P6 O& ?( [. p/ l6 ?6 R" H4 z
Set playerlay = ThisDrawing.Layers.Add("球员") '新建图层- c8 H) H# d! R2 q& R
playerlay.color = 2 '为黄色; c/ ?2 i* p/ @: r7 a* y! ?" s
ThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层
2 x5 a7 x6 ]$ r9 X7 B  V
0 p. @; D! w# {& }$ i1 z6 KDim p1 As Variant '块插入点位置
0 R" b% z! i  j  O9 F! L3 d+ h9 [1 ]) m
For i = 1 To 11 '插入块; v4 Q1 n. d8 C/ D; Q/ x! b" E9 o
  pstring = CStr(i) & "号球员位置:"6 x3 N# {0 A4 p, q: v. q, o
  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标5 j* ^6 T. i  y
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")
- ]$ Q+ C" Q! h  |8 o: f  U9 Y, h0 o  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块; y' ]0 p1 _/ x0 A% D& G
  Attr3 = blockRef.GetAttributes '获取块属性' M) J; j( |4 Z3 z5 h' \6 I
  Attr3(0).TextString = CStr(i) '赋值球员号码2 w/ A- H9 {! S+ l7 ]; o$ P
  Attr3(1).TextString = nstring '赋值球员姓名- w1 g9 _/ j7 S6 T4 ^+ {; U3 Z) Z
Next
/ _4 y0 g% @( d6 O6 i6 z7 D% p, [0 r
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 )

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