Autocad VBA初级教程 (第九课:创建选择集) 5 t. B+ V8 l8 _+ N* G% ~
9 ]- @- Q+ s2 Q 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.2 G# e" C" p; Y+ g5 N2 m
2 \) t( l" J/ @: X* R; t
Sub c300()
. r! m& c! {5 N4 `" L A1 G" T1 U
Dim myselect(0 To 300) As AcadEntity '定义选择集数组5 x$ O* ]) B+ ^# d
Dim pp(0 To 2) As Double '圆心坐标
( j9 f6 _, f( P* l% l3 t1 R
& z0 Q% v! b) e! j% KFor i = 0 To 300 '循环300次
4 k+ `& I/ b. V" r9 C( ?pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
! R, F2 z( G& [2 K+ G/ Q7 A( vSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆" m( p# |3 l* M% N# L* T; m
Next i1 M8 F% l% [9 F# l2 ^
( o: r, v; W6 C. u0 H8 u; Q4 w. vFor i = 1 To 3008 o, {+ |% m/ g; c! f" M
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
0 i8 c7 N- M% g, }myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数6 Y8 O/ a, @1 y5 R* q
Else3 K1 F* b8 t% M7 z+ X: U6 Q1 \* d
myselect(i).color = 0 '小圆改为白色3 c( d$ V5 q3 r P! I
End If
$ }& f& b5 z# x8 k+ Z FNext i
* c+ ?: |& X9 M
/ {9 ]/ m* W# [: f0 G9 k$ V6 NZoomExtents '缩放到显示全部对象
4 m" X9 t7 }0 m' M
! v1 v7 d6 n' c9 S4 q( w/ jEnd Sub" Y5 v- d, b7 k) k
L" ?4 ~1 c4 E; {" |' |
: i7 ]5 C- G3 Z) w9 N% Zpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
+ W/ v+ Q+ G% ~3 S# ?, |这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
# i u1 C Y8 \: u: J4 {rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数* g# l' c3 R1 a0 x+ i
+ W9 [0 W9 x' H8 a: d, gSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)8 l5 p* d) v& A! M3 W3 _8 y0 ?1 E
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
+ G' ~7 j1 q# B. W
8 n, H/ }/ b9 K7 ^% _- C7 ]& v8 ]- h. _2.提标用户在屏幕中选取2 n/ h$ o0 Q B2 N! ^5 W+ [' B
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
$ p- S7 q% N5 N" M; R下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
0 z. l' p3 y/ l& B% Q; ^4 Y2 _
+ I; h3 j! i/ I5 JSub mysel()
9 G& O# y5 l* B
( d5 t. k/ N" }( JDim sset As AcadSelectionSet '定义选择集对象
8 h* P: k/ {6 \) X1 F8 ODim element As AcadEntity '定义选择集中的元素对象$ k7 u6 s7 R* S
2 Y! R' N2 M h v ~7 B h( v' l; i
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
9 X8 A$ a# n. A1 J( t: x$ G4 @0 Wsset.SelectOnScreen '提示用户选择! ?1 m# m P9 V# l$ m7 M: S
! s/ `4 L0 X- M; sFor Each element In sset '在选择集中进行循环
i( ~9 C3 N) q+ R" w6 M7 Oelement.color = acGreen '改为绿色# V4 Q" ]# d0 a( y
Next
5 ]# j" e/ w# g! T* t. fsset.Delete '删除选择集- L( m$ Z' L$ f8 H" r& @
/ d: J9 `' P3 C+ i* k" s
End Sub
2 M" K7 p7 T% E- u, I- `4 G; R/ D" M7 w7 u7 v# T
3.选择全部对象6 D" O- w# |) a6 k
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
3 |' u7 [' c2 z% M( sSub allsel()
" m& f+ X* p/ M- YDim sel1 As AcadSelectionSet '定义选择集对象
' l) ?/ P+ R5 h; m7 |Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集. N# j5 j) A- {% Z, Y
Call sel1.Select(acSelectionSetAll) '全部选中1 _' x! k6 t @7 B* }+ w
sel1.Highlight (True) '显示选择的对象
* w% i9 Q4 W, k# t; U" Lsco= sel1.Count '计算选择集中的对象数3 i0 u# {. o0 }: X
MsgBox "选中对象数:" & CStr(sco) '显示对话框' ?) {5 ]: [1 w# i8 n3 X/ W V6 ]7 m
End Sub
& ~) ?8 I0 r% Q1 @6 P) B; @: T: {4 B c. N: u |5 f! _
3.运用select方法4 t( T9 M' e) @" u' U3 n4 v+ d3 p
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:1 X1 \( `5 v! Q* [* Y0 e
1:择全部对象(acselectionsetall)5 x+ }' O9 s5 J
2.选择上次创建的对象(acselectionsetlast)3 z2 I1 n& P8 w
3.选择上次选择的对象(acselectionsetprevious)
* U: ~4 \% E0 V" ~+ S$ s) t4.选择矩形窗口内对象(acselectionsetwindow)- I2 l4 X- b, S9 e, {9 [7 Z2 i
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing), Y7 g/ ?) M' r' s- @5 Q8 S% w
还是看代码来学习.其中选择语句是:$ K8 H8 l, y0 l5 v. q
Call sel1.Select(Mode, p1, p2)
- x. g. p; Q0 L5 _% |' r @9 EMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,/ L& ]2 \8 Z& ~( Q& B7 X9 d& U
Sub selnew()2 e* |( l9 K% [- l3 \+ h+ O4 b, `
Dim sel1 As AcadSelectionSet '定义选择集对象
: J0 N2 [& E, ^8 T4 ~ iDim p1(0 To 2) As Double '坐标19 f# u* N/ v# p- B/ Q6 j8 g! D% @
Dim p2(0 To 2) As Double '坐标2
: |2 F7 g* k4 ?p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
4 S' |* D# v) d0 u' Jp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
6 F4 E5 F# U; Q( b8 mMode = 5 '把选择模式存入mode变量中
1 X `/ D7 O F4 a. E. e. } USet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集. {, p* V/ U$ m
Call sel1.Select(Mode, p1, p2) '选择对象& V' h. V: F2 z x1 x$ X8 k
sel1.Highlight (ture) '显示已选中的对象
/ ^% {* F' P# fEnd Sub |