Autocad VBA初级教程 (第九课:创建选择集) 9 E2 T9 j. X- {" N
, z6 @6 l, h: m! Z9 l
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.- @$ F8 C* I. {) y( K
5 t* |/ [' r# n9 }3 S
Sub c300()
: W7 [, d- S& a% t* D0 ^
k% E' U; V& J9 hDim myselect(0 To 300) As AcadEntity '定义选择集数组
4 n3 n5 |8 m$ P. I6 dDim pp(0 To 2) As Double '圆心坐标
1 D: X2 k9 Q) V: W9 C0 b7 I Y- ?- i) O( f0 b
For i = 0 To 300 '循环300次, `* D, v* q% d5 Y o! z7 }; o
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
; E. F! v; b- K7 _/ h1 aSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆% T4 ^9 Y. k# R6 p4 g
Next i( E" ], \% R5 R( K! |
4 o% e3 V% u0 r0 C& @1 g2 OFor i = 1 To 300
0 F4 {2 A! X' m/ D" VIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
7 {: e* [( ?- E- {/ @. h% ?& ]myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数' ]+ |, z, P6 C
Else5 r; N$ v0 ]+ G. W; n! c r
myselect(i).color = 0 '小圆改为白色3 G* F3 Q3 _ G, _7 z
End If
K2 c* |+ v9 s, d* J) D8 Q/ x7 sNext i% u3 M' l$ e: {1 u# _9 K% }
( E8 k/ } e. S1 v7 `ZoomExtents '缩放到显示全部对象1 k. p+ l A4 n3 `1 b! ]( q
6 i; I1 S/ \2 ?3 L4 HEnd Sub# x$ v0 K8 h: c
1 |8 l0 T% C5 `8 @
8 q5 }) o2 ?# |# e
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
0 ?% i( w8 {$ o# _这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
1 R4 G& P, [4 @- Grnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数* c& J. O4 Q1 s- N Q3 z6 v
) t* ^; J3 v; v2 w6 i# `2 CSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)2 [$ O* }6 ?5 m. E
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.. N6 @7 o9 _" Y: H! e
5 f& @* g! i& x w5 ?4 O( S
2.提标用户在屏幕中选取# t4 q9 [+ {: @& y/ f9 J
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.0 o9 d: |) B2 S: J
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
4 v* c; K1 c9 v6 i1 U! `4 H' d+ x+ P9 f$ t: H( S8 P
Sub mysel()
/ Z5 P+ R& p$ p2 y% j, r
7 `' T4 B. l) S; l; S$ S* ~Dim sset As AcadSelectionSet '定义选择集对象
) v# I" N6 h" e3 E$ [, F" g9 C. Q. S' ADim element As AcadEntity '定义选择集中的元素对象1 x% T: S, z+ x, s, H
( h. D3 _5 F0 v0 R; `
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
, G; m6 I3 F, o/ l/ y% U7 n0 vsset.SelectOnScreen '提示用户选择
" ?) O! |0 _$ H% [8 ?: k& z4 t- a7 ]- a) @7 @3 p. e; Z. ]1 Y# M
For Each element In sset '在选择集中进行循环5 d# X' J/ A! d0 V' u6 q# [; V' T
element.color = acGreen '改为绿色
% g+ e. o- `7 N( z6 ~Next; H9 S. V9 m2 W4 v1 o0 u; [, {
sset.Delete '删除选择集
' U3 R8 f+ T F, H
" J+ u; x+ R! W* Y; Q& g( L0 T- z' OEnd Sub
+ d) i# {; U! Z1 C
& v( a: v' J" N" m! p3.选择全部对象9 {0 r' x' A/ y. e* X7 }) q
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
* t5 _) Q7 l1 G, T- Y. iSub allsel()2 n2 G" l8 E% w- A1 U$ k
Dim sel1 As AcadSelectionSet '定义选择集对象
0 t0 L. f! L. ]$ ?' _* vSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集) O+ N, V R: t# I) n* q
Call sel1.Select(acSelectionSetAll) '全部选中
# J* @/ ^" s" U+ s! q& K3 ]# Asel1.Highlight (True) '显示选择的对象
. Y3 C6 @' X6 d @) x$ X1 d- Xsco= sel1.Count '计算选择集中的对象数
$ K% B0 i0 `8 k+ V+ t% o+ EMsgBox "选中对象数:" & CStr(sco) '显示对话框8 M1 v/ w- G0 {6 n
End Sub
1 S1 Z2 H1 M" A5 e/ V2 w% d
9 b( j2 m, `% Y8 n3.运用select方法
% ^8 c2 w; \. x1 [# e上面的例题已经运用了select方法,下面讲一下select的5种选择方式:( n+ f! g [6 E. {1 _2 O, z8 T) g
1:择全部对象(acselectionsetall)8 Q9 N$ M7 H3 i
2.选择上次创建的对象(acselectionsetlast)- r4 P) b2 V. F; K1 X4 o# i
3.选择上次选择的对象(acselectionsetprevious)
, I( a) U' H4 a! `6 y9 `/ E1 X4.选择矩形窗口内对象(acselectionsetwindow)
& u6 O1 }( T6 |! y5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)7 {9 H$ {4 q! } @! J6 v7 X# C
还是看代码来学习.其中选择语句是:$ d* _2 o4 H" {4 f+ f3 r/ ^' k
Call sel1.Select(Mode, p1, p2)/ U# j9 O P9 E5 J0 }$ S) Q
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
. N; `1 v1 `" g1 y% CSub selnew()
1 E0 `! X1 B( oDim sel1 As AcadSelectionSet '定义选择集对象
' ~( o4 B/ M- d/ }; [/ j0 yDim p1(0 To 2) As Double '坐标15 n% e+ S0 ?: M
Dim p2(0 To 2) As Double '坐标2
. J. V: V2 A5 F: }2 Qp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
2 t$ o: | N! K& j6 R" T7 T1 ip2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1: s6 b! A+ R+ D- x F
Mode = 5 '把选择模式存入mode变量中
5 }! M& O* C1 D WSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集5 `4 A2 q) k1 W; R1 q z
Call sel1.Select(Mode, p1, p2) '选择对象
9 W( o: r( E: \' ]+ I" `sel1.Highlight (ture) '显示已选中的对象9 F) t0 A9 i0 H# Q
End Sub |