Autocad VBA初级教程 (第九课:创建选择集)
1 U$ t- i$ f1 C5 G4 h2 H4 n( `
* K+ U; ~& m; G2 a& h3 p 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.! x5 @, h, {* F: }
8 _* R8 Y0 z# _* J& B# v
Sub c300()
7 }+ { q A$ K# M6 k' @7 u; ^- k/ N2 Z, z7 q
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
) \6 a* F) _& J! I5 S- `" uDim pp(0 To 2) As Double '圆心坐标$ ]; D$ ~8 l2 }4 y. m* M
# I' r9 @! A) Y; n& L4 s) mFor i = 0 To 300 '循环300次
& R0 Y* w# G: S0 V8 q8 Upp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
, x* _8 f% z2 K+ y8 zSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆/ A; ~( q' k9 V/ N0 u
Next i7 @, U9 V) R3 w- L |3 z( l
: J7 z2 r8 H" w" w6 d/ _% qFor i = 1 To 3009 w4 r. Z- q/ ~# @2 r8 \+ ~
If myselect(i).Radius > 10 Then '判断圆的直径是否大于103 h! Q4 w+ ]4 a; s
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数2 c& z& S. f! D; u- i& J- h9 U9 d
Else
/ Z+ r) [- Z2 O( @! z. w% Jmyselect(i).color = 0 '小圆改为白色
* k, i" Z- S$ d- j p9 eEnd If7 Y9 O$ q) P- Y3 u8 W- d; ^0 C
Next i: H; |* n5 F k+ B' C
7 Y, _% A; ?2 F
ZoomExtents '缩放到显示全部对象
# P: Z0 Z3 A6 s; F: ~* @# l- t Z# R, F0 D1 @
End Sub
P& I. D2 e9 d% s* A' I1 z0 d4 m4 ~3 M- m( _
% q! `3 l# V% J& O
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 07 z; X$ c# t6 \' s2 z! N4 u
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开. }, p! [! ?4 j+ D4 I+ `$ O& d5 r# g1 U
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
: w# i) ^1 `6 v" D; x1 n- I# G+ ?: \; R4 y
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)( b; B$ h" ]7 ~
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
1 P7 ~+ D" C; |3 C8 T: F3 J
3 z! i: h/ H6 d2.提标用户在屏幕中选取
, ^3 c9 o" z6 p! ]! Z% V选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
) R8 K, u" {" w+ T) ^" `5 U下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除9 ?, B) g b8 ?+ }( B
) z* w, L" W( }3 c
Sub mysel()4 j! F7 t- e7 X5 N! U, S
5 i5 S% j8 y! Y3 _3 a" P' C0 gDim sset As AcadSelectionSet '定义选择集对象$ G- A8 C3 z% c# S, P9 L
Dim element As AcadEntity '定义选择集中的元素对象$ G6 v9 ]# n4 p& c- h
. f0 T1 n1 q9 r4 ^& Z. k
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
6 g# n" x. r: J" L7 Z- W" Gsset.SelectOnScreen '提示用户选择# t+ ?$ w" Z% O) N7 \
2 K$ X4 e. P) x2 l: BFor Each element In sset '在选择集中进行循环! L' z+ |% v. D2 ^7 r2 c
element.color = acGreen '改为绿色
2 ^1 b/ }! m' m5 Q; F$ }; \Next
. P6 W4 @. m' k- ^% x( Y& c6 Osset.Delete '删除选择集
: j* L1 o) N9 T5 Q. [0 W) c$ i! d( y/ p9 V) ]& i
End Sub, z2 ^! A, C) y3 q( r
- J/ ~" \& s# @" \0 K- h0 K3.选择全部对象$ u2 t5 r* z/ v/ L; N1 z# {
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.6 ~( o3 \8 D ?3 T: w: D
Sub allsel()
6 A% j: Z0 a% W! p1 O) eDim sel1 As AcadSelectionSet '定义选择集对象# C$ d4 Y$ ]4 ^$ n& k1 z% k
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集' O! ]% D3 H% r1 F
Call sel1.Select(acSelectionSetAll) '全部选中$ X1 M) h* k: W2 B- P
sel1.Highlight (True) '显示选择的对象
7 x) g$ c- I. y9 C* M; \sco= sel1.Count '计算选择集中的对象数
+ C" y3 q3 [& ]5 _/ p" XMsgBox "选中对象数:" & CStr(sco) '显示对话框6 @) g4 k/ N$ t* J$ }0 Y
End Sub
8 C# E9 j$ b4 r' r+ t9 C2 U9 O) E+ Z) I, h& P' q* B; K+ X
3.运用select方法
- j4 i4 B) X; ]# ]上面的例题已经运用了select方法,下面讲一下select的5种选择方式:2 t: h, a) {0 C/ [
1:择全部对象(acselectionsetall)% a4 `& j$ D0 b" |* p
2.选择上次创建的对象(acselectionsetlast)
. g1 l: O5 b, |$ D6 z3 R/ R3.选择上次选择的对象(acselectionsetprevious)* `& u- J$ @# f8 W
4.选择矩形窗口内对象(acselectionsetwindow); p+ ]; @' S$ Q* h; V
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
! a5 E' B% K* e) M1 ~7 J还是看代码来学习.其中选择语句是:' a6 ?" h$ u- q3 b1 G- a1 V
Call sel1.Select(Mode, p1, p2)8 y; l3 ?4 c7 j- {6 u, _6 z* ^$ g
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,$ @. J! P* @. p9 t8 W6 V
Sub selnew()
+ o |" Y: O6 l( Z. ^Dim sel1 As AcadSelectionSet '定义选择集对象, h8 n0 p9 k/ ~0 Z
Dim p1(0 To 2) As Double '坐标1( H) e1 P1 E/ a( g/ }$ d
Dim p2(0 To 2) As Double '坐标2, O7 _( c6 t$ t8 `& t
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1" B- H+ M- R5 [' U
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
: {; ?, T1 ], k) w/ e/ T4 J6 SMode = 5 '把选择模式存入mode变量中
& e; C" W. g( I! v7 Z5 ~Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
- \# T/ ~1 g7 }Call sel1.Select(Mode, p1, p2) '选择对象
z' b* d; A, E& a9 Rsel1.Highlight (ture) '显示已选中的对象* k+ ^# q: \2 V: T0 J9 a
End Sub |