Autocad VBA初级教程 (第九课:创建选择集) ' g0 H% i" t& P' S
- W) L; m, }, {
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.% X+ V# U8 R, A6 O! o
) J7 C& a. J+ ^Sub c300()5 Q5 C) _# Y* f4 h; f& f" Y3 ?
' {( b1 d$ R4 U$ lDim myselect(0 To 300) As AcadEntity '定义选择集数组
4 _( ^9 o) w, V( `2 ZDim pp(0 To 2) As Double '圆心坐标
$ y0 |, x- e/ Q) y8 I
+ Y7 e- M- S7 Q$ ^% i3 Q' j% ?For i = 0 To 300 '循环300次
6 A% ^( C1 _/ f1 m3 \pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
( t# D* X' E$ u1 s: N7 RSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
9 r9 Q* f. S& {Next i
: R. N1 Y4 \/ b6 b7 x9 k6 R. H( _5 r
& q' v/ f& m0 s1 `. j8 {* AFor i = 1 To 3003 ?4 b3 [7 P- f) ^' g
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10$ G( r7 C! A& W- {" u( R
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
8 A7 d' y8 w) }/ W2 E/ sElse
9 p! p9 Y @, X5 b8 gmyselect(i).color = 0 '小圆改为白色
( _- H+ y1 D' c* n% u- _End If% C1 D/ s+ J+ ~% S. c# m8 x
Next i: A* j8 k9 C* E; }( u
2 i3 ?& W+ {4 _) A" |ZoomExtents '缩放到显示全部对象
( D$ A/ {5 e. {/ B! Y; y i4 E$ A( B* Y
End Sub" U- p6 \. \& N/ y
4 O( C2 I p0 A) h. u6 Y) O" r/ h' e2 _4 ^2 k+ f
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
' P+ B1 J s! L! D K这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
" O) T' E# q7 w$ e1 O1 j5 l6 Mrnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数+ {! ~7 D. ?/ H1 }0 f4 t+ a
% U8 f$ [' w0 K: v. P9 ISet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
1 J) V) ]+ S8 K5 g( S4 S) a; }这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.+ T& r$ Q! {) Q8 y
, b2 H' l; ]% T* `% B6 a; M6 `2.提标用户在屏幕中选取# u3 ~* Z+ ?) U6 b8 y7 r) T
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.. t* Y. c) X" T# o3 i0 r
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除6 t* ?0 [; u7 E
& z( |* i& O/ r1 zSub mysel()
9 G9 K5 y) Y0 o9 z7 s+ r5 w' d% I( k5 T6 I/ `
Dim sset As AcadSelectionSet '定义选择集对象
) t& o; Y( t2 E; I$ XDim element As AcadEntity '定义选择集中的元素对象- A) f t5 |9 ^* P
; d! N# t6 W7 M- ]7 MSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
+ g& s( R. H& Q" J; Psset.SelectOnScreen '提示用户选择
# e; v) D, V% _5 A
( T! S2 q8 ~3 J# Y7 @ }For Each element In sset '在选择集中进行循环8 ?1 L. T" M, ^7 M0 v% f
element.color = acGreen '改为绿色. z& G9 e1 B3 L1 Q6 c& f% `. L. L
Next) [( e6 A+ ]6 `$ n
sset.Delete '删除选择集
0 w! O- ~; h6 J1 @: t* A9 T) c" n& C$ r
End Sub, P4 i, }( v8 C. {
8 R$ a1 Y) ?0 X- [, K
3.选择全部对象
`( t7 z( m( h! [' E9 C8 a4 d用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.4 s1 j1 H" N4 J, G
Sub allsel(); N! r+ Z! N! V
Dim sel1 As AcadSelectionSet '定义选择集对象
' s- \6 m* p! m$ W- Z( T) ~5 ZSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
7 u" N% i; J0 P) k5 NCall sel1.Select(acSelectionSetAll) '全部选中
4 z1 ] E* j. w" ~8 m: v6 }sel1.Highlight (True) '显示选择的对象" `4 M; W* K- W' I8 {. @/ \' y
sco= sel1.Count '计算选择集中的对象数3 W/ h# `1 k {6 K% _, z3 q
MsgBox "选中对象数:" & CStr(sco) '显示对话框- x# z7 p" z2 U6 B
End Sub6 b, C" E& L: u% ?! e; m
( J( S: X; o4 {+ K! H5 m2 A
3.运用select方法
+ C/ \4 z% u' L% |上面的例题已经运用了select方法,下面讲一下select的5种选择方式:* ~' u8 A( ]: D% S2 n1 N. o' n- W
1:择全部对象(acselectionsetall)
- }; A; P" o0 Q2 Y# \7 v* D2.选择上次创建的对象(acselectionsetlast)
7 `* i# @ T' m" \$ D0 z& Y3.选择上次选择的对象(acselectionsetprevious)
8 Y) H$ L! D+ Z1 y+ S4.选择矩形窗口内对象(acselectionsetwindow)) ^5 W6 W. S5 A s2 j
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)# W9 k, T. W' b6 t
还是看代码来学习.其中选择语句是:
* A. R- h ]9 B/ m; ZCall sel1.Select(Mode, p1, p2)% b. {9 h2 c0 Y7 S! D
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,/ D; P6 g9 n6 ^$ }9 \
Sub selnew()
# M5 j# z# }% zDim sel1 As AcadSelectionSet '定义选择集对象
$ ]5 Q! T4 o n; m0 Y4 ^Dim p1(0 To 2) As Double '坐标1
9 V2 ?* G' ]3 E% c/ D% [Dim p2(0 To 2) As Double '坐标2
. T) B! Z% z& `8 F- Xp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1; D6 w8 R1 H9 d" G/ C4 E: l& Q; I
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
' ]; @& }- s* W- ?. n" H+ ^Mode = 5 '把选择模式存入mode变量中
! X& D9 ]9 I- n n6 sSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
$ u x' Z1 @7 I8 v* r1 ECall sel1.Select(Mode, p1, p2) '选择对象) f& c; A! b+ l$ d8 l
sel1.Highlight (ture) '显示已选中的对象* D. o2 [: M- Y! A! F5 E8 x' H
End Sub |