Autocad VBA初级教程 (第九课:创建选择集)
3 M& }1 I# }! p* H1 m, u9 ]: c) I# u! O& {3 r+ F- h7 k% m) k# e
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.- }* c- N3 a/ E6 _
5 e- Z2 k4 `, P2 ?8 ?& V* D. H/ z# N
Sub c300()
3 P) l& s }" n& v% L; l9 h6 Q/ w- }& I# ]2 G
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
1 c; a% k5 Z& R+ h0 C0 PDim pp(0 To 2) As Double '圆心坐标& t6 u( `5 ]- ?9 Z7 j' O
' V* Z2 a/ n6 q+ k$ GFor i = 0 To 300 '循环300次
! T/ z4 i: j9 A) [9 }4 x! q6 a) \ d* ipp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标0 \2 T2 {) O. {2 |8 |( U2 |1 R9 p
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
7 W8 z! n8 L# ^5 N+ s) T9 KNext i2 V' X' ^7 c# s: l
F% o7 b* j8 m' `! V1 H+ rFor i = 1 To 300 ^1 s) j% @9 p+ C5 a6 {
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
! M; S4 p5 C3 \myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数9 X l- |, D! F: X/ w
Else% C& `4 x: f& a5 @
myselect(i).color = 0 '小圆改为白色1 P b5 n# Z2 K' w+ X0 K
End If' @( w3 E# c1 T1 K$ z5 I8 f5 ^* ^
Next i
5 `1 b, ?( J+ s& D$ E7 B5 J, Y/ C% C( _; {! U% {, R
ZoomExtents '缩放到显示全部对象
: j" N8 B3 A4 ]+ c, K6 y" d' t; k
# C; g4 \8 F& T# [& Q$ zEnd Sub
) m7 o* O$ v K6 ~ V4 \* W
* p! P+ r$ P% f0 b
2 u6 `- O! J6 J* S% }% hpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
W7 I" n/ K t$ i这一行实际上应该是三条语句,用三行合并为一行,用冒号分开. _! y8 r4 \- [9 Q2 u9 o
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数% `5 k# Y6 ~. ]8 A
, L6 z, ?2 B; O* N+ [1 K: XSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)+ a; O9 o: u% y: X* j
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.8 Y) U$ h4 i% ]5 @
( O% O& R& q6 ]' a- O
2.提标用户在屏幕中选取" H2 [ @' b* V* e0 `7 g5 Q/ Q
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
; t& l) P* L% g$ Z+ `! H/ B# w' q下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
' f+ `3 ?) L" B# @- @
% `! g( l0 S) X: L! h& j' eSub mysel()
" _2 L8 g. I9 _3 I& a3 {( S1 p) I( F3 v( }5 r
Dim sset As AcadSelectionSet '定义选择集对象
2 q8 Z5 Z$ d. W1 P0 D9 S p* SDim element As AcadEntity '定义选择集中的元素对象
$ u: O) k$ {1 i+ o u2 i) u0 B: V
' \$ Y% M! d# @5 u, k8 JSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
: s, e: p; @1 v3 u. ssset.SelectOnScreen '提示用户选择
# s# z0 o( t8 l* h& D* R3 G3 t
' M+ \3 N' Y* D D. k* Z2 H% UFor Each element In sset '在选择集中进行循环
. ^5 {3 F9 M) ?! D& g6 T! kelement.color = acGreen '改为绿色
' u! a2 o& N4 O& J. Y- m* } JNext
" i( h# z3 G/ |' |) B# p& D; ~) vsset.Delete '删除选择集' {) j' ]5 g& C1 }
! j: K# d+ R, [2 `
End Sub
& g- Y9 g$ f! k6 V! e2 l- P. t7 Q3 k6 |% w" x# o" P
3.选择全部对象$ Z/ X$ u! R+ T- k( W4 W# a
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
0 t1 m- m4 F/ V' B+ j' r$ }( iSub allsel()
! A) M% V. v9 `Dim sel1 As AcadSelectionSet '定义选择集对象6 n5 S+ i; H- u3 s1 F
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集% {& n0 v; L. W6 B! m
Call sel1.Select(acSelectionSetAll) '全部选中1 g) M6 v/ [% v1 R8 M9 Z. b) ^
sel1.Highlight (True) '显示选择的对象
8 I- F, d1 P+ e4 P, {& A r" ksco= sel1.Count '计算选择集中的对象数! Q5 ^/ i, W, g6 ]: s) |
MsgBox "选中对象数:" & CStr(sco) '显示对话框( [" z9 R) J" J% A: }8 l
End Sub) h6 z( P/ l0 }! I5 P' U
3 e M& c1 j/ X6 i1 M3 G) q
3.运用select方法 z% S" x; q/ P" d
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:. I; N1 C4 P3 `% l4 L `8 p% g& S
1:择全部对象(acselectionsetall)! Q# \* o) k' [
2.选择上次创建的对象(acselectionsetlast)) K, ]" [ V: {& U
3.选择上次选择的对象(acselectionsetprevious)
8 w6 Q% h! g' h" o% u/ _4.选择矩形窗口内对象(acselectionsetwindow): w" ^9 R( G4 q
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
( s9 c4 [* y, X' l6 c还是看代码来学习.其中选择语句是:. t9 j# \: q" O K2 _" r3 U) U5 F
Call sel1.Select(Mode, p1, p2)
+ c$ w: \. X3 Q* I) NMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
: b- q0 X: A9 v1 P+ D3 `, ?Sub selnew(), x! \' w3 Q2 l! H/ K
Dim sel1 As AcadSelectionSet '定义选择集对象
2 j c% R0 \2 h9 [% _Dim p1(0 To 2) As Double '坐标15 y9 Z# V* @. E: y' I L
Dim p2(0 To 2) As Double '坐标2. k* q) l, V$ l2 y3 L8 \& f
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1 a/ z1 Q4 K% i% X2 b
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
2 H G% a7 x- o/ }' ]Mode = 5 '把选择模式存入mode变量中$ C* ^4 ~6 F" a8 S' f* L
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
1 r( q- m# j4 ?6 _( nCall sel1.Select(Mode, p1, p2) '选择对象
2 V" L+ W" W# a! ^sel1.Highlight (ture) '显示已选中的对象* W1 h0 z& `5 k% k1 ?; ^$ S
End Sub |