Autocad VBA初级教程 (第九课:创建选择集)
9 w+ p' p% T4 e
! f e6 U6 m Q0 K: V! S 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
2 B: p" L) w9 Y- Z/ s0 a
5 e3 o" h( @8 |$ t6 XSub c300()
. `& W; m) c- K/ S# L- ^& S U- e" f4 z
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
# f) j. [' N# v. MDim pp(0 To 2) As Double '圆心坐标
! H, F: }3 x6 b+ h
w& }- g, a1 c4 T; K4 bFor i = 0 To 300 '循环300次' c5 D6 V; o1 |% c0 Y
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标% `- B0 k# N* r, t
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆) k) b* t% s% A" a5 K
Next i
- B4 e8 ]! |& o4 g' I y$ ^8 f
7 J8 f5 j2 i+ x* zFor i = 1 To 300
5 u$ J1 J$ K a* v! h9 NIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
5 F& I% `: M6 Y/ ?5 x- Omyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
$ \- I# ?8 s# D4 Y0 S+ [/ S9 HElse
( n2 w- i/ O. Cmyselect(i).color = 0 '小圆改为白色
$ H2 \3 r5 h0 _ F; R4 E7 DEnd If
0 Q" @% w* C/ O& t' s3 D. _Next i2 L% o4 d) r0 b: y6 c0 F2 O3 I
( F9 _1 f+ G7 _ n. a P
ZoomExtents '缩放到显示全部对象
) }- ], w* [2 T5 z) l4 H: k% U) n% p/ Z
End Sub
2 ~2 }* z; b; {1 B5 P6 r' b* L( R* v7 t2 K
8 g5 I& x; Y) Z, tpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
1 u' E5 B. S4 \0 F Z( l这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
% L6 ]6 g5 b1 [% I1 crnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
: _5 n/ Z7 l( A8 O
+ q' B8 ? ]9 T! ^Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
' z4 m/ H0 e) g这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
4 I4 k3 V( l" Q) F% ]" c9 G1 J
* _% B+ K2 e6 [1 ^; x8 ]1 \2.提标用户在屏幕中选取: H: W) r# @9 x5 s
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.6 Q( o$ W# L* u' a3 t) }
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
, S, n1 o- P( ~6 U2 j0 h" {' p7 Y! r2 a8 B
Sub mysel()
' h0 U4 N* ^* C& B9 ?: [0 R0 p, h9 K( e$ i- C" K* W
Dim sset As AcadSelectionSet '定义选择集对象
9 ^ C5 ~+ K3 p+ `Dim element As AcadEntity '定义选择集中的元素对象
# r2 N* s8 V, }5 j* ^; {! q) N$ f m
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
+ e* S# Y a4 Z7 Q& n3 Usset.SelectOnScreen '提示用户选择
6 V; m$ Y8 k* U/ U8 i" O; }' w
; A# X1 Y9 ~% vFor Each element In sset '在选择集中进行循环
0 F2 f! |' ~6 g; n* R- G; relement.color = acGreen '改为绿色7 h, G3 ?3 |7 R4 {) j
Next
/ t3 A* {3 `- F; ~; O& Y3 r Vsset.Delete '删除选择集
, M* i, q: Y9 m7 {
$ u# @: J Q! _, E: F9 c& DEnd Sub9 g( Y2 A/ l; W& e& w: d0 H0 |
9 E/ Z! f% D: {& Y% T$ u; p3.选择全部对象
2 w( }2 B8 Z9 m6 B/ D用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
/ t9 V- U' d! ^$ g( ]0 W5 {0 ~Sub allsel()5 S7 j z4 ]% d! \* |
Dim sel1 As AcadSelectionSet '定义选择集对象
* m* |' o( O5 V1 G/ c9 gSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
- R1 `1 p6 C! U+ j0 \ b! rCall sel1.Select(acSelectionSetAll) '全部选中
/ F5 T0 x% v; X! ?sel1.Highlight (True) '显示选择的对象5 g) N8 q) E0 Q& u, B& G" f K9 K& t
sco= sel1.Count '计算选择集中的对象数- h* k1 w, g# m8 Z8 t& r$ k
MsgBox "选中对象数:" & CStr(sco) '显示对话框! k9 |0 w0 n; q/ s
End Sub
4 z! m' W. H, y! e2 {) v. I& e9 Q ]9 M) i( x+ J D
3.运用select方法( `" _( a. T: i2 g
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:0 }1 O% R- i; s+ M1 n
1:择全部对象(acselectionsetall)- D0 w; `' X* g: d0 w) l
2.选择上次创建的对象(acselectionsetlast)
8 z$ ^$ a+ U: t4 w" g9 v3.选择上次选择的对象(acselectionsetprevious)
4 v8 X" d5 A c2 j8 k4.选择矩形窗口内对象(acselectionsetwindow)6 ^' b" q, o8 N3 `
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
6 @/ D) N! r' m* x$ K: }还是看代码来学习.其中选择语句是:
% f! E0 S7 y: d' H- cCall sel1.Select(Mode, p1, p2)/ g, _8 j' w3 T2 }
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
) R# g1 E1 v2 g. k6 w2 p/ S8 ZSub selnew()
# n' d0 A M. i% N5 n. FDim sel1 As AcadSelectionSet '定义选择集对象% S: I; I9 U, `
Dim p1(0 To 2) As Double '坐标1+ _' e* [. L% V! Y* T+ ?
Dim p2(0 To 2) As Double '坐标21 j! [. @/ y5 j$ c( M
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1' E$ ~0 O8 Y- f
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标12 Q: w/ V0 \0 o/ ]; `% \. |, [8 x% _& c
Mode = 5 '把选择模式存入mode变量中7 L7 g9 V8 O. ~+ v
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
4 Q- `6 Z6 T) x; J2 L7 Z, KCall sel1.Select(Mode, p1, p2) '选择对象8 i2 R8 C( Q: F0 Q6 Z$ H, O
sel1.Highlight (ture) '显示已选中的对象
6 i( w% f6 E4 h' e& V- HEnd Sub |