Autocad VBA初级教程 (第九课:创建选择集)
' n: U/ N i. L0 M& |$ _, M
% P E! J% t9 b8 {" p! j- c% e 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
# p" F1 j( q- N" z! ]& g2 k) ^1 B5 J f/ G
Sub c300()
2 I5 Q! \4 z) v) {% q: ~
C8 H7 B" g* C; Q _Dim myselect(0 To 300) As AcadEntity '定义选择集数组
$ P5 K6 \' d3 M* Q$ yDim pp(0 To 2) As Double '圆心坐标+ S( [- ^! Z* z
- J7 c& W, o; r4 k
For i = 0 To 300 '循环300次
; Z# x9 T" m# T) Bpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
4 T$ n, F0 {$ W2 p. f, G# m- {Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆' B2 H. m. y$ {" K
Next i" g; ^( ~ G. T
. t1 x3 m$ Z8 {$ ]! N) M3 p0 e
For i = 1 To 300
+ |9 N: |6 O5 r$ D7 H8 R; |4 S* ]If myselect(i).Radius > 10 Then '判断圆的直径是否大于108 x: g- {" B+ x
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数) `7 a& e5 \2 Z8 g( v/ F |) U
Else- T- t, I# y5 E9 d- J! R* C
myselect(i).color = 0 '小圆改为白色
" `" s" c* _3 `0 o. NEnd If; \/ w: p8 W* A
Next i. f9 v- q+ ^" q) [" v
1 H' u' W! I, \) y6 K
ZoomExtents '缩放到显示全部对象) a0 Z$ k: e3 m8 i5 T3 b. u
) i7 j$ A7 f# @End Sub5 z9 ~4 T [- w( h4 e2 x& j5 y( c
' a. ~! G8 y* K7 J6 T, x
. B8 U. G7 O; ~8 D$ D1 |5 R
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
2 s Q6 }# w5 B$ e这一行实际上应该是三条语句,用三行合并为一行,用冒号分开4 _. b$ N2 ]6 |2 ^! v
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数' a( L& `8 a4 q' {( N4 z, Q
* b. A: T9 X; N0 ?/ a+ ~
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
! c- |; K/ t* V: b' v2 ^这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.! }" w# w4 U d0 J
; g' |3 I4 ]" e- b2.提标用户在屏幕中选取' K, e" L# [4 W: M7 R- H% U# F
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.+ m# D; a6 \# a3 ~/ f1 m
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
: ~+ W3 ]* s( h( o
$ t" J; L) {% S3 ~: G/ g dSub mysel()' z! ?( {1 y j7 k) q/ k" A
2 T" k' ?: X/ D8 H+ N( S9 m9 _' UDim sset As AcadSelectionSet '定义选择集对象
0 @1 [# Y2 ~% Z. fDim element As AcadEntity '定义选择集中的元素对象7 K" K; V; E* ^2 n! Q0 \
- C- {: i* w, k' |- f
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集4 a3 z. ]% B/ D% J( V* g$ U
sset.SelectOnScreen '提示用户选择7 R6 E6 A9 U. g0 p
@) E% R# N2 E+ j! w% w* s/ f+ ~
For Each element In sset '在选择集中进行循环
" b0 c, a. }/ m& d0 l; O( D' eelement.color = acGreen '改为绿色4 O5 \ E# b# o9 q
Next3 @( x. H( g j- s) }7 Y$ v; \! D
sset.Delete '删除选择集
! R( z! s9 u% M9 C- U( i
; Y4 j1 \1 y5 M) L0 x- C$ SEnd Sub& ^, l: I! I' m
9 O& F3 C3 t6 _. J& Y5 H* ~3.选择全部对象* f2 `1 {" w, O. v9 G( ?
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
* V& S3 @2 F/ T: H6 ?9 W! u$ L# Q% x! }Sub allsel()
4 j o4 U, G/ y: M# b. F7 ODim sel1 As AcadSelectionSet '定义选择集对象
. Q5 r' Y6 C" `+ e0 D: zSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集8 R' c7 z( L: a
Call sel1.Select(acSelectionSetAll) '全部选中+ I" u: k( z5 | v
sel1.Highlight (True) '显示选择的对象+ C" A& U$ u3 n6 b% w1 G
sco= sel1.Count '计算选择集中的对象数2 G2 @# l8 E) q z' h/ f
MsgBox "选中对象数:" & CStr(sco) '显示对话框
: [" D" b, l- S5 OEnd Sub, [. r, H: ]& Z3 L( p
( A) Y8 _2 z3 K h. h. I9 ^" U: s3.运用select方法' ~+ x. Q: S' C# n
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
$ a6 v# n' Z* y* u& f" e) ]: h' w1:择全部对象(acselectionsetall)
& \1 x6 d0 i/ m1 h# w- ^2.选择上次创建的对象(acselectionsetlast)4 R+ t1 J0 m! V
3.选择上次选择的对象(acselectionsetprevious)
' I. r& r E' ?% [7 R$ g1 P! I4.选择矩形窗口内对象(acselectionsetwindow)
1 {% n: w4 t' f; W. A; X5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)5 g" q6 k8 \# K, X
还是看代码来学习.其中选择语句是:) g. a, b; r `
Call sel1.Select(Mode, p1, p2)$ ]1 d+ K$ a" |* z# ` f4 f; A
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,) o# V2 H$ i2 i4 v) V+ V/ g
Sub selnew()
% t+ `, {3 |& m. H$ JDim sel1 As AcadSelectionSet '定义选择集对象$ }9 J6 u& q5 m" f5 g5 z1 z
Dim p1(0 To 2) As Double '坐标1
: p8 X, ^4 i; u2 S' ~! N) `Dim p2(0 To 2) As Double '坐标2' m r3 T c1 K, v+ e( c
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
, I6 Y9 i& f1 h% Gp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1 X: v- g( X- ^) d4 u2 M
Mode = 5 '把选择模式存入mode变量中
! ^6 f, J9 x# |* {& G6 V8 g0 DSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集! z0 E2 C9 r/ q' p& Q
Call sel1.Select(Mode, p1, p2) '选择对象! o8 X6 b% `7 W
sel1.Highlight (ture) '显示已选中的对象
- z. H# u8 A% x' z7 ]8 U1 y/ EEnd Sub |