Autocad VBA初级教程 (第九课:创建选择集)
! V% Q+ F; y. o0 u" [* s
! t0 k7 Z1 ?2 O 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
( q( K; |- Q: Q$ b) U3 J& y7 i% L
Sub c300()
8 r- c/ }- W: ~+ a5 h( P$ F- k
5 @3 _% n) s+ j" q, j1 I( MDim myselect(0 To 300) As AcadEntity '定义选择集数组; {+ |, F s1 q, d
Dim pp(0 To 2) As Double '圆心坐标( C% f- K7 Q5 |* ~2 v/ v
5 l- ~' `) G) v5 a$ v0 KFor i = 0 To 300 '循环300次/ L9 t8 T6 E' D! \
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
1 |! D/ o" B9 d: V; USet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
+ k! O( q8 [; }, ]6 D0 wNext i% `4 N: f! e: }2 w! I* F5 ^
5 B8 @4 {: \& @$ c4 H) F: v
For i = 1 To 300
0 O: P; F; Q0 ? b" ^+ H7 xIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10: y. f k8 K& B% C/ f+ F
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
. X$ G- a* C" }Else# J+ r4 p! B- }; I0 r! v% X
myselect(i).color = 0 '小圆改为白色: m5 k, i# {" q, j# D
End If- R% I: I$ d+ c ?5 v
Next i$ A. v8 ^: l4 D. w1 q& t
0 g+ X& S2 ?" X* k5 P3 _( P. vZoomExtents '缩放到显示全部对象
( n# X6 Z1 f: b8 J( J
8 P- L7 M1 O8 P2 l' K5 ]. r- P9 rEnd Sub
# w, u3 p7 n e& Z/ i4 @
# X: v6 Z. r# ]9 Z) {' p
* E$ v B1 o: C9 X, f# }pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
# L5 c3 |4 v, I' G5 G这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
- {9 ^7 b; d* Srnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
u3 B u0 L6 H/ d; |* _( \& O/ Y6 }) U& [+ L) b- \5 h! `& ^' c7 |
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
4 Y& a6 n9 _9 c$ f这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
}2 D# C3 |6 c( j' P8 j6 {9 k& d# G5 Q4 m+ \9 F( @& U
2.提标用户在屏幕中选取; \0 h! w, ~: D, c! ?# F
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
! @0 f: [! Q# B9 R# M/ Y下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
! z( v" S3 r0 A2 h& W1 f
4 I8 V1 c2 T8 ~( ~7 w# W+ sSub mysel()
- I* D6 k/ o& m$ ~/ c& y7 Q
% Y1 D6 a2 s1 y3 O" v' t) b! HDim sset As AcadSelectionSet '定义选择集对象' z( b+ `1 f m& a
Dim element As AcadEntity '定义选择集中的元素对象
, ]. C/ q ^3 a, {) g/ g8 Z8 u+ l9 n0 g" D
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
]9 L5 {# M9 rsset.SelectOnScreen '提示用户选择
: ]! q: b0 `6 I3 _2 k) O! w2 [5 N
For Each element In sset '在选择集中进行循环3 `7 x3 t9 C! E! a+ p2 F0 E
element.color = acGreen '改为绿色1 l+ v- m* j1 G& b
Next5 A1 Q* D) ]/ A( S& r5 O) F
sset.Delete '删除选择集. r3 Y4 e! x9 F5 d4 ^& s
5 T9 S" g, e/ R% P, s/ kEnd Sub$ T6 V' l$ D% `3 R
# k( m' M& u0 g3.选择全部对象! H% E) Z' g0 W1 c
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
2 g, e2 o3 l& F( ?5 wSub allsel()
9 t8 {3 f- e1 Z3 L! \( VDim sel1 As AcadSelectionSet '定义选择集对象
* w ~( p$ ^6 |: ?0 s2 i6 m+ C, a$ mSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集$ d" k* \: t4 }. E- Z0 R
Call sel1.Select(acSelectionSetAll) '全部选中 s( V; `+ r: O7 [& r: D7 @7 i& z
sel1.Highlight (True) '显示选择的对象
. a9 _4 M: y5 d) f- msco= sel1.Count '计算选择集中的对象数
! a9 O4 ?" e- [. `MsgBox "选中对象数:" & CStr(sco) '显示对话框
$ ~9 W4 [3 W: ?9 S6 ^. l3 BEnd Sub
: y. ~* z1 K* G* {5 r4 U
5 }) V% s9 u0 J6 t2 U6 l0 ]3.运用select方法
4 Z2 b0 |& Q6 k* D6 i$ l* E$ d/ I上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
; l( a9 T5 Y5 m3 k: M1:择全部对象(acselectionsetall): d2 x Q9 j3 H$ {" d
2.选择上次创建的对象(acselectionsetlast)
! Z# x1 ]2 b' z$ a2 I$ B3.选择上次选择的对象(acselectionsetprevious)3 r! m4 p+ G( v. L+ u3 C5 w
4.选择矩形窗口内对象(acselectionsetwindow)
" n2 ?& H2 a. `3 T8 o5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
. y+ ? w' {+ h* y. Y还是看代码来学习.其中选择语句是:. r0 L8 x9 T. D( K! q. g1 p2 N7 c
Call sel1.Select(Mode, p1, p2)
& y! g- S Q9 J( UMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
* f; g6 q/ A; T/ ^" NSub selnew()
& w$ k. \3 x7 M3 b' y# o5 K) H8 CDim sel1 As AcadSelectionSet '定义选择集对象5 C2 C" N4 b. M9 K0 ^( `4 I' R( a% ?4 `. Y
Dim p1(0 To 2) As Double '坐标17 I7 z6 f* S; A, A
Dim p2(0 To 2) As Double '坐标2
3 |: u9 F! D, |# r# M- i' ?0 X; Hp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标13 a* Q- [4 D# u+ A. I! Y; O
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1) ]9 c; S6 Z8 I" l* S
Mode = 5 '把选择模式存入mode变量中4 p" ~- d7 A! L' Q" Y4 Y* X* C
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集- o( v( O1 R" ?
Call sel1.Select(Mode, p1, p2) '选择对象
% M' `; E: y3 J4 @' [1 Qsel1.Highlight (ture) '显示已选中的对象
- t3 S# J/ H. aEnd Sub |