Autocad VBA初级教程 (第九课:创建选择集)
; J4 E0 i( a) X# m6 ^
! M0 T. D& u: J ^0 p$ K! D0 t; e 1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.! \1 K7 \, g" O( ?/ r3 G3 D
, f: v1 @$ P; y4 pSub c300()
) w: E# U. g: u2 S& Y3 G8 T: Z ^
9 ]1 ^' D8 g( F, cDim myselect(0 To 300) As AcadEntity '定义选择集数组; t; g' w. r" M/ e
Dim pp(0 To 2) As Double '圆心坐标
- }" s m3 g3 `, R$ W
% g/ f1 L+ {, ^6 AFor i = 0 To 300 '循环300次* O* \8 h; Z2 t0 f/ s: N
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标
5 `" N! u N# tSet myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆
2 ?3 @' B6 [6 L& xNext i& j7 z; _. J3 d% a( y
, Y6 o2 N; M- {" I G! cFor i = 1 To 300! j+ w) R# `5 O7 Y
If myselect(i).Radius > 10 Then '判断圆的直径是否大于101 Y& @- z$ o/ E& a8 ~7 ?$ c
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
6 f& c5 Y4 m8 _+ L/ @+ c+ @* ]+ t% xElse
8 B: D2 G" F6 }myselect(i).color = 0 '小圆改为白色
+ Z2 t( a5 `: k6 Q; [; _ l3 D% EEnd If
9 W3 j# N: q1 Q* C& ONext i+ |9 t) E8 ]+ i5 i3 C( X
) [7 |1 q, S6 m% M8 _0 ~
ZoomExtents '缩放到显示全部对象6 [! Y# Y% h; I0 p, ]- F% S
: }7 L) l3 d8 O z6 [; g
End Sub
; F0 R! ?6 y) G
6 a% [- w2 C, G9 Z M
4 D+ l/ _6 r- w; hpp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 03 I4 e- S) D, i1 Y' I1 B
这一行实际上应该是三条语句,用三行合并为一行,用冒号分开1 r4 F/ m, }! n4 b, r. g* C' s+ y3 m
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数/ W3 p$ J7 n3 `3 P- K
" s! r" ?# R6 G1 M6 j4 j
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)/ |& y8 Y) ~+ B2 \0 m! `6 S
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.
! U4 s9 h& b$ D+ ~% v. L2 E
2 @: {0 p: O! t" O) \2.提标用户在屏幕中选取0 o- N2 E/ f* P4 M8 h0 r# D9 s7 }
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
/ d. w6 i1 X* E8 v: }9 o: B) ~下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除
$ C, S6 m& a+ W4 c3 O; t
1 b4 u+ O! v$ L6 r" W" t* GSub mysel()" w" I Z( F# F& }- X4 Y( Y
) w# |, V( S) F8 J' @
Dim sset As AcadSelectionSet '定义选择集对象' k' w4 G {/ q% w* Z
Dim element As AcadEntity '定义选择集中的元素对象# P' o% M; m1 m/ C- v# g$ p: _
3 w2 d. E) `+ e3 h# v. A; j/ K
Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
0 m+ u6 ?4 m! D( Q$ qsset.SelectOnScreen '提示用户选择
, O) P7 g2 K* Y( {( C2 ^' ~4 \2 S* R9 {
For Each element In sset '在选择集中进行循环/ h+ k2 D7 r. ~' D X, J
element.color = acGreen '改为绿色" T6 p% v: u H& b7 D5 c9 ~' c
Next
8 M/ a1 n+ e: [8 g M7 _sset.Delete '删除选择集
2 Y6 y# z, q7 ]$ ^) Z8 L% a2 J3 L5 {* y) o8 C. A
End Sub+ c. o% x7 n4 S. c* g/ V
+ \, w: {# k* y, |7 c
3.选择全部对象3 z5 G1 P: ]4 t; h' q, ~0 }8 |$ V
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.% q8 o: s1 y/ A
Sub allsel()
# q n* k$ G" y) i/ x t6 U- MDim sel1 As AcadSelectionSet '定义选择集对象
- e# O- e% p8 u+ A4 w6 p4 MSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集" z/ n* O4 t6 R
Call sel1.Select(acSelectionSetAll) '全部选中
4 J% J& x: e5 Y, z( {sel1.Highlight (True) '显示选择的对象- k) k8 p _; L( [, M; g9 @
sco= sel1.Count '计算选择集中的对象数
X! w* ?6 x5 C7 l% UMsgBox "选中对象数:" & CStr(sco) '显示对话框# m; ?8 @! p: }" s) [
End Sub5 T$ N% p8 m. F4 Y- p T# [, V) J
7 U+ `# h! y0 \0 v+ o
3.运用select方法
b; r- C4 ], {+ h0 m上面的例题已经运用了select方法,下面讲一下select的5种选择方式:1 z$ V! J7 E/ j, P2 T. i7 T# g
1:择全部对象(acselectionsetall)2 R4 X+ n" w6 t8 x# Y: N' F
2.选择上次创建的对象(acselectionsetlast)& g: X8 h: A/ ] Y) W- M
3.选择上次选择的对象(acselectionsetprevious)
# n2 p- z; ]& A: n4.选择矩形窗口内对象(acselectionsetwindow)& C! c$ N3 y1 N) g: \ n
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing). ~4 Q8 q! R3 ?
还是看代码来学习.其中选择语句是:% U( b6 t4 N( l6 M D4 S" o- ]
Call sel1.Select(Mode, p1, p2)% M: T# \( C3 w* f8 o
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
! o1 c6 q4 ]( |3 R, SSub selnew()3 t4 x/ x3 `3 j9 ]" Z
Dim sel1 As AcadSelectionSet '定义选择集对象" A% N3 K6 Q$ ~: a" b. P
Dim p1(0 To 2) As Double '坐标1" f' ]/ T# A: Z: M
Dim p2(0 To 2) As Double '坐标24 V1 g/ M% [( _
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1& p& |. {) O; Z0 |/ {' ~
p2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
: [6 }% W3 P; y n. c; f ~Mode = 5 '把选择模式存入mode变量中
: {& Q$ V7 \- q, x1 |Set sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集6 q; Z |. k: r' `) d/ T1 J1 W. x
Call sel1.Select(Mode, p1, p2) '选择对象2 c& o- } b4 {
sel1.Highlight (ture) '显示已选中的对象
" f" i1 K1 ~" N7 ~4 ]$ SEnd Sub |