Autocad VBA初级教程 (第九课:创建选择集) 7 S# B9 [! G# B' Z* u
# t3 k3 A {; ]2 D$ Y
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
. Y5 Y- A* e3 v; p/ Y( O, I% {: S. g( ~0 ?0 K; C ]
Sub c300()
6 X! ]- o8 D! q. ?- G2 C* P, {2 `
Dim myselect(0 To 300) As AcadEntity '定义选择集数组: L ?7 E7 `" t1 A% c; O- @
Dim pp(0 To 2) As Double '圆心坐标( S. _0 \; _+ `; f! q( `6 N* z! ]
* c% G+ n x5 R. GFor i = 0 To 300 '循环300次
" b2 b; u8 c4 _# D0 K4 P$ }pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
( Y' m! i) L* H" O2 U0 p( m: \/ I9 H# OSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆. T8 k1 _( i; [5 n0 J
Next i
3 z, W0 [/ D, t3 j9 w4 d7 X- X2 {' w X: o
For i = 1 To 300# Y( | Q) D- m# k4 N, I
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10 V: h% \. W( r" V" I& T
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
5 T y" h1 s" P0 B- f8 M6 k4 EElse
9 M8 T V6 r8 H# y j6 Jmyselect(i).color = 0 '小圆改为白色- y+ A8 c& F( D* T1 t
End If
/ ^8 f3 b# l! Z, o5 H$ n4 n1 GNext i
) M1 F/ O" w# q3 e# `. R4 t- z
3 C; I/ a( L7 {1 l) pZoomExtents '缩放到显示全部对象
$ n! V& K) L6 d' N1 ~7 q' q+ `& W+ k y7 c8 D% p: q
End Sub
; z2 }, y9 m7 a" K9 a* x1 c- N4 }* Y
, P; A8 C, ?; n% {' Y9 ^$ [+ R" K f8 f* p r' ]4 q' o5 _% V+ O' ~1 e& V& D( B
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
. F7 ~# p+ O& Q# N( y) y0 J这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
/ i* l. @+ _' ~2 M5 crnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
+ W. K# p5 G( ?1 i8 o* y& M/ E
5 q% J' J7 D/ d ?! @1 v1 {; K% mSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)% P% L, `* q% {. }& y* F( Q3 ?
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.) W$ |7 |$ Z3 m% I/ t9 X
0 p$ D4 |, R: P# m& k5 r2.提标用户在屏幕中选取
! _' Y5 N% ?- P. o1 {选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.% F% a! v# S' E ]' Y
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
6 O6 S! c' D3 m4 J: W( x( |
( K# {: D' X) n4 V# }& o3 X( `' PSub mysel()! _7 a# e8 t; Q7 O
( R$ d0 }7 o1 [: iDim sset As AcadSelectionSet '定义选择集对象' `6 R' D: b5 ^$ ]2 Z, C6 F3 E
Dim element As AcadEntity '定义选择集中的元素对象 w9 |4 @2 g3 ?9 l4 I
8 z( \# S) k6 F# Z4 R
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
& X; V# e; o+ H( T3 Z. D9 {! \0 |sset.SelectOnScreen '提示用户选择$ \" y, F( L" L6 p( Y! \; M3 i" F
" F. n2 {; f/ x% A' h: x3 M3 y4 xFor Each element In sset '在选择集中进行循环
& g0 I( l" V4 N, zelement.color = acGreen '改为绿色
0 B; y u/ W* F9 ?Next4 Z3 B$ h# `( f4 y1 J7 b6 D
sset.Delete '删除选择集6 s5 H: P6 x8 ?( R+ Q. C7 Z
5 o2 {* M6 z& o8 w7 e. B$ \End Sub
$ s* d# _+ g. @9 k( }% x- G: ?0 R- I: m' |
3.选择全部对象
1 f' {* @1 n+ w5 W" d+ l用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
9 ^5 d; ?- m* a$ R9 ]Sub allsel()6 _8 G3 e6 m6 g+ }# n7 f* Y4 d# _- [
Dim sel1 As AcadSelectionSet '定义选择集对象
& \, u$ i$ k0 u. j) X! X1 uSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
9 g- h4 G' u5 }% X2 T7 ~$ ^5 i5 xCall sel1.Select(acSelectionSetAll) '全部选中
& T G! ^- w& f. _+ [* P/ E; msel1.Highlight (True) '显示选择的对象
; c" a( \9 l' T9 l# d% Asco= sel1.Count '计算选择集中的对象数
- t3 `: u8 n+ kMsgBox "选中对象数:" & CStr(sco) '显示对话框9 G/ y8 X. J3 d' j& l
End Sub6 O" g8 U- z! _4 p% A
3 k7 b) b, w: d8 p7 K! P. k3.运用select方法
: q; E& m/ Z9 o( ~# ~0 R) b2 O上面的例题已经运用了select方法,下面讲一下select的5种选择方式:5 N. B G5 g* R$ N$ j8 |/ y
1:择全部对象(acselectionsetall)
7 @0 |' C9 s1 ]/ c# K5 W2.选择上次创建的对象(acselectionsetlast)2 F! _, O' R* z. e* m+ j! \# D
3.选择上次选择的对象(acselectionsetprevious)
, `' M7 v6 }& G/ [4.选择矩形窗口内对象(acselectionsetwindow)
2 {* E! N+ J- ~ E5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)2 s6 s6 r. @3 m1 R& p
还是看代码来学习.其中选择语句是:8 F- I3 t" G* F: f5 f
Call sel1.Select(Mode, p1, p2)5 w, P8 K8 _& _3 ^
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
6 u' s1 y" `: J2 F6 vSub selnew() L* H# R+ Q* j8 ]* |
Dim sel1 As AcadSelectionSet '定义选择集对象, q/ Z e) D8 g; E8 B/ ~
Dim p1(0 To 2) As Double '坐标16 z E, f' k- M$ Q( Y- W& C1 Q- V
Dim p2(0 To 2) As Double '坐标2
9 L, @7 M+ | ^" b k* a9 `/ f `p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标13 B5 |1 \0 @6 h: J6 c
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
6 h; e% b$ v# I0 `5 p& iMode = 5 '把选择模式存入mode变量中" `! r) X& x& C7 H
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
3 S; ~7 Q K' cCall sel1.Select(Mode, p1, p2) '选择对象
* g4 m& `0 S6 X3 Dsel1.Highlight (ture) '显示已选中的对象
- T( P( a! r8 Y# n1 h G2 xEnd Sub |