Autocad VBA初级教程 (第九课:创建选择集) n) m7 m; m( h, O8 ~; g+ M
* L: X" f. Q8 r8 I' ]& d( K
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
! j$ {* q- g+ ]
0 B; b8 M: b3 J* K1 oSub c300()) X" l. u; _% M3 Y
+ G8 ~* L& X; o& ]- n; U& s
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
6 r# \1 ?! f8 ^Dim pp(0 To 2) As Double '圆心坐标+ F3 ~- |2 _* F6 B, W
& k. E5 w. _$ k
For i = 0 To 300 '循环300次
" q- \1 Z* ?* C+ n( b8 Z: }4 c- Xpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
) n5 T# C. [$ T' u* |$ Q8 x2 vSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆6 J% a ]) @+ l% u5 B
Next i
6 e: V3 @7 x; U* }3 T2 w2 p! c! n# n B$ x' P9 u1 k; N" x M5 M
For i = 1 To 300
' W9 T: J; o+ g% X5 U& IIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10- t+ U$ J Q B0 H
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数# X4 z3 h' z8 Y9 s/ T
Else& r% g& X. X. Q+ v% l) Q" @3 K% D9 r3 p
myselect(i).color = 0 '小圆改为白色3 v6 e/ m% ^6 Q- }9 k( Y
End If* j- I+ Y/ U/ j3 p! l! r, }) D# s# A
Next i% k. \' t( _$ b
7 o) |* r9 e/ w' ~1 a
ZoomExtents '缩放到显示全部对象, i: B, k1 }" [: r1 N+ V$ ]5 C( K
( K& Z: w, ?' n8 w! o( c. ~End Sub
; G" i) ^% w# p k0 s$ k9 n6 ]
# Q4 Y! @" O/ U$ ^; b& r5 @( ~6 X9 d. k) a4 X& z4 o+ F
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
+ H$ V4 T8 A! O# V) k0 t8 N+ R* \这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
! l& B* Y( T3 v b, grnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
( S9 L7 I4 _4 Z4 b5 {% o7 M- r, w2 `) T# Z
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
; o* _! R5 E, @) O1 z这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.' p4 C) v7 E- G/ Y! ]9 H
' F3 }+ a3 T5 e& M/ v2.提标用户在屏幕中选取
% Y$ c U1 ?8 C/ a: f# K+ c3 f选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
. k& u% O/ Z5 u# @' k! g. R下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除4 y) V5 o p9 J! c5 J
' _% {( u5 s$ e. }5 ~" iSub mysel()
+ X/ Y7 ~, f X; a
: u$ P' ]* v8 _Dim sset As AcadSelectionSet '定义选择集对象
1 N( z# j+ Z+ @ F: w: M3 Z4 pDim element As AcadEntity '定义选择集中的元素对象
$ ?2 ?6 \ ]0 _- G3 Z' ?7 a |6 X
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
( } r" o/ |: [5 K4 z7 m3 I8 lsset.SelectOnScreen '提示用户选择* X' Z. L" n2 }
5 d4 g- q$ a U" y& R# u8 j% ~' \
For Each element In sset '在选择集中进行循环
$ a+ O5 Q9 ?4 t9 w6 _: ]. C/ V* Lelement.color = acGreen '改为绿色
1 G' ]5 M: x2 Y# f: L8 O$ BNext
+ G- u5 v% C- M8 p+ e8 F- Psset.Delete '删除选择集: X8 t t( p5 z* m: }
* N- `7 b( J5 l" x6 O5 d/ ]4 Q; I
End Sub% v* S5 x3 E+ T$ ]* {: ?7 Y; y) I
/ u9 \+ _) R d! v ^4 T
3.选择全部对象
l3 {2 D" d0 `) ]4 \5 O7 Y/ e用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
: Q: A2 J3 |0 u( \3 S- y, OSub allsel()
( E+ B: ]; v$ l ?' d, O% rDim sel1 As AcadSelectionSet '定义选择集对象: B0 x7 d; V# C8 f; @3 I# y1 T
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
% i* }3 c1 `3 y1 WCall sel1.Select(acSelectionSetAll) '全部选中
2 u5 H0 N, P+ v& T( X9 Y) jsel1.Highlight (True) '显示选择的对象
. L) F( W8 G1 k6 D* T5 H0 D" n4 D+ |sco= sel1.Count '计算选择集中的对象数; A" q( O4 Q# n+ \$ q
MsgBox "选中对象数:" & CStr(sco) '显示对话框
' w/ a5 [0 l* f& @8 MEnd Sub3 g# J( [0 J1 @
f F) }9 M; N, S2 n- W$ {$ C
3.运用select方法' s s8 d$ [$ `; {9 a* b
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
" w# w8 n# }% @2 B) t1:择全部对象(acselectionsetall)" S6 E- P; T% o1 \$ k
2.选择上次创建的对象(acselectionsetlast), k" _, J' T6 a. G+ M
3.选择上次选择的对象(acselectionsetprevious)
, u3 m: H6 Z( w9 D& s4.选择矩形窗口内对象(acselectionsetwindow)/ a* E- ]1 w# c, ]( [8 R
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
, m/ ]0 _! D5 f: J还是看代码来学习.其中选择语句是:
. w4 c& i( c3 [2 }8 b8 OCall sel1.Select(Mode, p1, p2)5 O& P) `" w& |. u; w# H t
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,0 e4 ^" S m( ^. E, z6 x
Sub selnew()$ S2 v- E+ a! Q& v+ d* j. ^& ]' S
Dim sel1 As AcadSelectionSet '定义选择集对象
2 O$ d; {2 I0 R; y: e2 dDim p1(0 To 2) As Double '坐标1' d0 c# u2 U$ p: Z; F
Dim p2(0 To 2) As Double '坐标2
4 z" y" N6 C. t8 I' F6 lp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
! C. A* t2 L1 U+ L* m( qp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1! ^' n# {" T3 f
Mode = 5 '把选择模式存入mode变量中" |# d: f( [% F& @& ~9 l/ p
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集1 K) f+ E$ X- Q, y8 ^
Call sel1.Select(Mode, p1, p2) '选择对象
, K ]' R9 C1 U" u( `0 Bsel1.Highlight (ture) '显示已选中的对象6 H6 ]9 j; |8 `! ?# i9 v' p" V6 {
End Sub |