Autocad VBA初级教程 (第九课:创建选择集) ' b [. A4 X) M; r. q, r
( Y) Y+ @! n8 G& F0 m
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
* d, U/ e/ e( Y: C# p2 e3 c5 C, ^& s7 k& Z1 d2 F
Sub c300()
) {1 K9 p9 N7 e4 [" Q1 L" _% | U: C8 L: B0 e% M
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
7 `8 ~) ?8 g/ H4 I) t6 [! ~; Q. VDim pp(0 To 2) As Double '圆心坐标. X; g. V/ x1 E. p. L3 L
: ~" Z6 S- j* g5 \3 Y; FFor i = 0 To 300 '循环300次
- f/ `6 y! j$ t' z) a& Mpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标" R% M- I' \6 R0 ~$ C1 F5 J% l
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆' B/ @: ?: |( e3 ]) t
Next i
1 p) s( E T1 @6 }8 n! }: S2 i& Y j. Y1 d' l" X
For i = 1 To 3000 [3 O! {0 T: b' k" ^1 i S$ n! u3 C
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
3 n* n3 G1 K. r0 E% _myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
1 K0 S$ X: {+ }/ V# y4 h0 sElse* m6 R9 ~: q c `5 o
myselect(i).color = 0 '小圆改为白色
$ G9 V0 y. T, ` N. `End If+ L7 `0 T/ W$ k5 f3 c: n, H u
Next i5 G2 \# B+ t4 g9 R- Y- @+ N
/ l* n# m, P3 P) c j5 R) A- H
ZoomExtents '缩放到显示全部对象
* Y X9 Z$ [! G' q" `/ y0 h9 c/ e! O6 r+ Y- w6 X
End Sub: A( A: o6 R L) j6 }
$ u8 ^$ I+ z0 \2 Z& e7 M
[, m+ o' u$ z1 k4 b) Kpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
9 U$ W/ m5 j2 X' p+ \" l& A5 ^- n这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
. D0 [+ ]9 W* I$ Y, S2 {rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数' A) L s) s ^" I
- _, P* u5 ^7 L
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
) W1 f# E" ?4 v+ n这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.4 { k- J% |4 H" ~
" B$ t o0 d) ^9 k9 I. k2.提标用户在屏幕中选取
; o1 K! z" I6 }选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了. p. d% R3 C F' b- t
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
" }/ x* _9 ]7 N. @+ y' X( j$ a# Y1 A9 F7 q
Sub mysel()
% V" u4 x n1 f# r8 \2 ~' E+ z6 P9 [: g* B! ?% O
Dim sset As AcadSelectionSet '定义选择集对象
3 R5 o+ o6 a' G1 g {* DDim element As AcadEntity '定义选择集中的元素对象
; a& H& j- @0 x" v+ E! @1 j \9 Z, |2 x Y
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
* s# ^" ~9 \9 _- `2 L+ w& t1 E1 Usset.SelectOnScreen '提示用户选择* ~2 M6 E0 I( ]) [- o: Q' s
, ^9 ?2 }) `; F5 ]! i) {For Each element In sset '在选择集中进行循环: q( g6 k! Z/ n) ]9 l$ d+ l
element.color = acGreen '改为绿色, i. H/ n' y8 S! ]5 |
Next
# Y, n' |+ y8 b7 e( \$ h9 u* Rsset.Delete '删除选择集& Y% F) O/ f! {' ]
" P+ b& G& X4 i0 N3 K; O# ]End Sub
' m' {: t- i w3 _ z* t9 c) g, R8 P# Z: M- I. v+ @: u
3.选择全部对象
4 I% `/ y- b; v3 Y' K3 V2 x7 ?用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.& z! Y! Z7 Z7 Y$ D8 u, A; G
Sub allsel()+ ~" l8 R8 R) O2 c
Dim sel1 As AcadSelectionSet '定义选择集对象
x* U' q: L `' I- a/ ~5 B: _Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
* m$ T% S0 @' m x/ N+ q x2 kCall sel1.Select(acSelectionSetAll) '全部选中
& _& d3 F9 p9 z' s: Wsel1.Highlight (True) '显示选择的对象( P0 k+ l* H6 X. k+ Q) S
sco= sel1.Count '计算选择集中的对象数9 m7 J0 a" i3 H
MsgBox "选中对象数:" & CStr(sco) '显示对话框
2 i' \5 ~/ Q% |1 @' S1 y5 QEnd Sub( S. O& R) M* v# Y+ w
% i* U' U( o' k+ {3.运用select方法- o5 F1 }3 ~* n+ S) [; ^# `) j
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:7 T* I: y& D9 `
1:择全部对象(acselectionsetall)6 k& z: [" ~' i3 \" B
2.选择上次创建的对象(acselectionsetlast)$ l0 s" P- ~2 X" c5 {: R9 x, C
3.选择上次选择的对象(acselectionsetprevious)7 V5 A9 Y9 ~2 p
4.选择矩形窗口内对象(acselectionsetwindow)
( @) [. r: D7 X/ j# t5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
) K5 P9 e# i, n7 |1 @' S) Y还是看代码来学习.其中选择语句是:
Y/ W* r" w. Y6 @Call sel1.Select(Mode, p1, p2)8 E5 }- t) s' W" i- x& H
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
" {, ~3 A5 O* C' uSub selnew()
" m3 g$ \2 n3 _. f+ G* v" N6 BDim sel1 As AcadSelectionSet '定义选择集对象0 d$ f1 w0 I- @/ I; w8 b. ^
Dim p1(0 To 2) As Double '坐标1
7 s+ o8 B& o9 i) G! B6 HDim p2(0 To 2) As Double '坐标20 k: W" K# T/ S
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
% b0 b$ D. B5 b: T+ s4 Y% {! ep2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
( `9 k! [& K7 N4 {Mode = 5 '把选择模式存入mode变量中, R1 K8 ^( ?; C5 R5 E6 u
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
8 ^: s: q' J! D/ V5 B, g z4 HCall sel1.Select(Mode, p1, p2) '选择对象
* |9 N7 V* ^+ \4 _3 lsel1.Highlight (ture) '显示已选中的对象
9 z8 o* n0 Z0 q8 G5 @8 b3 L7 LEnd Sub |