Autocad VBA初级教程 (第九课:创建选择集) 2 _1 I9 q3 i5 m; [% r+ |
7 K, l" Y0 A2 i) y A7 m
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
# |: l, O5 I# ], u/ j8 ?
( a& Z4 H" Q6 kSub c300()
) Q5 ~% ?; N% _3 n& I. ~6 U& ^5 w! i6 A5 z3 I7 b/ ~
Dim myselect(0 To 300) As AcadEntity '定义选择集数组: i! V+ D7 R4 G
Dim pp(0 To 2) As Double '圆心坐标
I1 _; q7 q. O9 f1 [
6 }& P: L* W" j. u) n' b, bFor i = 0 To 300 '循环300次
: m4 z2 {) _' R' T" C; fpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
" F4 y d# v# {Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆 z* e' q# z3 E: ^
Next i& j) R3 x4 h% n6 c$ K0 H; ?
1 P$ L) Q0 N* n4 c+ y& n! ^) g
For i = 1 To 300
) V1 i. D9 k) X. _. ?If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
. [. d$ g4 {% O. i2 tmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数( x! q5 I9 p% ]5 u
Else! O6 U( B0 @% m7 V5 Z( f* w: a
myselect(i).color = 0 '小圆改为白色" } S3 Z, V/ M' d( I4 A4 Q
End If% p& a0 p4 G) }" L
Next i7 _9 D' R) i& F
4 K z5 q/ c Z2 O9 p8 ^- bZoomExtents '缩放到显示全部对象" G0 s1 X2 ?, M$ t
4 a6 C+ _+ Z; V1 o# t0 E3 k; J: K: F
End Sub
}: _: [+ f; t% Q4 ^8 A# z! u4 D0 D
: L; F+ a: F7 j- h
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0; Z3 ~! E2 r/ Q( m, X/ i% E" z
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开0 d. j }" c0 o( S( e
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数 q: a" B. a; p, d. U! v+ l8 B$ t) S
" L+ s7 ~ p: u% u
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)* j+ }) l `: u- \1 [; x
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
* q5 q5 N( K7 x3 R* n1 i0 I* z9 ]9 b. S# U
2.提标用户在屏幕中选取
$ a, H5 ` L7 B9 c: x: D$ b- u选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
+ V" u2 O9 j6 M) W3 @/ V" z; F- b下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除 _* N9 x9 K3 b4 ^
9 ^. j4 z# v- T2 H# USub mysel()# O8 y5 S Z. b: ^( c
5 r z: |/ X' `; O' t
Dim sset As AcadSelectionSet '定义选择集对象
8 m7 P' ?" W7 I: V; F$ YDim element As AcadEntity '定义选择集中的元素对象
* ]) H; ~' I8 W ^! c
, q+ \ m0 ^1 Y; u; r- |Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
& Y3 Q; q4 E6 h% n9 h: i& usset.SelectOnScreen '提示用户选择2 ~8 |" S# x2 _. x4 ~
7 p; T9 A+ \7 h" D( G4 [For Each element In sset '在选择集中进行循环# d& J" h9 Y! V( a8 H
element.color = acGreen '改为绿色* f( j/ s" Z. x* Z3 J
Next9 X' d; A0 p. c8 _( g3 h
sset.Delete '删除选择集
# R6 x& t8 P7 m: |6 W- V
4 |8 \" n0 r! }6 g; ]End Sub! \6 o) f( Q2 a( f
; ]: N$ `2 A5 H: t( x
3.选择全部对象4 P- S# F& I0 t+ j
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.. k7 r6 }: o5 k3 F
Sub allsel()
# @# j0 o: K: w; ^" N. CDim sel1 As AcadSelectionSet '定义选择集对象9 J8 u2 u0 ?7 f
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
% ~5 \3 s. H2 O4 F; SCall sel1.Select(acSelectionSetAll) '全部选中
9 J; t3 D2 w; _sel1.Highlight (True) '显示选择的对象
- H: S% ^, P& M/ x5 dsco= sel1.Count '计算选择集中的对象数
1 q6 {& n* b- a6 p5 y- cMsgBox "选中对象数:" & CStr(sco) '显示对话框 O7 E @/ G* `, `- a1 L
End Sub
& n L" V7 ]1 F# \4 r1 E) B
" q& Y+ B$ M- ]; H6 M) d* T3.运用select方法8 G5 J. G+ D* ?7 I# o; C8 M/ q! o
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:% R! K& E( a/ }2 R G# t) f
1:择全部对象(acselectionsetall)* v% P a3 }2 n: u8 q
2.选择上次创建的对象(acselectionsetlast)/ N/ G0 I1 O N6 O* x' V+ ?0 T
3.选择上次选择的对象(acselectionsetprevious)
7 `$ O# j5 }) R8 N6 B- B* i4.选择矩形窗口内对象(acselectionsetwindow)- [( a7 C4 w0 l+ R
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
& P! A4 O. u% d, d2 ]6 o还是看代码来学习.其中选择语句是:7 }3 O1 o$ e$ R/ C; [) P
Call sel1.Select(Mode, p1, p2)
% |+ F2 \+ `7 R! ^: m/ LMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
5 M! x) v' Q& }( t$ ^! hSub selnew()
5 Q' a2 H* S5 vDim sel1 As AcadSelectionSet '定义选择集对象4 e2 i% O2 F6 s6 x# w( j1 \3 e$ Z
Dim p1(0 To 2) As Double '坐标17 S. v* v( O6 l% p$ G( F$ s) U9 z5 x# z
Dim p2(0 To 2) As Double '坐标2
3 \# A& y& f8 ?8 T ]p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标16 j. w0 c2 ^- _' ?+ |3 M: G% |6 }
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
9 e4 r& v8 c v' {) n# f% UMode = 5 '把选择模式存入mode变量中
# X& i9 a* y! g1 q, LSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
/ c% Z7 D6 y' |Call sel1.Select(Mode, p1, p2) '选择对象
, [' C5 H' {, hsel1.Highlight (ture) '显示已选中的对象
: G4 u E# j i; M0 m* R+ x1 MEnd Sub |