Autocad VBA初级教程 (第九课:创建选择集)
) s) a) T) n$ Y1 X; x4 v9 ], n% |6 {& J
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.- o5 [+ a5 d( ~$ x4 q# I+ u& {
* m4 B" \" O7 t1 B0 P
Sub c300(); U* H# B9 b% V+ R v) r9 W( R: W
" w* ~/ t+ f" ODim myselect(0 To 300) As AcadEntity '定义选择集数组
& n' c+ c" r/ O5 F5 MDim pp(0 To 2) As Double '圆心坐标3 W; n1 ^) g0 s7 Y2 ~
. B/ n) J0 a! q! ^; E+ g5 b8 e
For i = 0 To 300 '循环300次/ e% g8 k0 }% x; V+ v8 z- z p
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
! F+ }7 ], B" JSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
: S+ d2 D& b V% }Next i/ Y+ X9 K: c# X; i* B# Y- H
( G# o+ G8 n6 H; n5 y3 N) L8 hFor i = 1 To 300
+ [* _8 T- \0 b6 ^% P+ }If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
' d( g. P* G6 Q6 Cmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数$ Z4 g+ H$ ]& J; F; \ ^
Else* D/ w, Y0 K% O: C4 i) I* R
myselect(i).color = 0 '小圆改为白色4 I5 p* I1 o: l, L: r
End If
9 n5 t" Q+ @) [Next i
0 c p# v: i/ M; m5 @/ @6 Q: d- U! j+ b( U0 p3 p
ZoomExtents '缩放到显示全部对象
: O& B9 b9 `) q9 H2 }# e) p( d: f( y1 R# ^5 r6 r
End Sub# R9 b2 J% u8 R- N! k) Z: D' o
6 C8 a0 L8 C) p- t2 Q7 a7 y
( u5 S+ v& ^9 t, gpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
( Z, L! i0 j* Y0 d3 L/ \这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
# t+ H: J( q9 A- S! Y. n% Crnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
* e; E, G8 B" W. B' T6 e3 B
& \( o' ^4 U7 G1 m( |6 M XSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)2 p0 k% s# Q) \
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.) W- p) L' b& C" s. H }
5 E* g, `3 {; G I! p7 N& g2.提标用户在屏幕中选取
* A7 \9 h3 k- O0 d+ O6 n; _2 G) ?选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了. Z: \' X6 v4 h% W
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除; M$ V; v4 T# L
4 h2 V+ A- U; G3 {3 R. f
Sub mysel()
) M, S. U7 ]9 E! x8 F; }2 [1 r: }3 @ ]" K; Y: n/ t- B9 t* k+ h
Dim sset As AcadSelectionSet '定义选择集对象
) J- m1 G1 V* s$ BDim element As AcadEntity '定义选择集中的元素对象
B8 r: Z- P8 ~9 t* i5 ~1 |! u
. T! o! D: s7 z$ ]5 |Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集: c: e; O! G- l
sset.SelectOnScreen '提示用户选择
- Y6 Q1 J# g' F* ?- w
" C: m: G' U% h; [ UFor Each element In sset '在选择集中进行循环
1 s4 {& O. z" q6 y9 P' Z( relement.color = acGreen '改为绿色
; b" B& S. a8 ^9 [5 @' jNext8 j5 V9 e7 b$ O9 a4 m
sset.Delete '删除选择集 S1 ^; f5 s$ c, L
+ [# J; t4 K8 ~5 b. f
End Sub: l% [) Z0 q7 @# b" Q0 m1 \
- u* {: b% |( L- b: N3.选择全部对象' w! w* H9 w6 `# i' Q
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
6 c% P. R9 ^& WSub allsel()
, j5 P1 Z5 a; A" zDim sel1 As AcadSelectionSet '定义选择集对象9 {) r/ i# E6 _% b0 Q1 z% I
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集' C2 n3 R3 D* Q2 B# t0 f& T
Call sel1.Select(acSelectionSetAll) '全部选中( ]6 V; J. e" f. O- S, S
sel1.Highlight (True) '显示选择的对象" |. k7 K: ^7 `8 T" N6 f3 ]7 @
sco= sel1.Count '计算选择集中的对象数. F! L5 Q/ V& C
MsgBox "选中对象数:" & CStr(sco) '显示对话框
K: R" W4 s$ N9 {, eEnd Sub
, i0 z0 P/ J4 A' O- D; O
+ ]' y6 u# b/ }, ]3.运用select方法4 `7 f$ z5 m( S0 h K8 o
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
6 D' ^7 f0 O6 \2 h! H2 q- ?( }1:择全部对象(acselectionsetall)
2 I7 C# [& d8 ~ W2.选择上次创建的对象(acselectionsetlast)5 n0 F" Z- n% G- E5 d
3.选择上次选择的对象(acselectionsetprevious)/ \7 z2 k& ?$ x4 b; G7 q
4.选择矩形窗口内对象(acselectionsetwindow)
% ~8 \! r$ r9 F1 H% o5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
3 B0 C6 l' F) \, ~8 M q* h还是看代码来学习.其中选择语句是:$ K% j4 S0 B: w
Call sel1.Select(Mode, p1, p2)
! B1 q# m0 x8 R7 D/ A4 f' Z9 b( ]5 MMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标," i; v; o7 |3 E" y, y2 z
Sub selnew(): U- L" W8 f5 F! g
Dim sel1 As AcadSelectionSet '定义选择集对象
9 W# O+ h, C# I) L% T) GDim p1(0 To 2) As Double '坐标1$ C0 h0 X$ [5 |1 m7 g3 U1 \; i
Dim p2(0 To 2) As Double '坐标2. S+ r9 F- {6 c- y9 J
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
/ b# J: J @) T+ e& Ip2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标12 C7 M; ?, m* v; @. w2 @% q( |
Mode = 5 '把选择模式存入mode变量中$ W+ U; D( J3 |- ?0 x- N) I0 e: J
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集9 [2 W% C: m1 l6 _, Q5 ?! Y
Call sel1.Select(Mode, p1, p2) '选择对象
8 l1 o( l0 W8 m6 Fsel1.Highlight (ture) '显示已选中的对象+ g1 b& }% ?) M& z; V7 d% X
End Sub |