Autocad VBA初级教程 (第九课:创建选择集)
P6 E. i, W( U- Z6 G$ i6 N/ m+ ~3 @5 K* b5 a
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
$ G! J# F+ e6 A: ^/ W& K3 N! E- Q( D! w' Q# O
Sub c300()
4 g R& `- S4 h8 e# j8 z$ k6 D
7 f; u# C2 Y. G" M+ SDim myselect(0 To 300) As AcadEntity '定义选择集数组
+ J2 N7 O; Q/ b4 {Dim pp(0 To 2) As Double '圆心坐标4 o$ s, t+ ]+ X
5 s9 g" c. \9 tFor i = 0 To 300 '循环300次# Q! v) c8 H2 V0 b
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
2 n/ l$ I9 b2 h; E7 P F% MSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆" F8 Q4 |7 \) c, |! F t- A
Next i
# D, x, ]& p1 `+ S, P9 g
1 I1 K3 v/ D# E) ~- LFor i = 1 To 300
0 a' p+ a! M, VIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
) T; u+ D, y( Vmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
# V( B! O6 Y0 X! f6 r ~- |7 ^" FElse/ B4 v7 r1 a0 |: n6 T
myselect(i).color = 0 '小圆改为白色6 g, j) Y3 L l1 h A3 [
End If
{# M2 C# H9 d2 o+ yNext i/ m" d6 R1 ]* G W9 @1 ~
8 k) z& B! T8 |8 Q7 G/ w
ZoomExtents '缩放到显示全部对象) Z0 J$ I% d9 E, u5 H7 K3 I
5 j. ^7 v. v- i* G, ~; N! ]" g! j
End Sub8 r3 z. n9 { u6 i' Q' q' p
% ?# r; R& \: h$ u7 ?& S8 c: N
5 O( d' x, ~9 h) _. H- s7 Xpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0: c, b# C$ J% g* G
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
% f! ~5 A: r1 |6 O3 \rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
8 J& }9 ]1 u9 Q+ I- Y* l* ~/ D+ _% {& n+ [! R. ]4 ]
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1); R( T5 H& I& S' N# o
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
8 o! }& o' j& o, `( J
% H9 H y$ C5 t2 s4 I$ A5 z, }2.提标用户在屏幕中选取 {' i) n! W9 L' H5 s8 g6 U$ O' I
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.. y) Q0 H( [ N) y
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
2 l% v$ t8 z* }- ]) t
* z5 F C+ e4 z; cSub mysel()1 b& m. N, v1 D
( Y5 C7 t$ \+ A+ q/ M8 u2 u
Dim sset As AcadSelectionSet '定义选择集对象, ]& k1 V5 {6 \% l
Dim element As AcadEntity '定义选择集中的元素对象5 F2 T. z% V7 k- j
/ @4 B; X# Y5 z- kSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
0 u% R- Q6 K( t( K5 _8 L* v g! Csset.SelectOnScreen '提示用户选择
# m6 G+ G2 u. R) N. T" W1 k2 E+ \- V, ]- o
For Each element In sset '在选择集中进行循环. X& r* X6 H; a- h( O! Q8 V
element.color = acGreen '改为绿色8 R4 @) M8 I) Z
Next
* q* |0 l: G! p* d4 `) ]' Csset.Delete '删除选择集
6 V' Z+ J$ H8 V) ^/ |& i4 k8 K8 f' V( [2 Z- |% K1 w
End Sub* z+ ~; r9 a1 H/ t) R( e
: d4 n; T. g, j4 s5 H& n. m3.选择全部对象0 R4 N, f! z) B: Q( C$ U8 F
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.) n3 ^, R+ P5 E' D; G" u6 E3 t% Y
Sub allsel()5 w' a1 @) Q6 z4 M, V" T
Dim sel1 As AcadSelectionSet '定义选择集对象1 a8 p0 a: K& I: _8 J0 F
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
! }. ^0 t8 {3 bCall sel1.Select(acSelectionSetAll) '全部选中6 z: W1 n0 K- O5 r2 L8 v1 o' E! `
sel1.Highlight (True) '显示选择的对象( g' Z: P# ^4 y9 {3 T8 T
sco= sel1.Count '计算选择集中的对象数
! E) c6 z, _0 X3 R3 c% o1 p* fMsgBox "选中对象数:" & CStr(sco) '显示对话框
L/ ?8 N- D# X( @End Sub5 f; }' w3 N; ]
, X E; B" n: z# e0 S8 o8 `+ ]3.运用select方法
/ C, l- ]( |3 t4 k/ _) v; [上面的例题已经运用了select方法,下面讲一下select的5种选择方式:6 V8 {5 z4 R4 a9 ^ e6 V- Q
1:择全部对象(acselectionsetall)
$ F V$ }0 C- u0 X6 A2.选择上次创建的对象(acselectionsetlast)
_0 g3 m8 z* v' |: u& A4 C+ X3.选择上次选择的对象(acselectionsetprevious)
. M1 T) z' L; F ^! [4.选择矩形窗口内对象(acselectionsetwindow)
5 Y7 W" q& t- r) F9 P5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)' E% r. y3 X& Y4 w; O) T0 h
还是看代码来学习.其中选择语句是:; W4 x5 p8 F+ I* d! ]4 h
Call sel1.Select(Mode, p1, p2): z. K+ O; Y- l) ~* ^+ U
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标, y! Q# ]* W+ u/ ~) m
Sub selnew()
+ h9 X# \1 T9 FDim sel1 As AcadSelectionSet '定义选择集对象1 R+ j/ i( W6 X* A( ^
Dim p1(0 To 2) As Double '坐标1
1 C( ?3 s2 E0 q( KDim p2(0 To 2) As Double '坐标2 ^5 a& @8 x. n. g% ] z
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1; u+ T3 w% r9 S) B. {
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标19 a3 {1 d5 v' u* j
Mode = 5 '把选择模式存入mode变量中+ l& `2 S" D& V) M# F. m( [
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集4 |5 i e+ [$ j& O" G; E* `
Call sel1.Select(Mode, p1, p2) '选择对象
! k6 A3 ]3 G' @1 fsel1.Highlight (ture) '显示已选中的对象
& K2 C# q7 g) C) }3 H. w: y5 fEnd Sub |