Autocad VBA初级教程 (第九课:创建选择集)
+ e' o5 v8 N/ t8 I1 g' R& e4 Y/ [! I) B' M9 j
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
! b1 W7 H- [( o. L
1 V- m2 M4 |* B8 `+ _Sub c300(); k# J" w; `. E$ O+ m$ C
# {. E% W. Q# Q2 J3 I' O0 XDim myselect(0 To 300) As AcadEntity '定义选择集数组
( `# q3 y+ Z( m! VDim pp(0 To 2) As Double '圆心坐标
4 b% L5 l7 M" x {' r+ }; W, ^ Y) E& x+ G
For i = 0 To 300 '循环300次
6 _: E3 I. w, i2 ppp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
1 G# t6 N0 v. N0 j+ ]' TSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆8 g" a& \5 O) i v& _7 F8 e
Next i* o; r& t' o" T, g; ]) y: Z
' G) q/ O6 o9 v1 ^9 Z1 ]3 n8 {
For i = 1 To 300! j6 ~; C- O R' M# q# Q
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10! L0 y6 p! O$ _
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数) o: k. m" q* g i2 j
Else' ]! {8 x0 K2 J) W
myselect(i).color = 0 '小圆改为白色
# r1 k G5 y# B$ R3 Q1 vEnd If
9 s5 E2 c6 ?, s. K! jNext i* y- \; J# {1 n2 n
6 i t* l9 y; b) QZoomExtents '缩放到显示全部对象
& ` p7 r8 G* b X: \5 Z' M7 _) a: u- A/ ~. V8 |/ D
End Sub
8 s+ m8 X. L9 ^5 C4 o% E$ i, H. M" q E$ ]3 R8 o
( \+ B2 p; O8 f5 K+ {
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0; l0 @# l- ]0 I7 k
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开* N- `! N! P* M4 ^ y
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数7 a3 J/ b/ s3 y
$ O( f! ]' U* G6 r
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
) q& l6 ?! x! p0 p! H- N这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
! b/ c8 T& h' h2 R$ w8 ?/ q
3 w" R; Y0 f% @$ Y; ?: j2.提标用户在屏幕中选取
+ T9 M/ ~4 l; X/ y4 d0 w0 H* r, u选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了./ `0 W% {+ J" `& z7 J+ m# B) n
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
1 x3 j& `6 l6 J
# o; m! G- ]1 }5 I6 ESub mysel()
* J, g) f x3 [, Z4 q% z
. {5 e" C* Z% e) w4 X/ ZDim sset As AcadSelectionSet '定义选择集对象
* D- j% d* y0 L+ ODim element As AcadEntity '定义选择集中的元素对象& z( A( `5 I6 _* U
+ N& j8 W$ @$ e4 ~' m7 @" S$ g7 QSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
) |) G% i8 z# C$ i. A5 isset.SelectOnScreen '提示用户选择
& k) X P5 R$ y7 I' d: C1 {: q3 r( x: s C
For Each element In sset '在选择集中进行循环
/ G( C8 j! O4 ^5 B6 {5 kelement.color = acGreen '改为绿色3 h3 D5 }8 p$ d1 n9 M N
Next
2 ?4 r0 u- a6 {5 @+ n1 `8 `1 Rsset.Delete '删除选择集& F" s6 ]$ n. e; k% R9 r1 l
4 h/ J2 x6 b2 g7 _7 x) C+ Z7 VEnd Sub* A/ ]9 i* D; H x$ o
- x* Q1 G' R6 H9 A. t9 z
3.选择全部对象
2 d2 B {2 @. S7 Z用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
0 v4 I5 a k% L: a. D: L5 @Sub allsel()' B' f0 i2 D$ p2 k& Z! K# S k, _
Dim sel1 As AcadSelectionSet '定义选择集对象; f% d3 K: N. n/ P3 @' T, }
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
$ \: a8 z3 s0 r# ~7 b( f& q# y2 \Call sel1.Select(acSelectionSetAll) '全部选中
/ b1 m# E% G7 C( V1 X- N7 jsel1.Highlight (True) '显示选择的对象
+ I3 c" {- q. E7 Msco= sel1.Count '计算选择集中的对象数# J6 a8 C; u* o/ P
MsgBox "选中对象数:" & CStr(sco) '显示对话框" j4 T7 [/ s& u+ D7 I. C: e
End Sub6 [# }2 _/ {, N% [/ [3 k$ K
! M: C, _" Q& ]( n6 G3.运用select方法
; x4 e5 _/ \/ E! u& e上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
: {. V m5 s3 P7 R1:择全部对象(acselectionsetall); V+ A& ~' d [0 n
2.选择上次创建的对象(acselectionsetlast)
) e6 q; Z/ ~& [# M2 H& V% o& l3.选择上次选择的对象(acselectionsetprevious)9 h6 f: n" W/ d; |& ~ }7 f5 x, a& r' }, Y
4.选择矩形窗口内对象(acselectionsetwindow)
, \! g! q( S+ T" a+ m6 l' l2 x. T5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
- G2 \" y: a" ~还是看代码来学习.其中选择语句是:* u' P H0 M' c
Call sel1.Select(Mode, p1, p2)* t# R* k; ~4 Q+ |! h1 R
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,; A, F7 b% v, r* y# y' f
Sub selnew()
# b* b$ z' z I v0 t2 U# f1 eDim sel1 As AcadSelectionSet '定义选择集对象" v2 p5 B) e# v: f0 k- f# I7 ]
Dim p1(0 To 2) As Double '坐标1! O. P# b( k7 r4 U) f
Dim p2(0 To 2) As Double '坐标2; | I0 K D# Q1 L$ a, |- J
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
! I9 u* i- I* F/ \2 U' o7 Yp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1 t3 s7 ?0 ?4 y! x! \3 G
Mode = 5 '把选择模式存入mode变量中
3 L: r- U- W+ W3 ySet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集* R5 p* ^" D6 X, E$ m# f" ?
Call sel1.Select(Mode, p1, p2) '选择对象
8 e( F" `& u0 ^; W0 o+ A% M0 k" vsel1.Highlight (ture) '显示已选中的对象8 p, h2 @8 L! B6 O! Q$ s5 M9 E
End Sub |