Autocad VBA初级教程 (第九课:创建选择集) & h0 h- d' S. h; ~4 r
$ U0 o, c2 p$ v( r 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.1 P* e0 F) T7 t I% S( B q+ t7 I
- v& p U" d/ f: F' q
Sub c300()- q0 z0 k. z/ z) b
! q; w ^5 K1 B( R' N9 I1 ]$ S9 fDim myselect(0 To 300) As AcadEntity '定义选择集数组
% F$ s4 }8 V* K# ?& |( g! M" p/ eDim pp(0 To 2) As Double '圆心坐标( Z8 |/ I0 e0 c f: j0 e# k8 ]
5 e# q4 w7 n" p
For i = 0 To 300 '循环300次
; n3 g4 ^2 L) z' @$ r1 O( Q6 }& p. ]pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
* O4 Z& L2 q+ I# v! ESet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆$ T) z, B# v) j. |8 \
Next i0 x" e+ t; x q( @, `- H" N+ x
. y0 c4 m1 @7 J5 i
For i = 1 To 3000 X( m2 P' z3 p+ k( E# Q" T
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10; |( d8 m8 w, V( ^% W% S
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
+ ^) z" s6 g; T, G; q& nElse
- e2 T2 t1 H: vmyselect(i).color = 0 '小圆改为白色
' R& `8 M. b: k# x& H9 MEnd If) I! y) V B9 ^5 V$ ] R6 m
Next i& `8 w5 V8 [- t1 m& }+ x
% o3 [; Q1 V$ }; ~. S7 L f1 k; mZoomExtents '缩放到显示全部对象
( i) S" T E [0 f' r9 e2 n; v$ z, r" r0 X& K8 e4 E/ x4 s
End Sub
2 Y9 L9 y' e8 f+ I9 q% f3 C' N% N N: u' b1 P6 B
+ p7 {1 F1 |7 A$ P8 t: xpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0* M- L$ L; ` j/ w2 ~. G6 o( u
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开3 g% B, C3 j& H! X
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数. G3 F; z( {" G
, }3 ?. O( V% O7 U& i2 X6 F7 f, GSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
+ D; \4 N a b" ?1 i+ a这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
# K$ b5 q8 E; J/ }' T0 W1 J2 ~7 Z q( n/ d, f+ d" ~
2.提标用户在屏幕中选取
3 I( s g: h8 u1 ]: c- i选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
" S3 H, v2 Q: P下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
9 L% n; `8 s( H p, ]( R3 Z( e* ~# _) |' F( G3 n
Sub mysel(): y9 p) {4 j& _; Q$ C
# y( w2 B1 T% D# B8 l* L# U
Dim sset As AcadSelectionSet '定义选择集对象
* @, b z; `% b' K4 E/ Q3 xDim element As AcadEntity '定义选择集中的元素对象& D5 n9 x7 x, _8 {
' J# Q+ K `4 t; x( j5 g" D
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集& n" z" \/ R5 P6 t3 u
sset.SelectOnScreen '提示用户选择
- U( p$ d3 F6 v& F6 ]" i0 K2 q- @2 J0 `; j! V, c# a' t0 B, z
For Each element In sset '在选择集中进行循环
6 m$ k8 |3 P4 F3 c/ d, ?$ uelement.color = acGreen '改为绿色4 s! t) C3 H# l6 Y
Next3 S! u2 O2 q0 t0 E( Y9 u- B! G
sset.Delete '删除选择集2 F3 G3 z7 [6 V! \- J( P3 _
" y$ D: D5 k; v$ gEnd Sub
0 l( w. w! Y3 }! \7 K
+ b& Q6 X$ e6 s% x3.选择全部对象
/ Q; q2 H# T$ p% \, {2 e6 \/ ^. m/ O用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.. H; N* m, @& G: q
Sub allsel()- Q4 Y" M4 _6 J) A% W
Dim sel1 As AcadSelectionSet '定义选择集对象+ U6 w" d5 ?, o" s8 k* j9 |9 F1 M
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集
9 l) T. _: s8 OCall sel1.Select(acSelectionSetAll) '全部选中7 `. K p# i4 Q3 P- q/ Q
sel1.Highlight (True) '显示选择的对象
- Z- @4 g$ v- \/ P6 L4 O4 ~% vsco= sel1.Count '计算选择集中的对象数5 i+ [$ s6 ?# W+ ^; g Z
MsgBox "选中对象数:" & CStr(sco) '显示对话框; S# t8 ]4 h* ~$ t% Z( u. }9 n- U
End Sub
; J! k4 E Y6 L( a! L8 u
6 B! G4 K7 x; W4 q3.运用select方法
$ z1 ?2 ^; d8 |/ ], l2 ?6 i6 ]: ]上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
7 l' r0 b U& _. U2 [1:择全部对象(acselectionsetall)" Q. ?' m5 U4 d8 V! ~+ w1 ?0 J
2.选择上次创建的对象(acselectionsetlast)
, C$ I1 D Q- \5 m5 C, Q$ B3.选择上次选择的对象(acselectionsetprevious)% ^: @+ p+ _. r# ?4 @1 Q
4.选择矩形窗口内对象(acselectionsetwindow)
# q6 J% P2 Z9 W; [* l7 d5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)# i2 B. d F1 c4 ~1 ?# d$ j8 u- N
还是看代码来学习.其中选择语句是:
1 W( ^7 ^+ E1 @$ B1 @1 TCall sel1.Select(Mode, p1, p2). y5 x# [0 d3 m! f
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
8 i; N2 L# t1 n5 L; u, ^Sub selnew()& T6 O: j* l( \$ c- ?2 @
Dim sel1 As AcadSelectionSet '定义选择集对象3 ~5 g9 A7 G: i
Dim p1(0 To 2) As Double '坐标1: V& Z" J G: b4 l9 Y- _& C
Dim p2(0 To 2) As Double '坐标2$ s1 Y5 K9 m, a( K; y
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
/ v4 N7 C: M4 ~p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1' q6 S1 l; p5 i" t; G6 S, N
Mode = 5 '把选择模式存入mode变量中- I: K4 R' r" {( A: y$ L& C
Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
( y4 }& I% t! `6 v% `3 N& O2 JCall sel1.Select(Mode, p1, p2) '选择对象
2 Q5 Q& k3 f3 \sel1.Highlight (ture) '显示已选中的对象1 O* h* G& p7 m$ C; b* @: R
End Sub |