Autocad VBA初级教程 (第九课:创建选择集) $ r% R; [2 ]2 }4 _$ p8 Q1 Q- O& n
: R# _4 D7 j2 z: r. ^) v 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.; b# g6 h* _8 z1 N1 e1 h7 [
$ e9 ^' q* A+ X& Y- N6 C5 dSub c300()
( [/ F5 |1 ~3 |
0 F. h4 E; q3 `2 j% M# ADim myselect(0 To 300) As AcadEntity '定义选择集数组
% e* m" u6 Z* v' b0 o- YDim pp(0 To 2) As Double '圆心坐标
! y1 [3 C* o9 | O; _( B
1 _9 D3 r; @$ D$ {0 _For i = 0 To 300 '循环300次
3 ~" J- h* T9 ^# [6 \' Jpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
+ @& d/ }: e) h0 ?* r6 J3 @Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆" _. b8 \/ y9 e$ g6 v8 A
Next i3 R+ G$ ~0 u z9 @' e* { O/ ]0 @
. E+ ]1 { F" N0 I# I/ s5 ~: oFor i = 1 To 300) \( F# R. ?' c
If myselect(i).Radius > 10 Then '判断圆的直径是否大于109 _. w6 i3 N5 s' W- }
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
( Q+ e; C- @ r) i7 DElse
& f$ d/ F. X& F& T$ Vmyselect(i).color = 0 '小圆改为白色1 P/ \+ Z3 r I8 f0 N
End If/ `* e) w4 I& P" C* B# r
Next i$ n, ]2 U2 {+ z3 { t# M. x$ W; j
* z3 V) w0 r. X0 [) lZoomExtents '缩放到显示全部对象' D3 m0 B9 a" A4 j5 c+ l l
" d; S. s# P- i: n/ U
End Sub
& t- |1 F/ ^2 K& k/ ~9 i- [' X! A. K! Q/ _) t
7 R6 d; X( v4 B [3 @7 `. }$ f
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0; i$ \! `+ V, }' A) f1 }/ ~
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开, b0 ?/ d, q* y3 T3 J
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
5 l p3 b* N' ^* m' Q, A7 u1 i `& G3 t& F1 ~
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)' c" g" ?! l O5 c- R6 v) P! d" h
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
+ Q2 w) c+ ^! o! ?2 W* {8 Y" d) |" T0 @$ M' Z; E
2.提标用户在屏幕中选取
+ C j$ T* v% D$ j& a选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
9 e$ O1 H: u" f下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
, X% x$ C' o' M# p" ]4 S! J& Z1 N2 X0 W# G
Sub mysel()
4 {; S q8 |/ G* _: D f) P/ W. x: D1 S+ b( c. w* Q
Dim sset As AcadSelectionSet '定义选择集对象$ W+ b* F1 H6 `/ q2 S
Dim element As AcadEntity '定义选择集中的元素对象
* u& Y- i: R7 f$ E. d4 G c: C# b% u2 c
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集9 C7 `* R1 p. v3 B# g
sset.SelectOnScreen '提示用户选择
( X/ z5 s2 k7 e5 x
" M* y! \' n8 u5 {5 t/ N6 {For Each element In sset '在选择集中进行循环
# q9 j, q; y! p) B: y, \8 Y$ ^element.color = acGreen '改为绿色
& ?: j$ ` U, W- u% V8 x, p ENext
/ \! l2 Z0 d- t- ?2 e; tsset.Delete '删除选择集" K+ g4 @$ R( Q% H8 x& V+ d+ p4 U
9 j }3 i8 O+ ^( H1 g% WEnd Sub
: z9 P. h1 X$ u) ^
3 _5 u- m1 C5 D7 e! @8 N3.选择全部对象
1 O7 E+ {& ~: R/ h+ Z用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.. n% u M! C* b" P6 z) U4 p
Sub allsel()
9 ^' r" O+ i( R4 }: ?Dim sel1 As AcadSelectionSet '定义选择集对象 L! s+ o# Z& z8 e6 i( b
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集 {( g8 ?6 ]( I9 \
Call sel1.Select(acSelectionSetAll) '全部选中
4 Q) q; e% _* dsel1.Highlight (True) '显示选择的对象
1 F* w3 ]. i" u$ o2 W y- ]sco= sel1.Count '计算选择集中的对象数) Q8 S* M2 D0 e9 d' W
MsgBox "选中对象数:" & CStr(sco) '显示对话框# S5 i9 `3 P2 V' j* d
End Sub% K/ B" l3 M& V2 w9 i. _
8 t$ n; n/ q7 q8 o8 g; v3.运用select方法+ T) [, O( l! Z: }7 E9 s/ a
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:9 Q1 ]. q7 a* z8 q
1:择全部对象(acselectionsetall)
1 |+ g, L4 M% Q5 E* i! `+ [2.选择上次创建的对象(acselectionsetlast)
7 O7 ]' }$ F/ b8 Q( e/ v+ Q# V3.选择上次选择的对象(acselectionsetprevious)( R, k4 o) K6 z8 X% s# R
4.选择矩形窗口内对象(acselectionsetwindow)
z4 i6 H5 d9 e1 ?, |; A5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
. t. q S9 L! j! b5 h# U还是看代码来学习.其中选择语句是:
" |& M- y5 e" @& \7 jCall sel1.Select(Mode, p1, p2)* O, h* C8 s3 h5 w3 A/ q9 h6 ~
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,+ g y/ V$ Y! f M [6 V
Sub selnew()# i' ^8 k; \. I' b6 p" F: ]
Dim sel1 As AcadSelectionSet '定义选择集对象
1 ?, E0 {, n6 e( }6 w: O4 uDim p1(0 To 2) As Double '坐标1
! H% I5 c: D7 z9 V# n8 M% \8 hDim p2(0 To 2) As Double '坐标23 B; \4 z. N9 `
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1+ L6 e0 N) n( Y0 F# c
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
5 ?2 m: I/ ~/ E q7 D; Y7 ]! DMode = 5 '把选择模式存入mode变量中
; p4 n- h G/ }1 n6 PSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集& _2 z/ C, }0 H" X( L: ]( i; T
Call sel1.Select(Mode, p1, p2) '选择对象0 H) W+ o3 [3 I7 W
sel1.Highlight (ture) '显示已选中的对象+ Q* R4 [! C/ E3 ]5 z$ b0 `
End Sub |