Autocad VBA初级教程 (第九课:创建选择集)
9 ^8 v; a1 u% K7 J
! J# P7 [0 t3 t% B: z) s 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.
$ h# i/ K! ?. w* `. P# ?' Q) k
& d6 C) `8 R' V: `$ ~. t% y0 `Sub c300()
% g; e! t6 `2 i, r+ P0 v" e
2 i$ i, M: n5 S; ~# ODim myselect(0 To 300) As AcadEntity '定义选择集数组
: J' P& G+ x) y$ Z* lDim pp(0 To 2) As Double '圆心坐标/ q% w6 ^- Y7 I k2 q
' t8 O6 l l4 n
For i = 0 To 300 '循环300次5 @/ G' {+ L1 q
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
4 _+ T( d% D# P8 CSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆5 R- [- y+ P' V& P- V9 T
Next i9 Y$ a4 }0 i( W1 K
+ `) F/ C5 d, ~6 y- T1 c% H
For i = 1 To 300, V8 {! V8 \1 o4 I$ b# s
If myselect(i).Radius > 10 Then '判断圆的直径是否大于10
& r9 a6 M" |" d6 _ _9 h/ pmyselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数( }" @% n* T1 p! b
Else6 W @! \% X( w3 z; P9 K- W
myselect(i).color = 0 '小圆改为白色% C- c4 ?/ L. P/ {% T* c+ {
End If
- h* |& {4 c1 G a6 y6 UNext i+ S* G2 q; P0 D
# x/ Y ~. z# _% p/ ?
ZoomExtents '缩放到显示全部对象& ~3 ~" n+ |# F2 g; m6 f, C/ k
, k: ^; ~" Y+ d/ e+ f) h) v" T. I3 XEnd Sub, ^6 ^" ]2 }+ n4 b1 d, N
: R8 I+ S9 Y$ {) p7 z- n6 @ Q/ V+ e. D2 y
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0! Z" j7 p4 {& t6 h
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开& @ ?, |: H" z+ j+ y1 Q( m
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
3 F9 S/ o4 ]6 a, o* k- O6 g! p7 v% B1 z+ `6 k9 w9 E* p- Z7 w: e
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)
8 n) |0 n# P1 ~! ], N7 C; s这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.' R& J- M( V* P/ n; i3 a. {# U$ ~. y
6 I, v9 m5 f7 w6 [9 |: B( m
2.提标用户在屏幕中选取0 S: P" y- T; t9 X& [
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.+ Y/ W$ V/ a8 w* c2 @( n( K
下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
1 k* k u1 t6 a p! Q, H
! F" v4 ?, j4 F7 r7 j' d# ~# {Sub mysel()+ b/ w. [# v) R7 L) `2 g
9 I2 Y% u8 R9 `: z8 h& T% S- o2 `1 XDim sset As AcadSelectionSet '定义选择集对象
, `& u" B( x1 ^* U9 gDim element As AcadEntity '定义选择集中的元素对象8 a1 m1 Z/ W' w" |7 q
) C1 B- ]% i3 A6 E' ]% m6 YSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集" H# T7 X, n' x
sset.SelectOnScreen '提示用户选择9 I! M6 l% {! O2 v# Y+ X* G% ?
+ k! H% y6 D1 i- ? ?1 G& D. x
For Each element In sset '在选择集中进行循环
5 h- d4 z3 T) g4 jelement.color = acGreen '改为绿色2 M8 l' R& F" s1 d$ s
Next
7 W; S2 f! g; M# Nsset.Delete '删除选择集
\4 M3 P* y/ f g7 Z$ g
; w# g) u0 Q, |( d# E5 qEnd Sub" W" R4 D0 M2 E+ {
6 @9 T1 n" X/ X8 p: k0 S
3.选择全部对象+ g9 i; X$ J! P5 O0 T* o& s0 r( T, Y
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.% [. H! x8 O, X' T: ?( l
Sub allsel()( ^4 i2 Q$ q) {, E* v
Dim sel1 As AcadSelectionSet '定义选择集对象
$ y- p: {7 K) g; P) U3 i0 v- vSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集# ~: ?0 X8 J _6 L, V/ f( U, g& _
Call sel1.Select(acSelectionSetAll) '全部选中
9 Q) }1 L4 ^( x8 R$ G" E( Tsel1.Highlight (True) '显示选择的对象
: K. V- y- P; X0 D1 K/ A& hsco= sel1.Count '计算选择集中的对象数
4 i& @; r' R& m+ {; z" ~MsgBox "选中对象数:" & CStr(sco) '显示对话框5 r" y1 L) Y; F# a$ g7 v
End Sub
* m$ W+ K9 R" c/ U0 L( P. X9 b$ @" E+ b' d/ S$ H% m0 y
3.运用select方法6 |, ^$ I& l, G: W, l# U/ J
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
; ]- e5 i1 s2 ]) ~( I' n! c1:择全部对象(acselectionsetall) c3 M+ n, A' j
2.选择上次创建的对象(acselectionsetlast)) n( u6 ?- d( }' U& s9 c
3.选择上次选择的对象(acselectionsetprevious)7 ]7 Z- {/ x8 K# O6 Y* _+ }0 C
4.选择矩形窗口内对象(acselectionsetwindow)
8 W9 a5 S9 h$ M0 y0 M b5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)
+ {# R+ g( ^" _1 S还是看代码来学习.其中选择语句是:
+ \ y) m: M2 D3 f- E5 G% `" }$ J) B" LCall sel1.Select(Mode, p1, p2)
- U2 h- M* Z1 @Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
6 [$ u: [7 c1 r3 v: TSub selnew(); k6 @0 T0 J$ J6 ?& a% T/ A
Dim sel1 As AcadSelectionSet '定义选择集对象
) O( L, S( \& XDim p1(0 To 2) As Double '坐标1* Z9 c7 W- v7 m) x, ?; `
Dim p2(0 To 2) As Double '坐标2" h3 a7 n# ^( F6 ]* x5 x( _
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
( r* }# A( P: Y& C9 d& y3 p) U2 N* vp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
' u3 v( g. P S, IMode = 5 '把选择模式存入mode变量中
* W a% H+ c- C) s8 o5 `8 jSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集
* A& Q3 V. R* v; ^Call sel1.Select(Mode, p1, p2) '选择对象
( e) b( E( |; G. d+ R- k; v8 ksel1.Highlight (ture) '显示已选中的对象
" g' ^7 i9 d; {' s0 NEnd Sub |