Autocad VBA初级教程 (第九课:创建选择集) 6 k* o/ l: E" k- R* ^% |
' V; Z- k. }3 h& ~8 M5 Z% r
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.6 R' t& J3 g u1 ?" _; e G4 f
' ^# }; Y* Z! {' d8 v' O' d
Sub c300()
# J( u( m( j. a
4 J8 Z9 |4 _, ^1 ~Dim myselect(0 To 300) As AcadEntity '定义选择集数组
3 d8 |: j& d. ?Dim pp(0 To 2) As Double '圆心坐标* [, n6 y4 v9 E# S
. ^6 c$ @* @. O8 W- p
For i = 0 To 300 '循环300次
$ S5 S; T+ @( f/ D9 J& A8 kpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标/ ?4 O9 p1 Z! z0 {7 j0 I) q
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆. y( x* p/ d4 H- C1 o
Next i- f2 B" j! }. f# G1 z2 h; V
9 m3 M" g; g# yFor i = 1 To 300
/ V- B0 m ]. W2 g0 FIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
5 c! k6 _1 Y. I% E" S. }myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
# r& X; e" P" o" T7 sElse$ k; X7 B% W/ Z9 P" S! G+ [, {
myselect(i).color = 0 '小圆改为白色9 n4 O# V: d# Z7 O
End If
3 u) v# ~6 [# R: d! Q0 kNext i
/ G) o3 h& }( l! z0 X
8 A# X% u* d- \ R) w3 A( i2 H1 |ZoomExtents '缩放到显示全部对象: X: m8 b* }8 Y5 V3 r+ H* \
+ N4 {: A9 q- e/ I0 k$ v; x5 xEnd Sub
8 g! g5 }7 P) l4 S4 t
, F! X; Q5 q. I. B
" ~$ V* B& ?: U* {; D% Cpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0% K; i7 {' W& Q- {
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开$ U8 S- t2 e! q4 j0 E' r# S- u* c
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
9 o) b) T' O* z- J, A. x$ I: `- q$ [, A
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
8 F. v1 j+ T- P8 @5 l# Z, x8 g) w这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.5 U' S* Q. x7 G! q
& k8 Z' X" _, d/ J3 l2 h r
2.提标用户在屏幕中选取% X- |' ?# j# |% i5 e
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.8 A, V* \! h1 H K
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除+ ?- x7 a& h' r4 @# s
6 d" v8 w' a# @Sub mysel()
5 t. C K& G; \0 a ]
4 N$ i2 W8 N9 @9 BDim sset As AcadSelectionSet '定义选择集对象
4 P5 O6 g, t1 G% P3 P2 p/ \% X; ^Dim element As AcadEntity '定义选择集中的元素对象
! B. K+ c, s$ t! _! L
) t; \8 r+ U7 Z' p G$ P) t& _1 xSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
, W2 L% t' J) O/ N$ ssset.SelectOnScreen '提示用户选择
# z( P; R4 B( v3 J
, r' g' l5 u+ H4 {For Each element In sset '在选择集中进行循环
7 M2 }4 Q# K! x+ X) M1 velement.color = acGreen '改为绿色
* m- m; a. z/ ^$ iNext
! O6 l2 S5 F8 I ^" S+ x+ i: L* s% jsset.Delete '删除选择集
& [3 B2 e/ }/ X5 s
( O3 Q( Z# l* q; S0 Y. x4 f* sEnd Sub
$ d/ v9 Z4 ~6 d T& ~! `/ L0 p
0 j' J' I* r3 M0 N; V( D' c3.选择全部对象
+ g, s% p# A- \用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数., c' q4 f4 T! Q% z
Sub allsel()
7 V# M. a& v8 {( A; [Dim sel1 As AcadSelectionSet '定义选择集对象. R9 [, ? Z9 ~
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集7 t' D& G3 x+ e9 ^! U
Call sel1.Select(acSelectionSetAll) '全部选中) Z) y, ]. r" Y" u
sel1.Highlight (True) '显示选择的对象8 q; k$ |2 ] U6 u* ~" ~
sco= sel1.Count '计算选择集中的对象数+ I- `/ ` A7 r
MsgBox "选中对象数:" & CStr(sco) '显示对话框
3 J! V7 q( p# L' i2 I3 ^% N8 MEnd Sub
' L9 L2 c1 K* Y: S& i6 `. v7 |# E7 _- F
3.运用select方法% g. [6 } c6 B" o/ Q( v1 D) k) p
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
: F$ ?- Y4 x! ]7 G: X2 r1:择全部对象(acselectionsetall)7 B5 |3 _3 Z6 Y7 c% _
2.选择上次创建的对象(acselectionsetlast)
; [. k: r5 A t3 C. o4 o3.选择上次选择的对象(acselectionsetprevious)
2 Y0 W+ D2 ]: u) e5 W4.选择矩形窗口内对象(acselectionsetwindow)
/ P' W$ n* m @2 c6 {5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)& [8 ]" s/ w/ W& `" P
还是看代码来学习.其中选择语句是:
! W. f/ E" ~" @2 MCall sel1.Select(Mode, p1, p2)4 c a* E4 @0 C/ y8 t" u* G
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
; g$ Y. D/ l) k2 ^( @' ISub selnew()& N! A% ]4 v9 _8 T- D1 x R' ], ?7 e
Dim sel1 As AcadSelectionSet '定义选择集对象 \/ X! G3 Z; r
Dim p1(0 To 2) As Double '坐标1
0 ?4 G- x/ E( e+ nDim p2(0 To 2) As Double '坐标24 E7 e1 n% J. w
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标12 \6 F, E) A$ i5 `; `5 L0 v9 F
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1- r; O5 {: C1 |! K0 T$ ^
Mode = 5 '把选择模式存入mode变量中2 @+ N, P$ h0 n/ {" A1 g' K
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集6 |9 n8 h$ G. a( W
Call sel1.Select(Mode, p1, p2) '选择对象
3 x& \) M9 ~4 j7 d7 W* i1 {0 ysel1.Highlight (ture) '显示已选中的对象
$ i5 H7 q$ f9 M& t' L0 z" \2 n1 JEnd Sub |