Autocad VBA初级教程 (第九课:创建选择集)
: z9 b" u; ], p5 F' o/ a' n, ~/ }
8 [/ ]8 l( S6 l @) E 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
( p, V% N+ m6 A) _7 P. X( _% i4 T4 m3 o6 b5 u$ _& x$ P2 l3 ]
Sub c300(); d1 @8 O8 m1 q/ X7 y0 J2 B
+ K- {& [/ p; f; ~( i
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
& w8 u, u; J, l5 FDim pp(0 To 2) As Double '圆心坐标
0 W, `/ M! K+ `( ?6 A: E, g i8 u7 M% V1 D- U( f- Z
For i = 0 To 300 '循环300次
/ G+ m, K: K! X7 A; _0 [) n. vpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
3 |. D6 _% K! y5 `Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
* A* v# b* j7 K5 \ w# eNext i
- _' O% b6 I3 Y. [7 Q1 z% D. a3 U0 }; O
For i = 1 To 300
; K! i0 q5 j2 t4 A9 Z2 y( K' vIf myselect(i).Radius > 10 Then '判断圆的直径是否大于101 B7 f5 ^$ w, C4 |
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
0 w8 x# l: L5 yElse5 h4 V9 Y9 \+ W7 q: i
myselect(i).color = 0 '小圆改为白色
8 A% \* K5 X- K) J* lEnd If
2 C) g( I& _$ ?# t" u# p ~Next i2 Y( F! ?& m9 ]+ }
% A1 T+ ]2 D$ y2 c8 Q3 B( ?
ZoomExtents '缩放到显示全部对象( {3 ]9 U+ A, I& N* F R( z
' V8 J2 C- h. ^# y/ J3 @6 K% YEnd Sub4 a' D! N0 ?6 q0 N
+ U2 R0 y0 ~3 Q; z, M. h- F
, C- d' A8 K9 i- h! }+ D4 i7 N1 c, opp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0( ?5 N) c3 S* S) J* y& ?
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
$ k2 {/ ]8 e' Q0 X7 m Arnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
9 L* v! P# _2 K3 g, f* ^
1 }- F# Z7 v. G, L% H; QSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)$ i5 ?7 L' W9 k) [
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.9 i8 @: x: v4 d3 Y2 n
, F& R# ]$ P- L, T) n
2.提标用户在屏幕中选取2 z6 v9 n( Y& Y% n
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.+ j% |, O& ~1 ^ M5 X- f2 t7 F: u
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
# {+ C& b/ ^+ H0 L0 F. F4 E
8 M6 L0 [8 v) w" `6 `1 XSub mysel()
$ y, I/ a4 M* t2 C9 v+ x9 V1 H! `
Dim sset As AcadSelectionSet '定义选择集对象
) c1 Q1 N+ o) K6 N0 EDim element As AcadEntity '定义选择集中的元素对象8 f" K L% j8 T& b- A
! p! c, w6 ~% o; n" HSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集2 |$ H& P; p3 ]1 K
sset.SelectOnScreen '提示用户选择+ K. y& l, a- A5 \% J
, y2 {0 N) U' i3 |! O) U$ d( I% M
For Each element In sset '在选择集中进行循环! ~& T, ?8 E/ r) N; A4 T9 j
element.color = acGreen '改为绿色
6 y* R3 q' L* O7 m1 ?( kNext
2 h8 U4 A& W% I6 Q# j Bsset.Delete '删除选择集! z1 R# y4 \$ K8 a6 C
9 n W5 x& ]* R3 [* F1 T( lEnd Sub: }" P- v5 `% U, `8 W$ Y
' k; K" I% k9 O4 U
3.选择全部对象2 X! i5 a& V) t U" z( s' R1 }+ K) H
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
! [( S# V' ~: S3 V/ wSub allsel()
+ u$ z# d# P' w0 O) CDim sel1 As AcadSelectionSet '定义选择集对象: U6 S; C# Y. O0 F3 Y
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集8 v& |$ e6 \5 n4 J& f' F* H% u
Call sel1.Select(acSelectionSetAll) '全部选中* F( r; a& |: N5 `+ u( e
sel1.Highlight (True) '显示选择的对象* F1 H; o9 c& ]$ O3 ~) \
sco= sel1.Count '计算选择集中的对象数
2 J' j7 P/ g w) s4 P/ r7 N4 aMsgBox "选中对象数:" & CStr(sco) '显示对话框% c0 |) G7 x; q6 L
End Sub5 F( h% \7 c- U9 @$ B1 B2 f- C# K
7 L& w7 O. A N& ` R
3.运用select方法) }- S. A& o. j
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
3 G4 s; ^/ ~( N7 h" y) y1:择全部对象(acselectionsetall)" K. V- B( C: v; C9 Y$ P. _9 H
2.选择上次创建的对象(acselectionsetlast)
1 K6 H8 o& E* _; z! f3.选择上次选择的对象(acselectionsetprevious)6 |/ d; Y$ ]/ g5 x
4.选择矩形窗口内对象(acselectionsetwindow)) G( L) M# {0 f( c
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)# P, D0 R1 S4 R3 l! G- N
还是看代码来学习.其中选择语句是:
; t* i2 e, D. u- pCall sel1.Select(Mode, p1, p2)
4 J9 I2 p5 ~6 _- d! wMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,( h, l) s' w" F
Sub selnew()+ w$ o4 P# O0 s+ ?
Dim sel1 As AcadSelectionSet '定义选择集对象
% j- P: o: w! h7 iDim p1(0 To 2) As Double '坐标1
$ I/ Y z2 j$ J3 S: Y. P% A6 qDim p2(0 To 2) As Double '坐标24 }2 H% r7 C. _) i* O& \$ m! K
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1 I% k' g& |" E, f5 C
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1, P" M' M/ r" W1 b1 ]8 @( t! ^
Mode = 5 '把选择模式存入mode变量中/ ]! s% z4 g8 k; I0 x
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
) q" k' Y' u1 nCall sel1.Select(Mode, p1, p2) '选择对象% {! d3 _# P" L) h
sel1.Highlight (ture) '显示已选中的对象5 s! q6 j) q1 R5 h0 V8 z- L0 E
End Sub |