Autocad VBA初级教程 (第九课:创建选择集) 0 y b2 ]8 G+ }$ _2 }& U+ m+ i
. }' W* w8 Q/ {3 t# t# O, g+ j 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.' o% ?0 Z/ Z+ U
! h/ n7 g" N/ A" v1 DSub c300()
# H5 P I' x" V' \7 x5 z& q) _5 O7 b
Dim myselect(0 To 300) As AcadEntity '定义选择集数组# t8 E& n0 t G# n7 b( W' R
Dim pp(0 To 2) As Double '圆心坐标! `. C* E9 F4 J+ P
" B( Q4 ^. a: A0 jFor i = 0 To 300 '循环300次
+ U; F8 i" \ G5 a/ J1 W6 xpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标* H8 U$ q: y( c: h k" N/ n# Z
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
% d# E, V9 @9 q# M: s) r; m" d- uNext i
0 S. ~- w x8 r' p& g$ T( N, t: t0 H( E* |: S
For i = 1 To 3008 `. V% v! T$ c9 k- \3 k
If myselect(i).Radius > 10 Then '判断圆的直径是否大于106 H. {& N9 g0 B' J0 Z
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数: t! \5 r/ w" S- r
Else5 t+ H7 _9 b7 V8 l1 E: `5 Y
myselect(i).color = 0 '小圆改为白色
7 m+ S9 ^, G! e3 y' w- A0 FEnd If
, _ u# u) Z) x }# t, rNext i* i& @# E7 |8 e5 [0 c$ z
) G0 t6 J- g, `, { KZoomExtents '缩放到显示全部对象6 S* r) N: F5 y$ m! c2 D( ]/ y% W
R+ B1 S. k! [+ J S Z$ o
End Sub
4 |( [2 t I! _3 k
4 A& R+ d! g, C& X1 v, Z1 ]/ _9 U) w$ d
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0. K$ `4 y4 J3 J4 b8 v+ t7 m% A
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开& k: K8 Q/ a9 q. {! l4 y
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数4 { Z' U0 X8 i. C2 w
# \* N2 b3 C. M: v$ t7 c
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
# W) H9 r; f2 Z7 {4 l( R9 P# V# O这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
. i2 ~2 l$ {# W& x: ]1 ]
# ~ y& i. `% _( H2.提标用户在屏幕中选取
/ P$ o" p# S$ y选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.9 w; m- W: K+ ]. r
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除: `' r' q2 e) t* i
) r3 @4 N( J: v5 v3 ASub mysel()( f: T! i5 l+ @' ?: k1 P" I
' F- o$ J. Z% V1 Z m T
Dim sset As AcadSelectionSet '定义选择集对象+ l7 p; Q# t* H
Dim element As AcadEntity '定义选择集中的元素对象
+ M2 @3 |: b) V* ]/ h. B$ v, a" b0 j0 T4 |/ ?" a
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集/ k% t" i* F) \' B: h
sset.SelectOnScreen '提示用户选择) t; {. U! [1 e+ x/ _( s0 N- n+ `
) N5 G$ B3 h3 t& }* ` D
For Each element In sset '在选择集中进行循环
! M- Y, v) t3 x6 k& N2 lelement.color = acGreen '改为绿色
8 t# X1 b3 h% }Next6 b8 V6 R; V" Z; b7 u( a. f, [
sset.Delete '删除选择集& M% p8 n6 L+ Y# g/ Z( \; g
. D( a& |$ ^1 u2 l) JEnd Sub; Q* a, R2 B8 M V8 Y9 ]0 g" k
9 y7 y+ A9 E( T- A+ s( U6 s
3.选择全部对象
! m. u c: {9 c; ]& Q6 f用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
2 c4 b) M( w5 GSub allsel()- L# \+ q9 u! {% v+ M" v/ q
Dim sel1 As AcadSelectionSet '定义选择集对象
3 E! R3 O* l. iSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集. G- H. T8 B+ s- B; h% B Y2 J U1 }& b
Call sel1.Select(acSelectionSetAll) '全部选中
$ j4 h: \" D, W0 X$ |7 Q% ~/ osel1.Highlight (True) '显示选择的对象% ~/ s# u0 t; Y( z) y+ w v
sco= sel1.Count '计算选择集中的对象数 s c# w6 `- ]! A: j8 w
MsgBox "选中对象数:" & CStr(sco) '显示对话框* h' E8 Q& C" @
End Sub
9 X- C, `& W& f5 Z1 f+ a0 n7 c; S
3.运用select方法
& D! b8 b. w4 W) Y9 m8 K上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
4 o; [# W- Z: b* S3 A1 c$ R1:择全部对象(acselectionsetall)& F+ _* T8 p; N
2.选择上次创建的对象(acselectionsetlast)
& u. d) [8 t5 U3.选择上次选择的对象(acselectionsetprevious)
8 Q' R3 Z' L+ Z) e- W4.选择矩形窗口内对象(acselectionsetwindow)# P; N0 M m) K* z9 j
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
: I P6 w6 p' @还是看代码来学习.其中选择语句是:1 T; _& C" V9 _7 H$ {3 ^
Call sel1.Select(Mode, p1, p2)4 ]8 T2 f3 W; F$ V0 }) E u W
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
* h# E" e+ [3 P2 }: U. A5 w- q) @Sub selnew()
' c7 y$ a, j8 E4 H$ S: Q; xDim sel1 As AcadSelectionSet '定义选择集对象 I' {& ^9 w n8 j3 t
Dim p1(0 To 2) As Double '坐标1
4 q( h {6 V9 E# [Dim p2(0 To 2) As Double '坐标2" b7 D2 d7 {% u! A8 V
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
& X" h5 |# K2 V/ u# Tp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标12 p% x) m" d1 w" `: u7 @+ i
Mode = 5 '把选择模式存入mode变量中
% u0 Q1 o4 Y; n; ?+ jSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集. Q# W# S. _9 k" v! g/ \, i8 R/ _: W9 ]
Call sel1.Select(Mode, p1, p2) '选择对象1 W a1 U0 Q G$ d4 b) f/ [) p
sel1.Highlight (ture) '显示已选中的对象
& S- d* ?! S/ Q" ?0 ^+ ?End Sub |