Autocad VBA初级教程 (第九课:创建选择集) ) X7 ~; k' j1 Z: ^" \% v \& U
" L0 p: R: a. X9 j+ v6 J 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.7 F, l. b) E. g2 ~' H. n' N0 D: a7 t
+ M! p5 i9 F. p/ R+ k) t
Sub c300()
& ~5 x* p) X8 _+ ? B5 n/ q/ R8 o1 |7 S; n1 z7 |
Dim myselect(0 To 300) As AcadEntity '定义选择集数组) L/ g- v) V& y# G* w
Dim pp(0 To 2) As Double '圆心坐标
, A/ ]4 c$ I4 D
6 c, R, S7 h! b' k' D" d1 ?For i = 0 To 300 '循环300次, N* e6 t( U" Z3 `( `; G* {
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
' V: s. ^: H4 ^) LSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
; P- Q* X% a0 z' |Next i V$ n$ X: r( t9 g9 u2 ~
5 q2 W$ v) F+ F, q% W# s& X; Q
For i = 1 To 300
7 w E8 ~: `6 g2 j7 ZIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
$ r( Z! n3 ~4 R9 i% f2 d- }0 _myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数! r9 r& x. o% O, o, m
Else
$ ^ x6 D1 O1 p2 b0 `/ Z% E$ hmyselect(i).color = 0 '小圆改为白色
- S; Y# ]5 I ?; ]4 ]" Q4 dEnd If8 ], o8 }/ W. Z3 J1 a7 Q- P7 U" f7 A
Next i, o3 Q8 j |1 S T6 j+ N& _' @& @8 K
2 b1 t( X6 O# l# u1 x$ f
ZoomExtents '缩放到显示全部对象
) m% a2 Q k) ?6 `$ ?& E5 r4 } \2 x
End Sub1 K+ b4 i1 r' u: R
, ?$ d5 j8 ?/ l6 A& P+ G0 h$ e/ H6 f' |6 u9 k* |! A5 F
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0+ x3 v0 m2 ?$ R1 |4 M
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开5 x/ T" p7 Q1 H% d% L
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数 O8 `# f/ N- e! e+ N V8 V+ H
$ q% Y' T; ~8 S; CSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
6 e& D+ @" b7 Q* Z这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
; a7 r& y2 g0 f( N8 v
) K7 _1 k4 a; ~2.提标用户在屏幕中选取
: z( r' e0 ?" U: I2 V& d$ h选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.6 E/ ^0 B5 l( Q8 A$ w1 y; ^
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
! \2 M: f! f9 S1 v, Q
# Q( \0 Q4 |' S7 V. jSub mysel()
, |! [. h% y: l1 v* N& p q% Z! Y. }3 i. U9 m5 C/ r: ]0 G
Dim sset As AcadSelectionSet '定义选择集对象
z. i9 Q* P/ `7 NDim element As AcadEntity '定义选择集中的元素对象
1 J0 F0 a0 B( L" O0 _* O+ r2 h! l V' E6 }: x8 e/ D, I$ a- k
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集9 w3 w* f: m' T* {& e9 {* T$ D
sset.SelectOnScreen '提示用户选择
: r. d" K$ {4 @. r, ?( l, o8 ~" o& n+ P3 v4 H6 k
For Each element In sset '在选择集中进行循环
5 S: ~* B, E% T Felement.color = acGreen '改为绿色5 R! M) n% b t7 z
Next: \4 T% C; R0 i- I5 ^) j/ y1 O( K
sset.Delete '删除选择集
$ R+ v5 W- Q X. ^* K) O( s5 }1 ]
End Sub
8 z, Z1 y4 @) B, K( e6 x3 v& T) y4 S
3.选择全部对象
7 {* l! c$ p( J5 W4 D! X0 ^用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.- u5 v% t6 A0 S" J: `$ d/ u
Sub allsel(), r9 H' _0 ]0 k j) G% M
Dim sel1 As AcadSelectionSet '定义选择集对象
1 m. F6 j% A) {7 G/ ]Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集$ t& K- t2 [* q' `
Call sel1.Select(acSelectionSetAll) '全部选中+ c6 @- z K; w- z+ ^5 w8 J; g- s
sel1.Highlight (True) '显示选择的对象
4 r. n" Q0 w; j3 w9 O# qsco= sel1.Count '计算选择集中的对象数. B: {% k6 u: K+ r* s
MsgBox "选中对象数:" & CStr(sco) '显示对话框
# I* E5 [) j; S6 e t1 U- TEnd Sub
. ?0 k# P$ P& ~8 u8 s: d' h% e* b8 }% F, E7 r% @% ^
3.运用select方法$ K \" l7 T' |1 @5 ^% E% x
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
9 ^6 f/ |( R9 f7 q" w0 v1:择全部对象(acselectionsetall)
7 S4 R# A: `% }8 @2.选择上次创建的对象(acselectionsetlast)
( S6 [7 t- D. d2 ^) c1 ^3.选择上次选择的对象(acselectionsetprevious)
9 v* M: w8 p8 a5 l3 @4.选择矩形窗口内对象(acselectionsetwindow)/ p6 V& w' a/ v( h3 n% @
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)) J0 T9 A0 F+ p+ p$ N
还是看代码来学习.其中选择语句是:0 R. {; |5 s! B1 E# \+ A! ?
Call sel1.Select(Mode, p1, p2)
2 r2 H5 n$ U# sMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,, Y$ N) U2 l" l6 _ k4 f
Sub selnew()4 Z8 B& ?4 s' K# l4 _* P- V
Dim sel1 As AcadSelectionSet '定义选择集对象% k! [# k5 v# P
Dim p1(0 To 2) As Double '坐标1; q( _* O# A5 t
Dim p2(0 To 2) As Double '坐标2
; ^' F* R/ n9 ?, }$ }6 g& op1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标16 `- i+ e, z' N5 p2 v# y
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
! B) } |( r g1 T; a5 |3 ~( {# z9 W3 V8 oMode = 5 '把选择模式存入mode变量中8 u9 ?/ W/ k% C' a; b5 o/ \/ p
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集3 l$ r& |6 _8 D+ P- j; S
Call sel1.Select(Mode, p1, p2) '选择对象0 a: }+ W/ K' H* ^+ n0 |) I4 L, F, R5 l
sel1.Highlight (ture) '显示已选中的对象
8 w3 b1 i$ m9 ^End Sub |