Autocad VBA初级教程 (第九课:创建选择集)
0 j, @8 W+ g. F$ V" s( c
/ }9 b$ R" Z7 Z' d, @9 E$ K 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色." ]0 X. E/ }: {/ _* J, K( [
3 C$ y4 d% f8 \2 ^/ I; k& t: G' e& dSub c300(). t) W1 G$ f; ?* F% s$ _) \
1 I9 r- I$ g5 Y/ G5 ]Dim myselect(0 To 300) As AcadEntity '定义选择集数组; D. M1 B) O: x6 a: N" y9 }: J! [
Dim pp(0 To 2) As Double '圆心坐标
9 b8 y, `* }0 |
* U; h5 K+ X% u; Z" ?6 ?. ^For i = 0 To 300 '循环300次
; W; J; a# }, Y8 Ipp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标& b( }" H; U" o- a/ q
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆, R( a/ X4 B# L2 m3 Q
Next i
; K" u: j, N1 y8 X' s" ]# P* p4 W) s4 h% ~
For i = 1 To 300
+ a# e4 Y3 G* G( u0 DIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
7 i7 l( ]6 V( {4 ^; S6 Vmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数% n. v1 Q/ j& P
Else
e7 c+ w6 X& l* R: d5 }& ]- Pmyselect(i).color = 0 '小圆改为白色
' P/ G; p5 m9 K4 B: L9 nEnd If
0 d1 Z% a6 b$ ^7 o/ R0 _. t2 rNext i9 F0 v, n/ h$ M6 y: B
2 L. q1 T/ B5 \. i- c8 Y6 j& AZoomExtents '缩放到显示全部对象
9 N- b& c' N5 A( I- O1 x3 H8 p6 ^; j7 e* M9 C/ }) \- } U% d
End Sub# H0 N$ g( J) W' T
5 D( @7 y( r( z, W' j H6 }2 ^- B0 D, p3 K6 S1 M- ~
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
. i5 J' p, d! s k4 }- \这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
& O% D8 `4 H: R I0 s: u- frnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
, a; J9 M; i% S. J8 E
- |, x1 }; ?/ Q5 ?( bSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)5 _0 Y, Z- _7 j- w
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.0 v% o9 f' D0 R# ]- e! v
8 Z0 Z6 V& c" a1 m: x
2.提标用户在屏幕中选取- d& {8 g }6 n* }) [* X
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
9 R8 y! S- _, k下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除, J2 j {% t* x& _! g; G" ]
. X. }. e8 m* e) Y; n* XSub mysel()
2 @4 A3 O. I! C# g* N
1 v [7 t+ R& {* eDim sset As AcadSelectionSet '定义选择集对象3 |; |$ n! M5 D3 I
Dim element As AcadEntity '定义选择集中的元素对象; q5 g9 U, ^* k6 `( T
- m o8 `) a. E( _7 ~# x0 ]Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集4 B' C5 s# S; \" k' K2 A0 }6 w
sset.SelectOnScreen '提示用户选择. v# C. K6 Z E! p2 r
- J6 z `- N7 o1 T4 x8 \5 [
For Each element In sset '在选择集中进行循环 U$ B% o( O. U0 e' T
element.color = acGreen '改为绿色7 g; r, Q4 R L/ ]
Next
" n( i) U( q# g% csset.Delete '删除选择集" U; T; s; n, R6 Z. ^* a8 Q
/ ~% ~( I: A5 x6 wEnd Sub
/ q! u& j; [1 a& p# r5 t, M( b \7 H+ {" P) y2 c4 k& V
3.选择全部对象
$ J% C" z q9 K. o+ O4 W# V用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.% W; D4 {2 F1 B' g; T% { i
Sub allsel()) V2 h I- V, N8 d: O2 ^4 h7 l, j
Dim sel1 As AcadSelectionSet '定义选择集对象
$ C. {9 U% [' W% f5 F, b3 |8 }3 lSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集3 {8 t; _) K, k2 Z- n* v
Call sel1.Select(acSelectionSetAll) '全部选中
# n% u% L5 w1 r' h8 csel1.Highlight (True) '显示选择的对象
6 J4 `1 B V) |: E' S @, r. v, xsco= sel1.Count '计算选择集中的对象数, g" B8 r: M7 Y0 X8 e8 z7 E0 c
MsgBox "选中对象数:" & CStr(sco) '显示对话框/ \* k. z- l6 z4 h: N+ h+ M) c
End Sub
! R# ^5 S4 R: h' j' c( v9 Q1 Y( ]3 c0 c0 c. p. ?; R; j6 V
3.运用select方法
& o8 {1 @( M) Y2 n j/ G, P上面的例题已经运用了select方法,下面讲一下select的5种选择方式:, n- K `! ~* S' X( T% ]0 I, [
1:择全部对象(acselectionsetall)
2 ~! D( W1 X2 y) L9 d) }7 ]! v2.选择上次创建的对象(acselectionsetlast)
' x3 h! U- @# j, |# H" o3.选择上次选择的对象(acselectionsetprevious)9 k. v( \5 E- H
4.选择矩形窗口内对象(acselectionsetwindow)
! d; r; c* G, d( S5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
& d3 J9 {2 O, p还是看代码来学习.其中选择语句是:
, F3 S# T, ~5 \( ?+ O. tCall sel1.Select(Mode, p1, p2)
/ w8 Y( I5 G( k( `Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
2 v( Y2 g" A9 E& X7 W9 NSub selnew()
% `# N1 z9 R- vDim sel1 As AcadSelectionSet '定义选择集对象
* u: F1 z5 L" @Dim p1(0 To 2) As Double '坐标14 C j; W, Z$ h9 s+ O
Dim p2(0 To 2) As Double '坐标2
" Z3 H& o, I5 d3 g' t( ^p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1. d: J8 {7 L. f5 |( S
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1& o) i3 c" J% h$ z1 e4 z
Mode = 5 '把选择模式存入mode变量中) E6 K6 H( n( D2 t) X! @ z1 ?. I
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集8 e$ h$ D2 Q" J! M+ I* X
Call sel1.Select(Mode, p1, p2) '选择对象' }% H2 [4 L; q9 [9 n! j2 ?, {; k
sel1.Highlight (ture) '显示已选中的对象5 X% `1 u! b5 f
End Sub |