Autocad VBA初级教程 (第九课:创建选择集)
; M2 f$ K$ J) z' J/ @/ V. ^
4 R# [/ {) g$ s9 Y0 W& {: Q 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
5 o8 S2 ~9 t1 L5 O) _! ~* y3 H! X0 j/ Z) g( Q& C4 T S" i3 Q) Y/ }# ?
Sub c300()
2 C8 z6 y$ F: {$ _$ W* j: |/ o+ J# l1 e, f. c
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
4 s9 z5 D1 z' e+ }4 HDim pp(0 To 2) As Double '圆心坐标, s$ r/ `3 z8 o5 V% Q0 D
% o; u0 g/ c8 R7 j' D. r( I' F0 D! }For i = 0 To 300 '循环300次( |4 K1 v, @) A) d2 v/ g
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标( B% a/ c' Q5 q1 n E
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
Y) O% P) e6 RNext i
/ j1 v2 K# {5 ]2 W) E+ a" T
/ w& x3 z5 s! `( i9 c+ X+ W: o4 L5 {/ hFor i = 1 To 300
$ w$ I8 W4 d. X6 TIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
' a3 U' K7 B9 J* J! Smyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
3 r) N: S+ ~( c1 A' F% AElse+ O. g2 S1 X0 I' f4 m7 y
myselect(i).color = 0 '小圆改为白色
8 {0 O2 j2 W: kEnd If+ ?; E( y8 i! X4 l+ @6 i! C
Next i
# g. }6 d; E' B0 p: l* R/ x( \& s% ]! v# p
ZoomExtents '缩放到显示全部对象
* N% c& m: Z: O# I6 ]: _0 c+ h; [8 r @% o! G
End Sub9 g( ~ g7 H0 {7 _: z2 h7 d3 q) J
% K, Y5 Y5 Y( u3 H+ U5 d
; y2 Y9 M7 Q' b5 O7 rpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0! L' a9 e, Y$ g, V- Q
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
! y- X' O/ G8 grnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数7 T) _4 j6 @; q4 `- U
4 K* P8 z8 u' r! m. a* E4 ]Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
" T+ Z3 a8 z' T+ P$ b: a这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
( R6 J+ f1 o& L1 r g# A6 H9 F' q0 w* G$ q4 R0 t: X2 m/ ?4 M
2.提标用户在屏幕中选取+ e" {/ Z8 x6 ~% L. @9 f, G
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
1 }0 S# [9 C3 l% Z% q下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除1 J- @; j# |; Y) b2 \
; N) {" ]" }& U8 p( I9 B( U, YSub mysel()
* w, f/ W; o7 h/ ~' s( O& K* T6 g; G0 ]: w9 _
Dim sset As AcadSelectionSet '定义选择集对象
! Z$ w" I* O+ j z* M9 d4 ZDim element As AcadEntity '定义选择集中的元素对象/ D) ^' u- k, M$ |7 E5 V- u
: H0 O0 ?( v% I* ?/ C% ASet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集& E! H9 Y/ F4 K6 O) v6 {
sset.SelectOnScreen '提示用户选择
/ Y" @4 w( |# @$ `* H) `; s! Z! ^1 m8 M- M' n- K
For Each element In sset '在选择集中进行循环
9 Y6 C0 o3 f* `4 t7 z/ y7 Y( \1 X& Aelement.color = acGreen '改为绿色
5 z& N6 K9 q5 Z! ^5 p; TNext
) [/ v8 T/ }7 V' g, ]8 u6 vsset.Delete '删除选择集$ \4 d+ \, r* Q/ L- b* L. L$ P. ?7 k
0 b. P& U2 h* @6 `+ Z$ w4 x+ ^
End Sub
) i, x4 i! G& _+ w* b9 l! p# }8 O x$ X5 Y
3.选择全部对象
$ F9 a" n$ q3 I, R* x用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
Z0 d1 x- }4 b5 ?Sub allsel()* h+ u" _ s! g1 ?
Dim sel1 As AcadSelectionSet '定义选择集对象
4 H7 n, w1 i9 h b/ E8 u. n# `Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集 X: a+ |' d5 r x8 [
Call sel1.Select(acSelectionSetAll) '全部选中
5 ?8 t. C5 `4 h( |4 }sel1.Highlight (True) '显示选择的对象
- z1 @* S5 \. ]+ dsco= sel1.Count '计算选择集中的对象数- C- u# ]0 g/ q4 ]
MsgBox "选中对象数:" & CStr(sco) '显示对话框
9 a+ k3 B0 t8 R" ^End Sub
! o1 b8 c$ t% n/ T1 [4 A
# N$ o( O6 z, f# ?0 W! W3.运用select方法
3 B" ]' Q6 n9 }: o上面的例题已经运用了select方法,下面讲一下select的5种选择方式:/ t0 U8 Q0 g' j- A
1:择全部对象(acselectionsetall)
/ z- z4 K7 x& ?; W( M! ^* [. s3 |) g2.选择上次创建的对象(acselectionsetlast)
! r6 [) f! s4 [. H+ J% J% J) B; g3.选择上次选择的对象(acselectionsetprevious): c0 G% c& `* W" I# Q& ^
4.选择矩形窗口内对象(acselectionsetwindow)
! [, Q5 W# A/ t( U! ]5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
2 P" X& n6 y* s: P( ?还是看代码来学习.其中选择语句是:% M" i/ r, s. J- O( d! L" {0 d
Call sel1.Select(Mode, p1, p2)
3 Z5 b [# {3 f0 b% P" y# XMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,$ h/ y, |' @6 I5 W9 c/ S
Sub selnew()
/ Z+ k5 {$ N' d. K; C; MDim sel1 As AcadSelectionSet '定义选择集对象% ~8 Z. q9 D: g1 a! X" g0 q0 n
Dim p1(0 To 2) As Double '坐标1
/ y) \" d9 g; HDim p2(0 To 2) As Double '坐标2
( g' Z! B$ k0 f$ E0 }+ R5 c4 Mp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
1 I0 ^4 G! q9 D5 r* Dp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标18 \9 U* ?" c- C* f- l
Mode = 5 '把选择模式存入mode变量中
7 H% @7 [" F" _$ ?Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集9 L" ~$ @* W8 X
Call sel1.Select(Mode, p1, p2) '选择对象 y5 l7 Q6 K2 R7 W1 E% W1 F
sel1.Highlight (ture) '显示已选中的对象
% X4 F* P( s7 a# N- t; W9 Z% WEnd Sub |