Autocad VBA初级教程 (第九课:创建选择集) ' e+ Q4 C2 T# @3 p! }( s t& N* ~2 A
1 g8 B8 V+ [8 |% \; M. w* Y6 q6 X 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.* V" X9 C2 k1 J9 `( t/ w. V' e
$ S+ b, T" h' Y# G8 `% y; N7 F: ^5 F q
Sub c300()
* v: a* v+ K; I. L! _* ?; z: A# w
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
# ~! \$ r; B8 E3 C5 P, fDim pp(0 To 2) As Double '圆心坐标
3 r% k8 X+ k0 H K8 v: o4 ?7 O& z7 z8 D3 A
For i = 0 To 300 '循环300次! P# l! W+ l4 |
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
# t4 r' |; o& y* A2 B# L+ ^) l8 JSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
# v& |$ k5 G- O" F6 E+ ^0 \Next i
, T$ X! I: o: g. ~* s0 @. A
& E/ F6 s$ I1 |For i = 1 To 300" c& f; s+ E0 x2 s3 W
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10/ G# u. m y. c) @9 }) [, B# a
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数) K: W# _( D" I& p
Else
+ R9 j3 b: c/ a3 Imyselect(i).color = 0 '小圆改为白色
5 T5 t+ T$ f7 m" iEnd If
, `5 E/ y) {" @# y1 |, ]! [! z7 hNext i. k' R/ m1 ^! q+ }. F. q5 i
, [2 h) i2 t3 p$ d7 {ZoomExtents '缩放到显示全部对象
3 p8 X9 a* E) v) ?* t
, B) h2 X' U) qEnd Sub; {- }' R4 l5 T# e) m% Y2 b4 p2 @
& f1 v. e6 r' h5 s, h: S
1 A( e( }5 i# V# w
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0/ `% i* d' E/ J- F
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开" O) ~/ {- y- G& S/ H
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
' W3 Y p3 Z6 I% P- k
. p& b- T% ]: ^8 gSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)& V! [! P# L, I; S4 z
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
7 `2 `" r8 n/ _9 a0 t) Y) W& W7 j: f T* A1 h' W$ W4 g/ Z/ {$ Q
2.提标用户在屏幕中选取
# K2 h4 m8 K5 S2 r$ V选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.4 G- ?+ Q% F) x1 I! \3 C
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
e, f: x4 Y, g4 y7 F4 e/ Y4 I, n/ t2 ^5 h& U# Z* p
Sub mysel()
# p. ^6 ~- K& ]" L) n
0 A3 K2 T6 e9 Q$ |; nDim sset As AcadSelectionSet '定义选择集对象
, q' R9 d7 x1 c" rDim element As AcadEntity '定义选择集中的元素对象
2 m! K7 l. I% A6 |& N" b' ]0 V9 Y+ ]) b4 m! a3 w
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集: F" H- G% q8 v; g [; D2 d3 z
sset.SelectOnScreen '提示用户选择
- S6 y- r3 R* x6 d, o( G6 s
7 R' y$ t( \7 Y+ b0 n# l. W/ tFor Each element In sset '在选择集中进行循环
; u# g2 O, E3 i( n, t- n2 @element.color = acGreen '改为绿色7 ^( A d4 b% r+ [
Next
6 l9 _$ n4 o6 W' vsset.Delete '删除选择集
Y* ?: n3 z: P4 j3 o0 a/ N6 X$ }& h9 n" I' I& J% m
End Sub
) F# r6 x1 _9 s5 S" N, M7 v- }, n3 g8 N+ M% Z; O, ^
3.选择全部对象6 X, N( o0 I9 h R
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
" d5 n0 J5 X4 z. m* c' ASub allsel()
$ {8 Y$ [2 F: IDim sel1 As AcadSelectionSet '定义选择集对象
% }' p) o4 n9 H" d6 v. `; @: N& BSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集6 C( m/ _8 x! [
Call sel1.Select(acSelectionSetAll) '全部选中# y" ~; G9 V: M& {# I
sel1.Highlight (True) '显示选择的对象/ Q2 g" p$ o2 b, F$ T' I; j
sco= sel1.Count '计算选择集中的对象数: k1 f3 m' K& J3 Q4 l
MsgBox "选中对象数:" & CStr(sco) '显示对话框
! X- w( Z6 o) \8 w. C: o+ x, Y# BEnd Sub$ R H9 x" g9 ]* K0 P) U
! K" k3 I6 P. ]" M+ H/ }" s
3.运用select方法
; f5 ~7 ^; p+ u' X6 X2 n6 a& h3 a) d' |上面的例题已经运用了select方法,下面讲一下select的5种选择方式:2 `' m; `! t; A4 }/ G' Q$ J4 q! G- G
1:择全部对象(acselectionsetall)8 ?; ^" i; J5 J$ y$ L, G' F7 E, @
2.选择上次创建的对象(acselectionsetlast)
% [6 Q8 n+ r6 ?" x( J" m3.选择上次选择的对象(acselectionsetprevious)% b6 a: x/ x M3 \
4.选择矩形窗口内对象(acselectionsetwindow)
+ k( ~! @2 m) E# x# W5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
* [ Y( I0 J6 ?2 \( B& O* |还是看代码来学习.其中选择语句是:- C- i" j3 T$ i! [6 J o2 ^
Call sel1.Select(Mode, p1, p2)
! C' f- N& R5 U, fMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,- D$ q, L% d! u9 n+ ?6 h/ k
Sub selnew()
1 X1 H' M8 o- A5 ?# F: B) x: _' iDim sel1 As AcadSelectionSet '定义选择集对象6 X' E ?! K- a# }$ L
Dim p1(0 To 2) As Double '坐标1
+ t: h( R. x5 ~9 c$ B# VDim p2(0 To 2) As Double '坐标2
/ v7 ~7 j2 A* ]0 |. I+ }p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
- h# a! {1 A- V9 |4 d+ R' mp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标16 w4 ]8 r+ [" ~
Mode = 5 '把选择模式存入mode变量中
1 }! `) ?1 h9 ZSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
* S% K( o. R' y" O1 B, `" |Call sel1.Select(Mode, p1, p2) '选择对象) p$ T6 t8 o/ G0 j! n
sel1.Highlight (ture) '显示已选中的对象
0 y' r; ]* S- h2 _8 }5 UEnd Sub |