QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
定义块方法:2 M. V- U( b' g+ n' [
Set blocksobj=ThisDrawing.Blocks.Add(基点, 块名)/ j) H* T+ I, V* R8 Y
把选择集加入块中的方法:8 @  x2 M: i) I' j9 w# t$ [2 g
ThisDrawing.CopyObjects(选择集,块)
! r( r/ V% R1 w; }7 Y& P1 G6 [插入块方法:& D. a1 M' O0 E! K. v% U
ThisDrawing.ModelSpace.InsertBlock(插入点,块名, X轴比例,Y轴比例,Z轴比例, 旋转角度) & B" a  g7 @  ]: w% a
画块属性方法:/ E. }& \' b& F# _
ThisDrawing.ModelSpace.AddAttribute(文字高度,模式,提示字符, 插入点, 显示字符,默认值)
+ ^$ I3 d- z0 ^" ?* e& b一共有五种模式,在输入时会有提示,其中最常用的是“acAttributeModeNormal”普通模式% W: ~5 a7 E" C+ s. Y
编程思路:
  x% E% l6 J9 Y& F. C! a& {1.定义一个空块% V; K6 Z- N( D2 s4 o/ k
2.在块中画一段弧(球服衣领)
! j; V; V; R( `. M3.画多段线,镜像画出球衣- m0 v1 c# `+ n2 T3 |
4.画块属性,由于块属性默认的对齐方式是左对齐,而球员号码应该居中,所以必须把块的对齐属性改为居中。但是当这个属性更改时块属性对齐点会自动归零,所以不得不再次更改对齐点属性
. K$ L3 \- t8 w; Q' [" Z5.把多段线和属性复制到块中) k9 X+ v' J# a+ q6 [
6.提示用户点选球员位置和姓名# s0 L: L5 y0 b# g; Z/ D
7.插入块,修改球衣号码属性、球员姓名属性4 e9 g; A1 a9 O3 c

* S9 K5 b- V2 G' I9 @0 X以下是源码,附有详细的注释,如果有疑问,建议用变量跟踪法研究一下。( X; B) s) s3 T" x
Sub team()  a9 F: X! W, n. s, U9 W
Dim playerlay As AcadLayer '定义球员图层
6 i$ E3 j( s5 w! R: g# |" |* |Dim playerblock As AcadBlock '定义块变量
* P+ M9 @$ c. g4 z! `$ o/ ^) _Dim arcc(0 To 2) As Double '圆弧圆心: ~6 _: M& b& q* L4 ?
Dim linep1(0 To 2) As Double '线条端点1% L9 e$ Y3 I9 V
Dim linep2(0 To 2) As Double '线条端点2
% w; M) ]* e: zDim pline(0 To 20) As Double '定义队服右侧多段线7个顶点
- h6 @/ Z* e: m' q, t9 z  ODim basep(0 To 2) As Double '块基点
' a# A/ B0 _' c# N3 S$ C  l% nDim playernumberpoint(0 To 2) As Double '块属性插入点5 m# q+ p3 z4 ~
Dim mytxt As AcadTextStyle '定义mytxt变量为文本样式& M- ?/ f* c% |& {+ `
Dim blockRef As AcadBlockReference '定义块属性变量
- r% r8 ~, Q  ?9 {; PDim Attr3 As Variant '插入块属性变量0 T* s3 v% U9 {9 s5 Y8 q

* j* _0 v) e% c" ^Set playerblock = ThisDrawing.Blocks.Add(basep, "球员") '定义一个"球员"的块7 z) g7 q2 G4 A1 \/ g) @7 q- J

/ [" p0 Y& z, G' l( qarcc(0) = 0$ P6 H6 o1 y; ?' @
arcc(1) = 430" V+ t( v6 C- c$ O" l9 `9 K
Call playerblock.AddArc(arcc, 50, ThisDrawing.Utility.AngleToReal(180, 0), 0) '画弧并加入块中
. v- p4 x% K7 f$ \1 A3 B; A/ a9 i9 j& O
pline(0) = 0/ T1 C: ^' ]  [! U; V
pline(1) = 20
8 U$ H9 C9 r! Q: Q# {6 v% f' e0 T; z7 {0 O
pline(3) = 100- h+ A" ?( Y! M- {
pline(4) = 204 G* Q2 L4 o3 }, i
4 t% ~$ {2 m' Q0 w# c& @$ i
pline(6) = 100  U6 e0 D3 Y1 T0 v
pline(7) = 2502 y+ @% x! A# r, ^

9 H6 W9 R2 n. w9 V1 @8 Z4 tpline(9) = 125- \/ x+ j5 w+ R# w
pline(10) = 207
9 S& k3 d9 F; L0 {( l  z' g: I
+ N$ w( S# D8 t1 fpline(12) = 212
! J! c4 e/ P' }- V6 u2 n( Rpline(13) = 2572 f! J2 H* z( F# j& w9 V: e
% W3 q# R  O9 O  F
0 a' O* }' i$ H
pline(15) = 112! ?" E6 u. U! r: G" S+ W0 N, W
pline(16) = 4306 @" d! B4 @+ E  A4 h
2 r- r4 }+ G; K- `7 k

2 {# V( H5 T- K8 H: x; Tpline(18) = 50
2 L3 @5 e1 }, e! V6 Opline(19) = 430) W2 Y; J  n7 `2 ?9 l+ A

' D& \+ v" {. C6 g1 p; YSet line1 = ThisDrawing.ModelSpace.AddPolyline(pline) '画队服右侧多段线
  z6 r. g7 l0 v' v. h$ L5 l7 h
; ~) p% L% L  J- dlinep2(1) = 1 '镜像轴第二点位于Y轴上任一点+ U- g3 W5 G4 B6 z$ N9 ^& Z  Q6 W  D
Set line2 = line1.Mirror(linep1, linep2) '镜像获得另一半多段线
$ \) J2 K  N% z6 o% N9 b/ a+ Z' A
Dim p(0 To 2) As Double '定义坐标变量  a0 E$ I  L+ R% [: W, J" N
Set mytxt = ThisDrawing.TextStyles.Add("mytxt") '添加mytxt样式9 Q, ~+ X# m3 [  p8 i' a# x
mytxt.fontFile = "c:\windows\fonts\simfang.ttf" '设置字体文件为仿宋体# j7 d: [7 x* n# n% V9 R7 ~9 I
ThisDrawing.ActiveTextStyle = mytxt '将当前文字样式设置为mytxt7 s" A/ A6 T- Q$ G* @% k
. l) \' a/ j& M: R0 {& @5 L& ~
playernumberpoint(0) = 0 '块属性位置
. d4 j# K1 P0 \; Z8 I# Jplayernumberpoint(1) = 200
0 C1 u6 W7 l. m; d+ nSet attr1 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "号码", playernumberpoint, "X", 0) '画块属性
$ t8 d7 Q. u+ M9 Pattr1.Alignment = 7 '居中; s% A2 U' O* J  `" V) B+ T
attr1.TextAlignmentPoint = playernumberpoint '重定义对齐点
% ^, X  I* R' d0 a. R) hSet attr2 = ThisDrawing.ModelSpace.AddAttribute(100, acAttributeModeNormal, "姓名", playernumberpoint, "???", 0) '画块属性
2 x" \) o2 N! g, b- qattr2.Alignment = 7 '居中& }& \9 Q4 U; o4 L
/ p: V% G/ P1 y' S
$ v% X" N1 V  o* f
Dim objCollection(0 To 3) As Object '创建选择集
( \5 T" f5 H3 i  p4 u: PSet objCollection(0) = line1 '线条1加入选择集
( S7 T/ M5 p+ d" E. Z; h9 RSet objCollection(1) = line2 '线条2加入选择集+ u6 D% c- s9 J- k, x
Set objCollection(2) = attr1 '属性1加入选择集. R3 J% @/ r* I& `- n  v
Set objCollection(3) = attr2 '属性2加入选择集: k1 C" p" X% \$ Q
  l1 z) R" Y% c& h
Call ThisDrawing.CopyObjects(objCollection, playerblock) '把选择集加入块中- b* `! k8 A& h- s5 R4 U9 E0 J

7 ~) b8 j; ]; |For Each element In objCollection '在选择集中进行循环; h! Z3 Z4 D6 f# X& R) l
  element.Delete '删除线条和属性(此操作并不影响已创建的块)8 u8 S  [$ K! p
Next
0 s1 r' T; X, ?4 N  @# m3 ~( t" P0 \3 B9 S# \& R! d. T

4 q3 Q; B0 \8 e3 j8 dSet playerlay = ThisDrawing.Layers.Add("球员") '新建图层
" d2 F+ K1 q( Z$ b) w! qplayerlay.color = 2 '为黄色
1 e1 W5 _) W7 \# a' p6 `7 u% dThisDrawing.ActiveLayer = playerlay '将当前图层设置为球员图层
$ B- W' h% m3 q9 n- E
5 i; w7 E- v& |- Z( WDim p1 As Variant '块插入点位置/ I- D- k+ c0 e& k
+ }( N- g9 o* b0 h
For i = 1 To 11 '插入块, `$ h7 U/ V+ s6 B; r
  pstring = CStr(i) & "号球员位置:"
  U2 ^- q( I& N  p1 = ThisDrawing.Utility.GetPoint(, pstring) '点选球员位置坐标6 V$ L- b$ D9 ^; b
  nstring = ThisDrawing.Utility.GetString(30, "球员姓名:")8 N  k$ U* v8 `. i' a6 ~% g' K
  Set blockRef = ThisDrawing.ModelSpace.InsertBlock(p1, "球员", 1, 1, 1, 0) '插入块! ~; \$ f6 e( D, X. i
  Attr3 = blockRef.GetAttributes '获取块属性
& C' W9 H% k, X- q2 Z: k  Attr3(0).TextString = CStr(i) '赋值球员号码
) l6 Z0 r- C2 g  W7 x  Attr3(1).TextString = nstring '赋值球员姓名& M" E' ^4 d7 @2 c. Q1 M
Next6 J' W+ k; m$ e7 J* I
2 D" l. w' T6 G* |/ o9 v, i
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 )

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