Autocad VBA初级教程 (第九课:创建选择集)
, p& |$ x4 N* T r
# d+ U5 q# p" Q. C% S 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
) {. N; U9 ]7 x8 k) a+ c: e2 c# {6 ~, B- H. Q* e
Sub c300()7 D0 }- q- v$ x( U1 {! }
4 k) K g z; D1 }Dim myselect(0 To 300) As AcadEntity '定义选择集数组" U+ ~6 }! ]9 {4 \
Dim pp(0 To 2) As Double '圆心坐标
# B7 @$ y+ }5 W0 P3 R0 V5 U( P7 `3 W: \; p) y. k
For i = 0 To 300 '循环300次
5 t' k! `& W: w% `pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标" U0 w: S" a2 r0 g% _" ]( g- u
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
# w, @5 t3 j& t! Z `- wNext i" \) b5 W) T" k+ }! \* `! d2 P
/ h+ V' i6 f' T9 fFor i = 1 To 300- }6 r3 E- m. g7 U
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
3 G2 P6 r$ q4 R. V [* P! Bmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
, y! i. o+ G) L6 ]- V% dElse" ?! a6 w r& [" y, w
myselect(i).color = 0 '小圆改为白色
, `; J8 `: g+ SEnd If& D. p+ x- G4 x) x- F
Next i& B- }, D" [# N" J" s
2 s& d1 K6 ]; _( z( _3 b; n! h3 HZoomExtents '缩放到显示全部对象
8 t2 R+ t4 _ C7 V7 G$ i/ }
: N7 p+ ?" s+ E; W3 t& O: kEnd Sub5 r) X) ?$ @4 D$ t7 Q! x
. o* y9 k5 ?$ V7 ~/ e& G8 W
5 g6 |2 f. m7 p" H; Rpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
/ Y0 ` A1 }, W6 O这一行实际上应该是三条语句,用三行合并为一行,用冒号分开% h6 K# }# Q3 V4 D- J* \
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数4 F, X1 \% r" @9 Y
' u1 a. C: I. D+ hSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)6 T: f; ^+ W8 F* ]6 S& e
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.* [4 ?8 [+ r. W+ T
% v* \1 j0 K' n3 ]; n# Y2.提标用户在屏幕中选取8 j5 e2 i u d$ J+ C" \3 a
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
$ ~8 m2 R5 N# {, p下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
- l( L; h, h% u$ o! q
% T0 U- f/ K) ^( C! z" lSub mysel()3 ]; W0 B7 _1 a: h! ^
& q$ ]% e, m1 O2 v2 l( ~4 I
Dim sset As AcadSelectionSet '定义选择集对象% i1 X6 K6 z+ @% |8 {2 u) \$ q
Dim element As AcadEntity '定义选择集中的元素对象2 W" \' i/ w4 Z
* S7 P" m* j8 V: p* @6 q9 @& |Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集) c) O' G8 B* B
sset.SelectOnScreen '提示用户选择
F4 F4 k h0 C
; T' G8 c7 _, E; V) u& z8 XFor Each element In sset '在选择集中进行循环7 k/ L" }5 B" N+ } M- Y
element.color = acGreen '改为绿色
1 p8 V2 Y9 f% q3 H) MNext8 M2 L: `1 d, m% O8 t8 }/ R+ |! L
sset.Delete '删除选择集% f8 S4 O* S5 {; j( x
/ W( c8 v, r) _6 B4 s/ ^End Sub
2 ~! G6 L9 Y7 c( _" j
) H3 A+ }' w% q! K/ P3.选择全部对象, p& @; `) Z: o) g- \$ G. m
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
3 {$ A( o9 c% XSub allsel()% v/ {0 G1 h. w) Y7 Q
Dim sel1 As AcadSelectionSet '定义选择集对象
7 ~2 X7 U1 K$ w6 {4 HSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集' E! h5 `% N' R$ D
Call sel1.Select(acSelectionSetAll) '全部选中# s5 ]2 p6 Z; U
sel1.Highlight (True) '显示选择的对象
! L: d+ W- D" @) A; [8 V% Qsco= sel1.Count '计算选择集中的对象数
9 K( M, L2 Q) a# q3 z- Z# LMsgBox "选中对象数:" & CStr(sco) '显示对话框
5 Y' H. K! h" D6 M% p6 j6 A& F( BEnd Sub
; M; n( U, F! w5 h% R c* [+ z+ G7 U
3.运用select方法; [$ `6 G/ ]1 [
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:! p7 [9 j& n/ B7 U; ]! D
1:择全部对象(acselectionsetall)) M0 o2 q# p9 L9 W: I+ e
2.选择上次创建的对象(acselectionsetlast)
! b# H x" P" f0 m2 L3.选择上次选择的对象(acselectionsetprevious). Q0 `. B% c; y2 ~' r3 x! k% x
4.选择矩形窗口内对象(acselectionsetwindow)- n' S( c: K. R; p8 |1 M& Y
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
5 m6 }! G0 j: I. {7 `2 N" D! T还是看代码来学习.其中选择语句是:
6 j+ f+ ^* m b/ J% f. LCall sel1.Select(Mode, p1, p2)
5 | t3 i' z! m* R5 u$ l5 WMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,, B. Z% g. h: N; k& [7 |
Sub selnew()( C. P* D3 ^& G1 Z# s: u
Dim sel1 As AcadSelectionSet '定义选择集对象" ~4 g: o7 O; h) h
Dim p1(0 To 2) As Double '坐标1
' D4 X4 V8 G9 d; R, yDim p2(0 To 2) As Double '坐标25 z: u9 \3 M% K9 ~5 L: u; k R M
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标10 a& |2 I& J+ D+ a# P; u
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
9 j! y% K+ Y7 e/ QMode = 5 '把选择模式存入mode变量中/ x! @9 o, q% {, w& w: S
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集9 Z9 a& y4 M @; A
Call sel1.Select(Mode, p1, p2) '选择对象
- u7 i( f# Y5 m, `! o6 q! bsel1.Highlight (ture) '显示已选中的对象
( _+ ^) t% W; }$ K; m# @End Sub |