Autocad VBA初级教程 (第九课:创建选择集)
/ u7 ^* ?& k1 K7 X$ t$ o: c& E" I* d, F' s8 }7 \3 P( c6 b5 [
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
3 {( o+ y% C5 A$ K1 L
* x& G9 v8 W2 A) t! _4 ESub c300()* B- W% o& |: m& E( s: E
2 C# b9 ?: x. _
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
- @& R2 ~2 `3 M5 RDim pp(0 To 2) As Double '圆心坐标1 q2 p7 u2 q$ U
* {) d6 l0 w! M8 k/ t I
For i = 0 To 300 '循环300次. ^1 [ q* j$ A) l2 u, x0 g
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
# ]2 k. v* x2 X( n) \Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
" j) k8 |5 X3 Z% CNext i! a* u& M3 _6 |" l
3 P9 R/ B2 O: ^- WFor i = 1 To 3004 \% _5 D8 O5 k+ K3 U3 ^
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
7 J+ o! H- d2 Y. k! V* Fmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数* G" j6 u R1 F) q C L p; G
Else& M* I% `5 q E' `
myselect(i).color = 0 '小圆改为白色. `. x+ y- n ^' s+ H: r2 \5 }
End If8 a x& L) D# ~/ D; g5 ]
Next i3 H7 i, O y% f
6 O. p+ ~; T- R9 b. P& yZoomExtents '缩放到显示全部对象/ u; H/ ~: u+ J: z# D) C
' k# [: g7 i @, L* W7 I) K% YEnd Sub6 e9 X/ y% c3 l$ ?1 T/ s- w
* `) \+ ?7 X I$ [* C% L
4 j9 b8 |$ q/ F9 M
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
1 R, S2 t# J6 Z7 q7 e这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
t4 w q! Q/ V1 `8 grnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数* ^1 _9 ~4 g. [- X; [
+ i( e7 V Q/ @ ~
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)- D2 O; q2 s! `6 l1 U. S4 [& c) g' g
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.% Q) H; W6 z9 t7 ?. S6 Q! { b
, t# z- s! E. [! u
2.提标用户在屏幕中选取3 ~* t- h- Q0 e6 q. |0 o3 ~
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
/ g' j" E8 \2 U3 C F下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除 e0 Y ~1 M( I0 a o/ K
, w+ o" \6 G3 i( A
Sub mysel()% {4 v* M! W9 j1 S+ f- c1 i+ P7 f
! F% M0 g7 [3 P/ KDim sset As AcadSelectionSet '定义选择集对象
1 e$ K2 {, s" {; iDim element As AcadEntity '定义选择集中的元素对象+ M. X, g; B' F( i }' G/ O0 S4 F
% n0 h' _" m, vSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集6 l, m [7 {3 k8 X [+ Y
sset.SelectOnScreen '提示用户选择6 u5 l7 B/ I% l2 [& d
2 j+ J* A" O$ h3 ^$ t& u7 O5 c- p! e1 oFor Each element In sset '在选择集中进行循环
0 Y! O$ V: J+ o, j1 kelement.color = acGreen '改为绿色
$ z0 f# L) g: Q1 x4 f5 B# j+ INext
( q5 @ Z+ {4 x2 wsset.Delete '删除选择集
0 }0 f$ U1 V2 e- }' _+ k! ~- f) C9 }* D
End Sub4 r; d$ _% k( I4 H6 ?. K
; X/ ] i1 F' [0 [7 b
3.选择全部对象/ K6 g2 G0 ^' V
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.) E/ O4 N# i4 s, C' F: ^1 ]
Sub allsel()
! f2 z; U9 r1 `* y& }Dim sel1 As AcadSelectionSet '定义选择集对象
9 ^# A) Q- A5 ~ {+ h+ ?Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
1 M2 ?9 ]& N3 _ H! eCall sel1.Select(acSelectionSetAll) '全部选中
a+ ?- C. q9 d+ |) L4 a! usel1.Highlight (True) '显示选择的对象
) ~& M- C; R" S" U3 wsco= sel1.Count '计算选择集中的对象数7 a3 g: j1 [" R# G! `
MsgBox "选中对象数:" & CStr(sco) '显示对话框+ O; b8 d5 z& }3 z
End Sub
( Z0 X2 U% s/ Q2 D) ]) P) S* K0 y$ E; i7 j9 Z1 [6 P
3.运用select方法
9 h% x8 h2 @+ X0 Z" \( F上面的例题已经运用了select方法,下面讲一下select的5种选择方式:9 ^) U- E: L: O m
1:择全部对象(acselectionsetall)
4 M* V; z+ X7 t1 M1 S8 E2.选择上次创建的对象(acselectionsetlast), k6 x6 ]% M! V$ o8 d# }9 [
3.选择上次选择的对象(acselectionsetprevious)
5 z5 W0 u" T- V3 Q9 Y. F" n4 u4.选择矩形窗口内对象(acselectionsetwindow), p: A! ~& C& ?
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)/ p1 `# b% l! S9 C; P; f. h
还是看代码来学习.其中选择语句是:
8 j. K& |: Y! _* zCall sel1.Select(Mode, p1, p2)
; v7 A/ P1 n r; ]' _- oMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,. D$ u; X# i( g; ^
Sub selnew()
5 S$ S: H. E/ H. d5 J9 gDim sel1 As AcadSelectionSet '定义选择集对象- B& [; {% e, h- d6 _" Y- D6 P/ W6 M
Dim p1(0 To 2) As Double '坐标1' P, O) L/ T1 _* g
Dim p2(0 To 2) As Double '坐标21 o4 y9 x* G+ g8 h1 Q
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
- N* F! J/ G- i/ U t9 vp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标14 p! M$ R+ b8 \4 N2 s8 y/ d, }2 |8 W/ Q
Mode = 5 '把选择模式存入mode变量中
4 k% {; Z" c6 z9 A8 X$ kSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集: t2 Y* ?/ I9 R" j1 ^
Call sel1.Select(Mode, p1, p2) '选择对象
# H8 G- ^6 n9 Q& w# Y; Ysel1.Highlight (ture) '显示已选中的对象
9 h/ W! ~, z; G* ^End Sub |