Autocad VBA初级教程 (第九课:创建选择集) 1 Y3 Y8 c) }# f! J, N
+ a$ U' m/ T; O2 l
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
9 b |' p3 R, ^( W
% i' S* e3 f% i4 {1 rSub c300()
$ e7 L7 I' Z* b" J8 n2 W* i0 w* @) @+ m$ _
Dim myselect(0 To 300) As AcadEntity '定义选择集数组
" {" r3 A' ]( W" R! [8 qDim pp(0 To 2) As Double '圆心坐标
L( _! A; `1 j" Y1 m# s9 s0 `9 n9 \/ q6 I
For i = 0 To 300 '循环300次4 S1 o, x: B7 }+ H
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
1 ?0 L) G) x* ESet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆0 k$ O" \" u! T. l2 [
Next i5 c: I/ z9 E: n2 b" w0 T% N- s
1 f8 r! N, v6 z/ d: d5 s7 r. B+ TFor i = 1 To 300" ]3 ^8 Q3 q; b
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
3 G: a( C& x) f \0 Z) x( mmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
" `2 ]9 q, q& W$ rElse
U. n% v: R- k! x, y2 O* J3 Qmyselect(i).color = 0 '小圆改为白色
' `. w3 {5 g4 Y6 m5 J+ oEnd If
: \0 y) ]2 G1 pNext i; g7 C( q! k; m$ C( V9 z! z# o
+ q0 ^0 I( w& c0 T1 D4 _( Y
ZoomExtents '缩放到显示全部对象
+ ?1 s: q" W5 Q& V4 M; T9 T
$ y q% t/ n( k& r% N# vEnd Sub
+ S6 D! X6 f- c; `" l4 J; U u$ B9 r6 N2 `- p* A' F: m# g
7 M2 }5 H; M7 ]5 b% K, b4 g
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0; D1 _7 b, F8 v% g6 x+ G
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开
" Q" V: G2 @' Urnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
; ^: H/ A; c6 h3 S. V
" q1 ? V7 s" M3 g3 QSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
9 \7 v/ G& ^8 K. F9 J: N这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.! x& O ^1 k2 \
" K0 s; H" q: ^; C; ]# _- U
2.提标用户在屏幕中选取0 g `+ V- X& f( ~! g: Y
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.) i/ P& ~2 R) T; n# z, F
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
1 f3 R: ~) Y5 @; i S2 N) Q/ w8 R0 Q' ~" ~* d u
Sub mysel()4 q- h% [2 E; U" s/ o
& k G* I- C: s: Y9 @' VDim sset As AcadSelectionSet '定义选择集对象5 c: r& q& ^ _+ d
Dim element As AcadEntity '定义选择集中的元素对象
4 V9 _1 _' ] T9 y( l) f) l# S* J2 P; k# V
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
, N, U d) s9 e" [: [sset.SelectOnScreen '提示用户选择
- o% h$ O0 s4 p8 \6 ^. A. g7 L. h' Z+ C/ D/ I# g6 p
For Each element In sset '在选择集中进行循环
+ a# t6 }. N6 M. Z4 uelement.color = acGreen '改为绿色
- Q, ]9 G" n5 M% iNext) W* M7 ~* M g
sset.Delete '删除选择集
& j6 ]6 j$ d E5 W B9 w7 ?/ V, }
! u0 g* m: W6 p* }4 X* W; R0 b% ]1 MEnd Sub* e4 |# ~4 e# @3 A5 k; }
) w, @1 U2 n) c6 V$ Y5 J3.选择全部对象( s4 P7 {3 [; u' P
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
* q0 b& p' I- f' `' t& p+ k: OSub allsel()
, r1 t9 ? z+ {; {( R# ^Dim sel1 As AcadSelectionSet '定义选择集对象" A5 P- a# u2 x
Set sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集# M! Q; h& p8 b% }4 M$ b7 K+ N
Call sel1.Select(acSelectionSetAll) '全部选中
% u9 f/ L6 x) U; Q9 c2 dsel1.Highlight (True) '显示选择的对象
: v1 L8 U& J. W* Qsco= sel1.Count '计算选择集中的对象数
. i7 v+ Z( `4 O2 ^' {: A( SMsgBox "选中对象数:" & CStr(sco) '显示对话框
; ~6 d9 d ~, B qEnd Sub8 q# u. i4 D* f
9 R. c; V5 a, h8 a; n3.运用select方法5 _+ O3 w5 M+ m) `! s) e" b
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:& M/ {' J- t% {/ C; X! R
1:择全部对象(acselectionsetall)
' q3 b8 z: x& h( g3 M2.选择上次创建的对象(acselectionsetlast)9 y8 X/ R' a& O2 w0 m
3.选择上次选择的对象(acselectionsetprevious)
, R0 J" {& a6 C% }4.选择矩形窗口内对象(acselectionsetwindow)) h$ m! V9 ~2 }# t
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)0 x8 |0 _, j- v5 u% r
还是看代码来学习.其中选择语句是:4 ^4 }: q* _ K9 m5 g. ]7 H* ^8 K
Call sel1.Select(Mode, p1, p2)
' R8 }6 J7 u( W3 j+ dMode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,; e, p; v O2 \4 r" ^
Sub selnew()
5 Z2 W' X& [( WDim sel1 As AcadSelectionSet '定义选择集对象
6 G f( Q0 ?0 G/ wDim p1(0 To 2) As Double '坐标1
# \& Q b2 d! q3 |Dim p2(0 To 2) As Double '坐标2
& ^6 l8 f @5 @, N* S* n6 k7 ?4 gp1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标19 `5 A5 w6 g8 |' X j/ y3 ^
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
& H6 P5 C( r; pMode = 5 '把选择模式存入mode变量中
/ I7 Q2 V( l6 YSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集7 r% U) c! f g& A z8 R G
Call sel1.Select(Mode, p1, p2) '选择对象
5 P0 i8 e: P' ?/ X+ psel1.Highlight (ture) '显示已选中的对象2 \. ?7 F3 D2 O5 z" o; A
End Sub |