Autocad VBA初级教程 (第九课:创建选择集)
4 K/ O1 w7 L' G( F! @) c
; D! @/ c1 Z6 w5 Q 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.% N1 N! r8 \+ p8 L
8 m x" b, b! t/ @ M% O0 ?Sub c300()4 l4 Q6 _" @, J9 w, ~
; U7 a# O1 K; i% n; a) k
Dim myselect(0 To 300) As AcadEntity '定义选择集数组$ S- Z6 m2 v: u. S
Dim pp(0 To 2) As Double '圆心坐标
5 h, f I& z2 x6 O
5 Y, A7 [) S3 c; lFor i = 0 To 300 '循环300次
* G9 \' g9 }+ ^- U5 ~pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标) W% g5 I' o% X8 I; l$ b- Y
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆$ s1 n t6 K2 w, d) {* ]! P: a6 x
Next i
$ e1 R% K8 ^$ F- N1 ^: ^1 {
9 g/ T) d+ u/ sFor i = 1 To 300
* @5 m7 u4 T* W6 [$ g- K. LIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
, k2 ]* ^7 e- @8 u$ Gmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
' Y# J0 l9 k2 dElse! @! h& {/ j" N
myselect(i).color = 0 '小圆改为白色! _9 `6 g, s' j4 S0 n
End If
6 a' H1 k, n7 Z! f& g4 tNext i
9 K e" t6 Z( N# c: T& |3 J; A* }+ \1 }
) Y/ c# Y/ w5 P2 I: l& R" m. q2 pZoomExtents '缩放到显示全部对象
! G6 D6 Y1 ]7 j8 {
5 f+ G4 `; w9 R) C' nEnd Sub0 J& P) L2 A; W& _; x9 Q6 c% `
* R" Y5 w6 ]; i) P; A% l; w$ R6 h
6 i) A1 Y/ m; ] Z, D* @
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
! R+ ^5 q7 I; m这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
7 m8 G U8 t, @' V8 Grnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数3 P" E' `9 M3 J% s4 z
! z* ~( P+ A6 m! B% H
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)5 i$ }' E- h7 G: c% C+ z
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
; ~! J" E9 w" Z' F1 x3 w1 I* L- r2 w8 t+ G3 _* @
2.提标用户在屏幕中选取
5 o" ^6 b4 {9 E) `( l( v选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
: u* \8 p; c( I2 a下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
7 @7 `3 u( O: q$ s0 z) Y
" u, g1 I8 X2 OSub mysel()
5 O2 T: n; W1 E5 [+ O% u+ W! M. Y5 W L b
Dim sset As AcadSelectionSet '定义选择集对象: m" X. O/ [2 R- O- _. f) i
Dim element As AcadEntity '定义选择集中的元素对象
3 H6 v& G. y1 F5 w$ O0 x' l0 X8 V' a: b- v6 A3 x6 j6 U
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集9 d" |+ L3 N1 l6 u
sset.SelectOnScreen '提示用户选择+ z2 p) e; K0 B
; e; y! V& ?6 B7 m# ?7 X
For Each element In sset '在选择集中进行循环! O! E) c" I6 e' {% h
element.color = acGreen '改为绿色
$ p# H" r' ^6 L9 }) S# \Next
4 t. h& p \# N$ h: n- Osset.Delete '删除选择集+ I# q v6 _7 ^9 V+ ]
1 `! u8 o' U8 k8 P, d2 V5 cEnd Sub
6 Y" c) ]% Z4 c5 B6 w$ F
0 {* F. e$ e& ~* K5 e, v+ R3 E3.选择全部对象/ }) F/ X% _6 E L1 T7 l
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.6 p3 @4 U1 m$ _8 k% u3 D
Sub allsel()
; x* y% t; T0 F' Z aDim sel1 As AcadSelectionSet '定义选择集对象
: `5 `/ c+ M& }Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集0 D$ N. T* @- a0 \+ d
Call sel1.Select(acSelectionSetAll) '全部选中4 z$ A' T; ]+ R q, ?9 ?" o3 T
sel1.Highlight (True) '显示选择的对象2 G/ U! J* u7 y3 v
sco= sel1.Count '计算选择集中的对象数6 \& \2 j# b2 m6 C* W! Z2 `+ i& O# J6 u
MsgBox "选中对象数:" & CStr(sco) '显示对话框
& [) r* V) `& w/ K) n% W# \: CEnd Sub# A0 L5 o4 ^ `/ M0 z
0 x% {/ h7 K, X) M
3.运用select方法3 R% ^; P" ?7 K" E5 A4 l* c; ~
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:. n! B: l) s- b0 T
1:择全部对象(acselectionsetall)
7 K- K5 M7 U7 F) O2.选择上次创建的对象(acselectionsetlast)( W' d1 c9 N/ o0 ^' U; n7 N, @
3.选择上次选择的对象(acselectionsetprevious)
+ r/ Q- M& o$ c- t& W! J4.选择矩形窗口内对象(acselectionsetwindow)" Z- c6 ^; n# |9 ]: M
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
+ S' Y1 Y t* s, X0 S还是看代码来学习.其中选择语句是:
/ r' p+ p9 O3 ]- iCall sel1.Select(Mode, p1, p2)4 U- h# a0 |) k- ?& D# }- {& i' t
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
: F( t& n4 D% k6 X3 |) v- ]Sub selnew()
; M( t! e, u: j5 H, q7 ~Dim sel1 As AcadSelectionSet '定义选择集对象
4 B* K3 P7 }. E0 P! S3 X* L" K3 hDim p1(0 To 2) As Double '坐标1, C7 e1 b! ]3 ?# u6 B1 y1 ^; G
Dim p2(0 To 2) As Double '坐标2- @7 ?) y0 Z0 l+ m
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
+ W6 `7 Y+ p$ Y( J! T8 d hp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标10 H( `" b* t' V5 p' U5 ^; Y# h
Mode = 5 '把选择模式存入mode变量中6 p8 }$ V1 R. V7 A( [: w- x
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集) `" y' _+ L/ D. s4 `; }
Call sel1.Select(Mode, p1, p2) '选择对象
% ]6 H- _# [' K! V4 i2 M. K0 K1 ]" Csel1.Highlight (ture) '显示已选中的对象# G# O. G; Z) V4 G4 u
End Sub |