Autocad VBA初级教程 (第九课:创建选择集)
0 I( w" }( t' ]5 J9 m- ^
6 z8 t9 D# I( S O2 r, Y 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.0 b' V9 x8 Z) D( W" S) L4 u3 a I
! W8 t; N7 ]" P6 C6 K) eSub c300()6 t3 n: V% D$ _
3 R8 r5 Q% c7 H& w2 x) MDim myselect(0 To 300) As AcadEntity '定义选择集数组6 E7 o+ Q( M5 E y
Dim pp(0 To 2) As Double '圆心坐标5 s" F+ ?( U# W% Y- T/ K. Y% q
. \, s- [- }2 T! \: \, l9 X4 }
For i = 0 To 300 '循环300次3 l8 l7 R7 p# z: b- |' q) M
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
0 v1 S2 J* Y1 ~8 |# w3 q) WSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
3 z7 H% |- t6 J! d# YNext i- K# u+ W2 O9 g. G( N
2 H( Y3 _7 \, K8 @4 F! I+ x) U
For i = 1 To 3009 Z9 ^6 z: |4 w+ k+ e# L9 C* c" u
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
5 V, b! W( O3 J0 Dmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数0 ~, S# {7 Y) W/ V, F
Else& x* V3 m7 {, G, |4 E
myselect(i).color = 0 '小圆改为白色4 A! d+ M* [5 ~0 F
End If3 X4 i- c. s' r& i4 X
Next i( X, H9 e) ^. _! R
7 {' o$ U# B. S4 G7 v) K% `2 W% _4 o
ZoomExtents '缩放到显示全部对象+ W: q3 Q7 z* C! q$ P8 C5 y/ p
& j/ R+ j' L' Z' c: a) ?8 H" ^/ y
End Sub
4 w4 X, s m, {- J$ B: H1 k$ R* E( i& j& V1 ?* Y6 w
$ H8 B0 w1 o! w( f# kpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0+ q- f% q9 z! a- d$ y" {" B
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开& T! [# u, _* \* s
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
! z/ ~7 m* d, E# @5 b3 w* z5 g1 g) o* X' T0 C' k$ r7 P
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)$ m5 t+ E/ ?8 z# K" Y5 }
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
7 N4 H" z6 \- t( g9 |& k
, l( q- z5 {* p& j2.提标用户在屏幕中选取. Q8 `: v- f) B5 A) T6 g9 S
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.* x8 |, } J! G: r% p/ f2 Z
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除' h- B$ `9 ~% v# m
2 n' Q- Y& @) u3 |9 B% s2 ` M% U( YSub mysel()/ F* }1 b8 o4 n. o* J5 a
9 J* h+ q) y3 I0 l+ Z$ {5 }. QDim sset As AcadSelectionSet '定义选择集对象# m* e! F4 I2 Q4 U* _
Dim element As AcadEntity '定义选择集中的元素对象) P v( F4 w4 X& @. x& m! k
$ ~5 O/ U$ l" B. G6 y1 G h8 ^% R; f( `
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
, z) S+ `. W) z6 z$ msset.SelectOnScreen '提示用户选择7 v/ G; {# g6 O( @
% p: `2 T8 q2 o5 v) p
For Each element In sset '在选择集中进行循环
7 {8 W% ]0 Z: {7 V3 m0 Y9 ^- ~element.color = acGreen '改为绿色6 I& b C- v+ Z8 `8 D' V
Next1 |9 F& |7 D1 i# h% Q! [
sset.Delete '删除选择集' h* v- D( R- |! l2 O; G K
2 u7 S# p T& q" C
End Sub; w2 x6 K& a8 W: ]9 a7 O
: h4 u+ ]5 b0 P2 \4 N2 h
3.选择全部对象
" M9 a/ M8 d# i用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.; I( t& l4 n' W' U. x. `
Sub allsel()* l0 l8 _6 z$ y k0 |6 I
Dim sel1 As AcadSelectionSet '定义选择集对象0 ^5 U3 |$ m+ R* B$ t
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
8 T* y# [+ r4 ~6 h5 pCall sel1.Select(acSelectionSetAll) '全部选中) v2 F# l; |# y& s
sel1.Highlight (True) '显示选择的对象
& q; W* X& m' ?! ^* T* U, t' S4 X( bsco= sel1.Count '计算选择集中的对象数
7 e$ }% ?: h' b2 w# ~MsgBox "选中对象数:" & CStr(sco) '显示对话框
# D7 w. m8 G3 fEnd Sub2 Y3 Q, C" {# A H3 M
# F8 U& c J# P1 h2 ^0 E
3.运用select方法
# o$ C; C4 |: n6 [2 G/ _& [; \8 |上面的例题已经运用了select方法,下面讲一下select的5种选择方式:- N: D! N* s/ |+ z" J( |8 i4 i
1:择全部对象(acselectionsetall)5 T( z t [' n* I* T" T/ [8 j
2.选择上次创建的对象(acselectionsetlast)3 _6 ?. b& S3 r
3.选择上次选择的对象(acselectionsetprevious)
% f2 I1 ]& K: g% x% W4.选择矩形窗口内对象(acselectionsetwindow)9 n1 C1 V& @- C; c' |
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
" m+ e& T5 C) _7 x3 N: L还是看代码来学习.其中选择语句是:
# ?3 _* H7 s! `) d* b) G1 e$ E5 MCall sel1.Select(Mode, p1, p2)
/ u4 G0 }# J# l0 D; ]) TMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,7 I G8 w' F; C1 W. G* l
Sub selnew(); X% \4 g) d+ `3 p2 Y# M4 g# V- f {
Dim sel1 As AcadSelectionSet '定义选择集对象
U* Y0 |6 k0 p8 S: `# \Dim p1(0 To 2) As Double '坐标1
! G# P* a! K! U+ h7 a/ l& d! gDim p2(0 To 2) As Double '坐标2
0 c) Q6 l' |2 A! n' B) R. Cp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1 L; A$ w) g+ {) Q; |
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
) B& E5 H5 }, }, s @+ M1 EMode = 5 '把选择模式存入mode变量中
. M% Z( e( T) ], u6 U# M! {2 ]Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
8 E( t4 s' B. J( T# b3 y+ Z; P& FCall sel1.Select(Mode, p1, p2) '选择对象- M7 y8 J2 \. m+ x
sel1.Highlight (ture) '显示已选中的对象
- Z9 }4 T, ^1 ~. m) \7 t' HEnd Sub |