Autocad VBA初级教程 (第九课:创建选择集) / ~: `0 \9 h: H0 v
9 `& s F, x+ \
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
; }+ D1 }0 v! |, G
, }1 [2 W3 \# M' F! i8 @Sub c300(): Z! j9 Y! b& j) U, ?' B$ F
+ G0 t7 n# N* q! KDim myselect(0 To 300) As AcadEntity '定义选择集数组
$ F/ G0 v* c% NDim pp(0 To 2) As Double '圆心坐标 E: n4 u% S ~ H# t
( S" n' [9 k X& Z- PFor i = 0 To 300 '循环300次
e2 ~$ N" i* Y/ r) |" h- @" ~% xpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标! k1 `+ a4 s6 u+ D- u5 v: o
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆1 ^& m8 G1 ]" s8 l# K J) g
Next i
5 B5 q( j A# K! m5 ~. {
2 S" C, I$ k' E0 c3 b- nFor i = 1 To 300
; b3 h9 h3 q# HIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10) z) J) U( \" j
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
& {* Z# n$ X) D( O/ zElse, R: g7 {! P! k B% i: M7 I
myselect(i).color = 0 '小圆改为白色
# a$ ?9 d% `4 ]5 q6 mEnd If
( p P7 t1 I3 k1 eNext i! ]6 V y. H& q- K) r2 L
+ ~. W; G! q6 f0 f3 }& H# K0 R
ZoomExtents '缩放到显示全部对象
& R9 E6 A% P5 Z3 l+ P+ r8 U
3 w0 O. T# f, X8 f5 e& u9 |End Sub
. @; u0 _ W/ k( q8 C0 b1 \
& _3 \- ^6 u) n1 C4 W8 C3 \9 Z
1 y4 Y8 B0 d& A7 ^* z, ?pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
: W1 ^) u( H) k* c1 r( P这一行实际上应该是三条语句,用三行合并为一行,用冒号分开4 y% g6 |* O$ Z9 x7 G' L; {; R ^. {
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
( Y9 t+ Z0 A3 \* F7 m1 r/ B3 o8 l$ I; u
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
4 Y' J" j; R1 r3 Z3 J! k! a这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
+ K* l* i8 q- v7 i- K g C( b/ N, P4 L2 q: p3 x4 y
2.提标用户在屏幕中选取! \. ?. G% A | E( x8 q2 y; h
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.0 |* a7 q+ b/ h4 Q* H6 d% ]9 k% E- T
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除7 @4 _% u8 R3 M) N0 f- O
( `# j9 O5 \2 j9 r! j
Sub mysel()
- |8 A; D3 v) I/ K$ i6 W
5 ]1 @" b, t' t* TDim sset As AcadSelectionSet '定义选择集对象7 G( `9 l7 Q L1 V+ _ }& W6 f
Dim element As AcadEntity '定义选择集中的元素对象8 E- S( m Z w3 c
: y$ a# C$ U2 x: JSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集 l4 k! y4 A- W3 L
sset.SelectOnScreen '提示用户选择6 i" s+ \, o1 x0 U# h
b3 ~0 m: k9 ]4 H5 tFor Each element In sset '在选择集中进行循环
+ q1 n! \: v; W' F( D& @4 d* Q/ ^5 kelement.color = acGreen '改为绿色
2 w: D7 u/ p6 w. U8 I8 ^9 {) F$ i0 [Next
& q1 a8 Z2 h5 b: H% n# }5 Bsset.Delete '删除选择集, R7 y3 f1 X! s% I9 O/ Y
4 `: `- U. V B# @4 i$ S, v
End Sub
# n; ]: d. m5 |& o( ~! A6 Y
2 U) I7 U$ h1 G" ]3.选择全部对象
* n" \* V7 A0 ]5 h" z. L用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
( u8 c0 s9 {6 a3 X( Z/ H' {( fSub allsel(): b; V" P. d, N
Dim sel1 As AcadSelectionSet '定义选择集对象
* N5 U" V; [6 h1 b3 K& XSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集) z1 m/ T' M1 \9 D
Call sel1.Select(acSelectionSetAll) '全部选中
2 K% ]/ U* ? C% M5 B3 osel1.Highlight (True) '显示选择的对象( n& v+ Z# ~' B3 A6 _
sco= sel1.Count '计算选择集中的对象数! n e/ t2 F1 o; `( T6 p
MsgBox "选中对象数:" & CStr(sco) '显示对话框: v% L' j8 T- X8 w7 k
End Sub Y6 |4 I) Q! b- n5 {/ Z% B
' P" P1 n/ I* ?* v' N" L$ Y
3.运用select方法2 n/ z I! M& ~# q# I- u$ ], n
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
# Y; v% w b) v8 D" U( J$ ]' P1:择全部对象(acselectionsetall)0 G: f4 z) J* g) I% r
2.选择上次创建的对象(acselectionsetlast)
# l$ k* P% U, c# j% B3.选择上次选择的对象(acselectionsetprevious)
+ E% X" {% r X# h; a4.选择矩形窗口内对象(acselectionsetwindow)& j7 ~6 K7 H. B& U2 t; r
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
1 u$ ^4 Q8 t' k还是看代码来学习.其中选择语句是:
% F2 {5 J ~6 Q9 w3 T9 zCall sel1.Select(Mode, p1, p2)
F1 O4 [. C! }: U h E- \) M# ]* p# E6 VMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
3 _+ O# @3 u6 Y6 f: Y$ vSub selnew()
; c8 n$ O. }* O' ~Dim sel1 As AcadSelectionSet '定义选择集对象, N/ c1 r2 L7 f: m6 b# E% R
Dim p1(0 To 2) As Double '坐标1
8 Y) q* I1 y0 a& BDim p2(0 To 2) As Double '坐标2
6 ~! \( t* o% I- I7 {2 tp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1' @1 v; C/ Z" Q
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1: S3 R. h# y) @2 l, M$ ^* e+ s1 }: E2 D
Mode = 5 '把选择模式存入mode变量中3 v/ u0 Z m1 f% E3 J
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
1 t3 W+ Z7 h1 Z. K9 G! J5 bCall sel1.Select(Mode, p1, p2) '选择对象) K8 T! o5 b* u4 E
sel1.Highlight (ture) '显示已选中的对象
" ^( l" N8 ]. E! ~End Sub |