Autocad VBA初级教程 (第九课:创建选择集) - S$ L8 n. O P r
! F: z7 }* p. [5 j' j2 h. u
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
: v3 s3 c: L G2 g5 n" i1 ]
( b4 Q! @" N! T, z# O" s7 t$ CSub c300(), N1 n& B; j$ H; u8 i5 ]0 n
3 m* i9 ]" R# |# f4 m6 }
Dim myselect(0 To 300) As AcadEntity '定义选择集数组0 e/ I& _ V! B: p5 O
Dim pp(0 To 2) As Double '圆心坐标- R* `( G1 n t. V9 s3 c
4 A1 i# M. z# ]8 ?; S
For i = 0 To 300 '循环300次2 v! e$ h9 z+ Z& s" r0 v, V
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
4 |4 T4 [3 S, U! vSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆! v8 Y2 _5 N$ A. n, b
Next i0 I: D4 v% z) u7 {
' ] f' E/ p& X5 m S
For i = 1 To 300# j% J/ j& ] b/ T
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10* P( ?6 s9 }- p9 B
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数% M/ b8 A) l' `7 R" t+ y
Else
9 }& c$ o3 Q4 U8 Dmyselect(i).color = 0 '小圆改为白色# m [; o$ E0 i8 {
End If4 {+ R: m/ g" C& y9 n
Next i
8 m4 q; h3 B- v0 _( A" U/ ]9 F# s ^/ Z: ^3 ?
ZoomExtents '缩放到显示全部对象. z+ V, H0 G- l) x3 i
& T' T1 L4 i- [+ t( rEnd Sub+ o$ K- S2 @' d9 b+ T/ E* D' y- r
+ O8 M, W) x$ z, i6 ~' z3 r1 ?2 H7 A8 N, l: r1 S
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 01 E3 ?' S; l$ X9 F
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开! F5 k- j4 p0 U" i7 r6 O" I% h4 p2 d
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数. x! v8 W% q% M
; M9 {( N' E) o+ a; n/ J3 xSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)1 @& A1 j7 E+ S0 |6 r- h- `
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.9 _6 e# r) y4 Y: n
0 ~# K8 m+ @1 P: G2.提标用户在屏幕中选取1 z- x5 m* k6 k3 A# M
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.3 T- ]5 m4 M- F& |
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除* j; s8 N% W D# V" K! m
! E" {! f. _# {+ J# } CSub mysel()
* S3 k# s# H9 U2 r. }( f# O! h7 H$ i6 z# Q" t
Dim sset As AcadSelectionSet '定义选择集对象
! ^* E7 J, O9 W- Z/ zDim element As AcadEntity '定义选择集中的元素对象
9 X3 {+ C+ o; h& A# l v& L1 Q" v/ h. y) l( ]2 X: v/ g
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
3 P0 K/ z- G& T/ v8 ^sset.SelectOnScreen '提示用户选择0 D: C5 V4 H5 y `2 F
' I* l+ l/ R+ C6 g( X, w( fFor Each element In sset '在选择集中进行循环+ H' S E; P9 s& U: o
element.color = acGreen '改为绿色
1 R( A3 K# m2 I0 Y/ Q FNext" I4 z1 u' u% }2 m" W$ w; s
sset.Delete '删除选择集2 J/ k5 N9 a' o" K
$ W1 j% a; L. g1 M* WEnd Sub
' Z& d2 J7 q+ X* K1 G0 x7 c0 {) M `, c, P
3.选择全部对象9 C0 z/ q8 b0 V# T; w
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.0 b) Y7 j, A) s' g% l
Sub allsel()/ }2 \/ |3 j' X8 V, C# n
Dim sel1 As AcadSelectionSet '定义选择集对象
( }& J/ y; y9 N0 D" L4 dSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集/ e% f4 y) J& L! U4 T; L
Call sel1.Select(acSelectionSetAll) '全部选中4 m3 Z+ d. a) r: n# v# Q. d, l
sel1.Highlight (True) '显示选择的对象
4 b- @7 f6 C, G4 U3 A, u# Y$ f5 Psco= sel1.Count '计算选择集中的对象数
, r' R5 g5 f7 E- OMsgBox "选中对象数:" & CStr(sco) '显示对话框* j4 ]; p# ^# A" I% w7 j& M8 e
End Sub
$ \/ M! ?: G# g/ K! T
" M! d ]$ Y' P: L/ j3.运用select方法
" i: J9 v% s2 v; ?: w9 t上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
7 K! s5 {& P& q+ o. ?: M1:择全部对象(acselectionsetall)5 O+ Z' p3 O) ~ A7 A/ t1 O
2.选择上次创建的对象(acselectionsetlast). q1 P8 G) L0 a) b8 [
3.选择上次选择的对象(acselectionsetprevious)/ ?, j2 }) w4 Y- V( {
4.选择矩形窗口内对象(acselectionsetwindow)
+ V% n! c ~( H5 d1 B5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)$ W6 d, U' E1 }" |( ]8 m
还是看代码来学习.其中选择语句是:
$ m7 U1 o, h# B Y$ R0 ]# ^Call sel1.Select(Mode, p1, p2)
8 A! H. s1 Q) m* t8 RMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
( ^4 S6 f8 P- l% T- mSub selnew(), M: H0 q1 \7 F6 x* J7 _3 @
Dim sel1 As AcadSelectionSet '定义选择集对象
! E' I, a5 o+ v" R( o+ b% R. ADim p1(0 To 2) As Double '坐标19 J/ L/ A$ q- J9 U2 }5 o @1 d9 g1 |3 ?
Dim p2(0 To 2) As Double '坐标2
4 P0 z) r! P8 k, G/ yp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
3 T4 _6 c! |$ m" M% X' J4 Xp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1' m& R4 S9 n W3 `* m# v
Mode = 5 '把选择模式存入mode变量中
/ \* s. Q$ K2 |% {Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
) h, @8 @# T( X" M- L4 bCall sel1.Select(Mode, p1, p2) '选择对象3 q2 p" y l! X( \8 r
sel1.Highlight (ture) '显示已选中的对象! q/ u9 m$ h5 G& f- y! e
End Sub |