Autocad VBA初级教程 (第九课:创建选择集)
" F/ z8 r+ \/ ~6 e- l& d
6 z/ [; d+ z# j9 j 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
6 E( x3 v; N* k( F3 D/ }1 f" N: p2 q* A# I2 X! _7 k4 o
Sub c300()
1 T. h5 h0 O: ~. s0 H6 M3 y
( p! p/ n& z5 ~0 I! cDim myselect(0 To 300) As AcadEntity '定义选择集数组- X0 K" ? R+ Y$ l. i
Dim pp(0 To 2) As Double '圆心坐标
* X8 v2 E3 a$ d/ d
4 H P; k8 f2 o( `* T9 j# WFor i = 0 To 300 '循环300次: M; j& Y+ L% T% W7 s3 s; ^
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
" ^4 l1 |5 W: f, fSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
* T; k6 g( o' g2 j* E8 WNext i
) J7 I5 z1 O6 \$ j6 ?; ?8 K: S2 j7 g# a8 e$ G4 u
For i = 1 To 3000 r+ x/ n9 P9 \5 I
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
" O! b2 W! l8 p& P: r4 Qmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数% M( F: @- ~7 Q. U: q
Else1 r* f# k# s4 L7 g- _6 q9 W+ `/ N; L
myselect(i).color = 0 '小圆改为白色- R$ E8 n% l: W* z
End If
9 B( o$ R# |/ L8 S! P0 |Next i, y% {* p$ l7 Q* R/ M- F" Y
; E U# h" |9 p9 m7 sZoomExtents '缩放到显示全部对象& C( o2 o% y; m- G, Z3 z+ G
' _) c5 B) f1 MEnd Sub
7 M) F" u5 f1 g. F Z& s
; u( q9 p; F8 z0 ~* M5 `2 E! X/ O2 Z( ~6 B, [9 h
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
8 B/ \8 O$ c7 p/ F这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
V4 O# J# }# A3 Lrnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
% e! J, P, i# ~; l7 L4 L. I* u
6 i2 x/ V% Q1 o( o6 U* q. @Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
5 F" m& j+ U- ?, \& F' p% t. b9 A这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.5 S, d/ ^# g! d2 ?- ^
0 D- ]& T) Z9 X( J2.提标用户在屏幕中选取
8 u& h6 b5 b: U c' w! q选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
0 a% Y" n$ X1 I- [下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除2 \4 A/ t, K5 P4 Z
- s! r. M5 `1 k& r6 E9 _+ e
Sub mysel()3 ]# i" ~/ y' b% K
" t( a8 R% s) Z4 k) Z- n; `; \1 mDim sset As AcadSelectionSet '定义选择集对象
# _+ w. v K, g7 E% kDim element As AcadEntity '定义选择集中的元素对象
4 c0 A: j5 w1 O+ h3 u# H& A
+ d; e: M* S: S4 |. ^Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
/ t$ D% }7 B$ z0 S5 wsset.SelectOnScreen '提示用户选择6 d) ? L$ ~+ Y/ j2 \
% b& a1 G3 w% G0 x
For Each element In sset '在选择集中进行循环
+ j5 V! a/ ?5 m8 X( b. ?/ O! i4 ?element.color = acGreen '改为绿色
* ?1 [4 i$ s# Z% c- H9 _Next+ p" D3 U$ P1 h# g6 q
sset.Delete '删除选择集" A- {8 F& j1 r% Z! |5 {
4 `2 }/ E$ E) K+ K0 M3 M/ U& d8 BEnd Sub/ g) Y0 d2 r0 I1 ^. m% B
4 k, @. I2 d; m$ F
3.选择全部对象
/ G' u9 K% \! \# \! q1 @用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.+ |4 d5 A ?- U$ J7 F; g
Sub allsel()+ y7 k# F) H4 B+ R1 y7 |
Dim sel1 As AcadSelectionSet '定义选择集对象
0 u/ m& Q( N7 dSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集! e4 ?# V% A. O
Call sel1.Select(acSelectionSetAll) '全部选中9 g/ T) M4 L. @8 m
sel1.Highlight (True) '显示选择的对象% G- I) }9 l0 _( w( G: X
sco= sel1.Count '计算选择集中的对象数; P) P8 g' T- D) I& D, c" W0 c
MsgBox "选中对象数:" & CStr(sco) '显示对话框$ x# d- |( `1 g6 G) S! Q7 l
End Sub
L$ C, C& e& U/ R
! r; X2 \0 s. Z! f/ f4 i$ o; U% K3.运用select方法. q- o& J0 u( B9 K; M& d: K0 i" Q
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:' v" ?1 J, l! ~* N4 R, C
1:择全部对象(acselectionsetall)5 Z' L! h- t* e" b, Q$ q6 D7 W9 R& x
2.选择上次创建的对象(acselectionsetlast)6 c, }" {( A8 _6 x6 n. p& l0 d/ }
3.选择上次选择的对象(acselectionsetprevious)1 d2 j, Y* z% T e: u
4.选择矩形窗口内对象(acselectionsetwindow)9 U+ p2 m. u& X: q& [9 a: d3 G
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)* a% y' N: l' B' p; y( v3 |! T8 O
还是看代码来学习.其中选择语句是:; V/ i; @0 b5 S" A
Call sel1.Select(Mode, p1, p2)% \ |, P. G, g+ ]' r
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
2 q) O( j8 ^/ m3 dSub selnew()* W: y, T8 X! D0 g3 |' p
Dim sel1 As AcadSelectionSet '定义选择集对象4 d: ~7 ~- W: j' E3 h9 m
Dim p1(0 To 2) As Double '坐标1
/ J4 n) @! l5 IDim p2(0 To 2) As Double '坐标2
% r$ C& l" y' o+ Lp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
; K ]0 j* Z8 w* T+ ^* q) |/ X$ Bp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
! q+ N V1 y) UMode = 5 '把选择模式存入mode变量中3 d0 O) Q4 L% Y9 @- `
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集( m6 R5 ^% P0 l* K; M5 `
Call sel1.Select(Mode, p1, p2) '选择对象
/ U7 H) x" @- J% I6 X# C1 Ksel1.Highlight (ture) '显示已选中的对象
x' j; c) ~, |1 I: D' wEnd Sub |