Autocad VBA初级教程 (第九课:创建选择集)
4 r0 t1 ]5 O% H n4 y/ p% b1 o" a) o1 Y9 M% s( n
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
9 w, W( [: s @( F% z: ^9 o* i! h5 E0 C, l
Sub c300(): r* D! k* P0 W; g$ e1 `
* Y1 u' C* U+ j" J) l
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
8 J! z+ Z$ ~2 sDim pp(0 To 2) As Double '圆心坐标
2 r* b' c; m; }; t' A# h6 V N/ x0 H" D0 n9 _- Y
For i = 0 To 300 '循环300次8 g0 e- H8 `+ O6 I
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
! K, Q, l$ i- e5 I; U" C _Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆/ X3 g2 _8 c* o5 `9 T6 h
Next i' u" p, N- l" T( H
* ?8 y2 r; X( H ]* j3 A. RFor i = 1 To 300) t+ l+ @& N5 w/ i' o4 r% v4 n
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10! A) [4 t) S1 L" N4 s
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数2 m$ e$ A% p: O* ~+ |$ v
Else
5 p, u% O& c; R# A/ V) o3 o g, V1 omyselect(i).color = 0 '小圆改为白色
5 l2 n6 f( o; [$ X/ IEnd If: F3 U H) E z) K; K
Next i; e, X& v" K) P
6 `: }* n- I" G8 a# ?ZoomExtents '缩放到显示全部对象
3 u4 u6 ~, \, m% A5 P8 m$ a% b- {6 j& I8 d$ i" E/ N! w9 L
End Sub
/ z, R$ f, g" P! {! _! D8 @. ^0 I
6 T/ v4 m, c( h. [pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
- d3 r E5 t% ]: M0 G4 ^$ q+ q这一行实际上应该是三条语句,用三行合并为一行,用冒号分开* m. f) K& I9 G; Y0 s! k# _
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
( A. _- P5 o; X# {' U- S- K2 F) g$ l. H8 Z' k( Q
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
$ `. m5 r7 f, ~; D2 q1 L; B0 J3 Q这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集., g3 ~! _0 v. t6 I4 r9 t
8 u- d% F" d- F2.提标用户在屏幕中选取5 U* d+ S2 | v) g* L0 P
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.8 b4 i/ n6 k( \9 n X; g& w6 e7 A
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
/ L+ p2 P( t0 M' Q: {' I0 J5 F5 v% O! U9 i: c# S+ x" X
Sub mysel()
/ q: j5 u+ v. I0 H ?0 b+ D6 A
0 I2 m8 U/ \" b, fDim sset As AcadSelectionSet '定义选择集对象
) F/ }" q! C2 f9 TDim element As AcadEntity '定义选择集中的元素对象
! F; T+ z7 z+ p) K0 t; c7 s$ q3 t) G) p! [; ^# r
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
2 w% u/ A2 O/ fsset.SelectOnScreen '提示用户选择/ [: J/ J3 O# P" Y' X" f6 `) ~
& q' m4 _8 M) t* DFor Each element In sset '在选择集中进行循环0 h. ]" w$ W) ]0 s
element.color = acGreen '改为绿色
J2 L! `3 v" Q% K) h: \1 lNext6 c# T& i5 i' q) ?0 L
sset.Delete '删除选择集. H# u$ \# S/ F, U8 n, Z
0 b$ N0 l+ d( O! m% N$ K6 AEnd Sub
/ x& H" w+ Z# B, ~* g% t# R- L Q9 W; j
3.选择全部对象+ O! K+ \9 K1 B. x! H0 E2 N
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
0 q- J$ X# ^, j0 v- f+ I9 l8 P! s, FSub allsel()
$ z$ p3 @* z1 k9 XDim sel1 As AcadSelectionSet '定义选择集对象
5 }: U. `- C% H9 m' m3 J2 C% \3 PSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集) n; h, k7 i: A9 W
Call sel1.Select(acSelectionSetAll) '全部选中
6 _& x$ J4 c, k& A; osel1.Highlight (True) '显示选择的对象
; V) L5 V$ M6 F( R& b0 m `sco= sel1.Count '计算选择集中的对象数
7 j2 j6 i! U3 Z$ h8 |MsgBox "选中对象数:" & CStr(sco) '显示对话框5 P- C0 N; O- ^4 F# `9 E H+ Z
End Sub
& `! l. l# t/ e5 v6 I
# ~! n; c1 W2 c6 a& G) Q* q- x: k6 I3.运用select方法
) y% f9 {9 j* D! e上面的例题已经运用了select方法,下面讲一下select的5种选择方式: T& [* M) K9 ]$ s
1:择全部对象(acselectionsetall)
$ N+ Q0 M K2 A- E! w2.选择上次创建的对象(acselectionsetlast)+ F) g& }% k8 G0 r' c' i
3.选择上次选择的对象(acselectionsetprevious)$ q6 w' j' r& f2 J/ M
4.选择矩形窗口内对象(acselectionsetwindow)5 G8 `$ Y# j" i- P y3 [# n1 F
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
2 J( h; U: s4 w6 t还是看代码来学习.其中选择语句是:( A; D: {# t8 V9 P+ Y4 o& k& b
Call sel1.Select(Mode, p1, p2)8 W. [7 z7 k% c- ~0 ^# f
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
5 M) D9 W! W; F* ?" @* P* O7 f0 KSub selnew()" i0 \% J$ T; i
Dim sel1 As AcadSelectionSet '定义选择集对象
7 s& m& r+ _. I1 J' U$ z6 J9 oDim p1(0 To 2) As Double '坐标1) q/ b% l, Z; ?+ r/ g( W. `/ j( _
Dim p2(0 To 2) As Double '坐标2
- e0 h W6 t4 ~; a+ ^& yp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
8 G/ K7 ?, Z3 Ep2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
8 @- N# y+ `) @5 }9 }Mode = 5 '把选择模式存入mode变量中
+ j/ f2 j7 U6 S1 I/ z5 jSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集% K( d7 u7 b5 X* ?- f8 l
Call sel1.Select(Mode, p1, p2) '选择对象. T4 H# V v5 D& g
sel1.Highlight (ture) '显示已选中的对象
9 R) O# ?; o' N" a& |End Sub |