Autocad VBA初级教程 (第九课:创建选择集)
, E: T& t- z; W8 O" O( F% {
* w+ e0 N, u' F7 J* i, F0 }* N g: O 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.* E8 f: n, {5 i/ a2 }+ V
" `. T- a2 [4 q# i0 H) v- Y) F
Sub c300()
8 M& u2 g, x; B+ m! G9 u' _# N' f4 ~! `' D0 m3 [
Dim myselect(0 To 300) As AcadEntity '定义选择集数组0 r* u' K0 Z2 j
Dim pp(0 To 2) As Double '圆心坐标' J5 O2 D+ O: h1 S. c; M' v
+ X, c( q1 v0 b% X8 J
For i = 0 To 300 '循环300次
6 N! }! O$ p; R1 xpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
; r# B6 t1 \7 |Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆/ u: E+ x' ]5 w# V- ~
Next i# p B8 `6 x4 Y* `1 m( s
2 R: A( m$ d, W# J9 }5 Q4 q* V
For i = 1 To 300
& X3 o3 H; X; W/ g% @) |If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
5 ^2 g- ]2 n/ m. Q0 ~: _) n4 Smyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
9 l+ B# L! c O* |8 Y/ B8 m' `) nElse4 R/ I3 N9 u0 U0 y9 j
myselect(i).color = 0 '小圆改为白色
, F/ v1 t N }5 L8 `2 _End If: `, X3 s' p! b
Next i
4 T8 {7 w7 t1 x; u+ t1 V# O p S$ Q7 _6 `$ e* } S7 d( F9 }4 N# |+ e
ZoomExtents '缩放到显示全部对象7 H S. I1 Q& t+ d! H. Q% p
; S9 q5 i1 ?6 i6 q
End Sub
3 p6 s0 X4 Y4 A9 V; y
, F( V' B' x+ D1 ]4 X P& c8 x; W& [) A5 Q
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 01 r& ?9 o \: w* V5 c
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开9 x# X' x6 @# ~! S
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
9 E4 \* ?% t/ b1 a9 O$ t7 ~+ `) ^/ `! ], x) q, G
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)7 b. @4 r% k+ `1 g# b6 U
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.3 N# a% m% V* b+ x& v" z4 V. l+ M* k( N
. M# l4 ~( W7 Y( e. m1 h4 \, B2 D6 ~! k2.提标用户在屏幕中选取' e1 m) r) m! }8 T, ~. |
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
- s# H- E9 R% a$ v R下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
' d" K$ }. z; q' S; |$ \# F1 t9 x2 H- n, U8 x' A
Sub mysel()
$ E7 [. O7 E! }- P, E& d1 o" k! L; T6 f5 ~4 l* a5 x" S
Dim sset As AcadSelectionSet '定义选择集对象% { y& c) m4 u& s, @6 k+ R
Dim element As AcadEntity '定义选择集中的元素对象
8 \* R: @. P2 i( w- {8 I( q* J( r7 J% O% K
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
6 I4 l' j2 {. A! H! v7 R# Jsset.SelectOnScreen '提示用户选择4 E5 |/ B G% e5 r# ~
- c; o! N. W; K, j7 U
For Each element In sset '在选择集中进行循环! u2 E, H) ?% u- Z
element.color = acGreen '改为绿色
3 f& ?. `* t- j7 j1 {; v: ANext
5 ^% X% Y/ t3 @! ?& m }6 ssset.Delete '删除选择集9 `8 {% _' M/ H5 w& [3 z
: {1 h: O- r8 l9 p: [) @
End Sub# M- ~/ D% g# U0 D
, {8 l6 {0 \7 Z9 J9 y0 f4 m( h1 {9 ]3.选择全部对象
5 n9 U! e: g+ u8 |6 `) d用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.1 N% d [* @) w& w( U. d
Sub allsel()
! g# C8 K" R( }4 o+ k/ j8 \9 W4 Z: mDim sel1 As AcadSelectionSet '定义选择集对象7 a1 C, ?8 ?/ U' _ n% }8 F* C
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集3 W# X2 J+ v1 N/ T
Call sel1.Select(acSelectionSetAll) '全部选中
# X' b5 |! d: H7 Usel1.Highlight (True) '显示选择的对象
! U. O8 b J0 R( z6 Ksco= sel1.Count '计算选择集中的对象数& Z" M4 V" z* N9 | \( I
MsgBox "选中对象数:" & CStr(sco) '显示对话框: I8 s( G! }4 {# e4 ? q) v8 o" _' U
End Sub
1 B' I1 q3 ~' ]0 J" m+ G6 Q& ]% I! z! U: l( V
3.运用select方法4 X" e6 ^ p. f) g
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
$ w. f% ^" a+ w1 k0 ~1:择全部对象(acselectionsetall)
. t$ L+ D, t8 g+ M2.选择上次创建的对象(acselectionsetlast)
1 Q/ X- y$ L2 H% W8 W1 B3.选择上次选择的对象(acselectionsetprevious)3 k7 s( m' l% @' `, X) z1 S& y
4.选择矩形窗口内对象(acselectionsetwindow)
9 q* ]0 b+ v8 x3 H2 V- t7 l5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)7 X$ J$ P* j6 @8 ^& @% h' I
还是看代码来学习.其中选择语句是:
. Q/ R. c8 J# Q% R6 }3 W/ qCall sel1.Select(Mode, p1, p2). G; z/ c* V/ R3 D# y; B9 m
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,7 O* w" G5 d9 e0 W) u" J
Sub selnew()0 k5 z t/ L8 \* W
Dim sel1 As AcadSelectionSet '定义选择集对象; y' D8 h" x7 O. C+ I) B6 _. Q9 P
Dim p1(0 To 2) As Double '坐标1
1 t# ? a) D8 P9 C2 BDim p2(0 To 2) As Double '坐标2
$ J+ O* S }; V4 \8 t% |- Ip1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
$ V" Z- Y3 J/ [1 d6 ^; h. jp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1$ J! B4 g$ F0 V$ H- t
Mode = 5 '把选择模式存入mode变量中& W; O" n# [! H# {8 I
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集; X/ s2 m& A3 N
Call sel1.Select(Mode, p1, p2) '选择对象
^1 X, K: I: J9 b$ N8 asel1.Highlight (ture) '显示已选中的对象
, ?& K4 B' |$ Y, |8 wEnd Sub |