Autocad VBA初级教程 (第九课:创建选择集) + C- R Q% a2 P( N7 Y' q
8 Q* r( W% `/ f) c: Q6 F0 Y 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.2 E4 f# n* E! ]& K
9 c: U1 }; ], X+ n6 A! _( G
Sub c300()/ M7 a# a- z) I2 ~
" |1 y$ h; z/ ]. n( @
Dim myselect(0 To 300) As AcadEntity '定义选择集数组$ Z+ s' k/ A1 D5 y( j7 s
Dim pp(0 To 2) As Double '圆心坐标
/ D, i6 p! S1 D4 B2 l# V" M o3 l* J( S
For i = 0 To 300 '循环300次5 ~0 F3 h, ]5 d2 J) u
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标2 I5 o$ t: u/ n* U$ D, Q8 g' e$ }
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆! p2 @! p; }; b1 Y* P: G( O, D9 \
Next i
4 ^5 @/ A/ k' ] Q* U& I4 j5 e; z( h- G5 c5 h( {- T
For i = 1 To 300
, s2 ~! U6 |/ `& tIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10
. e& [ E* i4 p4 m! c" Omyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数3 m7 D9 _/ W6 t: a0 O" E
Else" x8 @& t5 C/ g
myselect(i).color = 0 '小圆改为白色
* r' g, h1 a: Q. N2 tEnd If7 i3 c* i5 n+ Y* D6 U! J
Next i
- R j+ o$ H$ r& i9 r( h6 D: `4 A. R. d1 r
ZoomExtents '缩放到显示全部对象1 e8 \. u# E4 a" S( J
! K6 w" t# b4 M0 {End Sub
5 b% ?8 W- G! q
, d7 H; \6 ?' S, a+ x1 ]' w
1 S4 ^* P* `3 W0 Q# ?3 ~pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 01 H4 Z: L1 D/ {" S: k. T9 K4 h
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
/ \6 k; }) i/ j9 u0 N9 n9 brnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数2 I- {$ N7 j7 N/ u5 I, g- u3 g
0 _6 t \" s) {9 v
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
* I, H l; E( j; @' d这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
6 Q% x% [6 \. ~0 [9 ]& d0 n/ t: V3 |- d3 q$ j
2.提标用户在屏幕中选取
9 N* h% r" W5 ~( d6 z. U2 h选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了. c! ~% I8 w p$ ?" P$ ]- H" Z
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除) H% n9 o* c+ o" L: m
+ B5 n( x. Z) x Z- A- @Sub mysel()" l$ C. @# S+ s1 q2 m) C+ i
8 A( Z$ s. X4 f/ GDim sset As AcadSelectionSet '定义选择集对象
: C. u8 F, p/ k) u$ Q; p; |) ADim element As AcadEntity '定义选择集中的元素对象 ?9 U+ ?" K1 r3 c( R9 d
% p( `8 D2 P D H+ u" k# @9 E t
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集& H/ Z7 h0 \7 b; n/ ~$ {/ {' r
sset.SelectOnScreen '提示用户选择1 _* T- Y; N/ A
. M4 |" o) ~7 h( O1 P( BFor Each element In sset '在选择集中进行循环8 d+ V8 r6 P6 c
element.color = acGreen '改为绿色
- ~8 O' c( T; Y4 e. i" l# Q" R. rNext& _) }. Y. a9 n* W: c" E1 b
sset.Delete '删除选择集
: n* ~( G8 R; v. ^& j
2 W% f0 G' q) o7 V6 ] A5 j- s0 @End Sub) p! k# ?- o; h( {! G- B
0 y$ P+ l: ^& T$ T3 e$ J3.选择全部对象
* y3 L# ~2 T$ ], c! F$ x用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.- T8 Y2 s- c- w, p9 E- @
Sub allsel()
: d. J/ A0 }# Q7 p% `Dim sel1 As AcadSelectionSet '定义选择集对象: b" P( o$ h- @3 [4 `8 ]9 U* U
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集( L6 m' c M8 @" m6 G3 b+ ?5 \
Call sel1.Select(acSelectionSetAll) '全部选中' y/ x/ d. w3 W+ p- B9 X$ x$ l/ B! H6 m A
sel1.Highlight (True) '显示选择的对象
% z9 O4 c8 }6 X6 D0 s0 Ksco= sel1.Count '计算选择集中的对象数$ D# \ V. I0 l0 _, D5 [
MsgBox "选中对象数:" & CStr(sco) '显示对话框2 j @+ n' g8 _: v& G( q+ K: A# q, [
End Sub
P% W, N+ a6 x+ Y0 |7 N
, j" i4 l/ N3 E( T- S9 P! o w3.运用select方法
; Y# ]/ F. E* z' ], N# V& w7 r上面的例题已经运用了select方法,下面讲一下select的5种选择方式:7 i3 U+ E8 v. E+ n5 ?. _4 l- g! ~% i
1:择全部对象(acselectionsetall)2 c- l" r. D- l
2.选择上次创建的对象(acselectionsetlast)# L g2 B# O! x, D f
3.选择上次选择的对象(acselectionsetprevious)% R% p T# b4 V1 ^) z
4.选择矩形窗口内对象(acselectionsetwindow)
0 `1 K8 W/ ?: S+ ]1 [- L5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
/ ?% q5 v* t3 p还是看代码来学习.其中选择语句是:
" b% U0 K4 e: k" B/ TCall sel1.Select(Mode, p1, p2)
( K) @( ^; c- a0 T* A: L7 PMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
9 ?) p& B& T0 OSub selnew()! }( b' S$ r! f3 w9 ?
Dim sel1 As AcadSelectionSet '定义选择集对象/ {* v) s$ B. W8 [; h$ j; e% C8 X
Dim p1(0 To 2) As Double '坐标1( ^7 o X. y# o
Dim p2(0 To 2) As Double '坐标2
- M* n$ Z6 G5 L/ G- ]9 R! Vp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1+ q% J2 i7 c* z; z2 W5 D& I' S
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
$ F: O& Z1 Q* G, P2 x" RMode = 5 '把选择模式存入mode变量中
! S9 \+ ~3 @% S# `" R, D3 jSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
4 A+ H { n+ A! Y" {6 X D0 N. XCall sel1.Select(Mode, p1, p2) '选择对象, b" V+ M9 Y$ ?
sel1.Highlight (ture) '显示已选中的对象, [% n# u9 _& t- m: N4 P' L$ i( W7 d
End Sub |