Autocad VBA初级教程 (第九课:创建选择集)
9 x4 ? R: E# [1 _* j" s2 d+ B% x) O
1.在创建对象的同时可以直接引用.以前的例程中已经做过多次了,现在复习一下,看例程:先随机画300个圆,在画圆时直接引用,然后再把这些圆根本大小修改颜色.: _$ _4 t# }8 W/ R
( `5 B6 s# g- O# z
Sub c300()" h$ f/ b1 } ~6 [
; \& h6 p k8 C7 d+ aDim myselect(0 To 300) As AcadEntity '定义选择集数组
+ _" _9 f$ A! i) YDim pp(0 To 2) As Double '圆心坐标5 }& ?6 J$ G: Z3 T* l
$ ]" P2 w1 y$ Z7 c! V! NFor i = 0 To 300 '循环300次5 {! j: i1 z7 {8 f: h& h
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0 '设置圆心坐标% @- ]2 d3 X& I) o$ Z( K
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1) '画不同大小的圆5 w' h/ E$ A7 b% y$ h
Next i
7 Q+ |0 o' ^( Z9 x+ f) c& m( _* v+ N" R A$ y: D" Z2 W. F
For i = 1 To 300
# N# T9 O H9 Y/ r# a1 LIf myselect(i).Radius > 10 Then '判断圆的直径是否大于10- k. M' H s5 O" ~4 _
myselect(i).color = Int(255 * Rnd + 1) '大圆颜色改为随机数
3 U$ Q- I. W9 `6 TElse
' o# _' ^/ x T) \ m3 _myselect(i).color = 0 '小圆改为白色; o6 W% C0 S6 z4 L% E/ V2 g$ ?' Z
End If
8 O; h4 T( \( iNext i( g) f, Q& i/ D& W: ]# @* y( X% |
2 c3 B& W) H# I8 T
ZoomExtents '缩放到显示全部对象
& j# }* k: f: s: z) ]
$ E& f. F5 s2 g& P% v; o, x( cEnd Sub
- g2 J9 E y- H% h7 E9 Q g) ] h/ C0 J6 r, _
) j1 k" h9 p ? a1 y0 M" V; \3 m8 q
pp(0) = 3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
: g S4 G5 Z S: V5 k这一行实际上应该是三条语句,用三行合并为一行,用冒号分开4 ~; o! d0 _1 Z5 Z
rnd是随机数函数,它的数值为0-1之间的小数,3000*rnd得到的数值就是在0-3000之间的随机数
, }; j h4 ~" c* ^+ T( Y6 A1 E) I9 F* p
Set myselect(i) = ThisDrawing.ModelSpace.AddCircle(pp, Rnd * 30 + 1)1 c+ R; a) G" U% P/ }; p
这条语句的作用是以pp点坐标为圆心,画一个圆,半径是1-30之间的随机数,赋值给myselect选择集.9 {0 M8 `0 O% L) Q% R# j7 K( g3 _
& N8 K3 g! m y
2.提标用户在屏幕中选取 Z6 L6 A& t. W) B
选择语句这样写:Set sset = ThisDrawing.SelectionSets.Add("ss1"),其中”ss1”是一个选择集名称,这个参数可以随意写一个,注意不要重复就可以了.
- S( A+ T9 p+ R& b0 L8 o下面的例程是让用户选择对象,然后把选中的对象改为绿色,最后把选择集删除- t! d4 p) p* Q8 ~4 o: {% U. D: s
' ?( {8 v* j9 a+ j2 }
Sub mysel()0 o j4 R* D; ^8 a0 n/ }
# r( g4 l' l' W* ^5 GDim sset As AcadSelectionSet '定义选择集对象
+ a; ]: }( [- V- r* F) F$ @& G0 GDim element As AcadEntity '定义选择集中的元素对象/ W6 y) w# J" o$ q j
" P% k/ A0 f( |: p0 O+ dSet sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集2 l& ]# C1 O) t+ l
sset.SelectOnScreen '提示用户选择
1 D y0 Z a, v H! M! {: S8 d$ X! l w8 y! E
For Each element In sset '在选择集中进行循环
3 w% H" S/ w3 [element.color = acGreen '改为绿色
. D% D- V' X5 B2 U% vNext
2 E. V" a9 j" d4 xsset.Delete '删除选择集
" M( C. a' Q/ F5 ]7 p
) S, g7 F* ?5 f2 W& v+ K# P+ fEnd Sub+ I, e: j' D8 H5 f4 c" j
0 M3 ^0 j" t/ D% m. m# k, A* o- ]3.选择全部对象! r6 J c }3 F x) M' x0 y
用select方法,参数为acSelectionSetAll ,看例程,这个程序选择全部对象,显示选中的对象,并计算对象数.
( r b+ k# d1 h j6 Y7 w( t& @5 ASub allsel()
/ ^7 d. u( E# W5 Y3 kDim sel1 As AcadSelectionSet '定义选择集对象
% S, ^ d' B5 r5 s# TSet sel1 = ThisDrawing.SelectionSets.Add("s") '新建一个选择集# _) K; I! o! S: @4 `
Call sel1.Select(acSelectionSetAll) '全部选中
9 X: L1 Y0 w5 l: t7 M1 N* E. J: W2 bsel1.Highlight (True) '显示选择的对象2 z: v) H, J2 U* M7 o. T
sco= sel1.Count '计算选择集中的对象数
8 |! V: w) X8 M$ ~8 }2 h: mMsgBox "选中对象数:" & CStr(sco) '显示对话框& H1 y( c/ d/ G1 h' p. r
End Sub7 _! b4 W# O7 Q s7 C# `6 N
( u9 z) a+ g1 X1 T4 j( B
3.运用select方法, A" {5 o6 P7 A0 ?- p3 i/ }9 Z
上面的例题已经运用了select方法,下面讲一下select的5种选择方式:
8 e, c, r5 `: |) J( V) m2 X1:择全部对象(acselectionsetall)
/ C. v+ j5 [; _; R2.选择上次创建的对象(acselectionsetlast)
$ t% u% u2 G2 D3.选择上次选择的对象(acselectionsetprevious)/ H6 b: D$ s' i4 \
4.选择矩形窗口内对象(acselectionsetwindow)" ~# a- k0 Y5 ^
5.选择矩形窗口内以及与边界相交的对象(acselectionsetcrossing)- `0 [9 j/ L; c8 m
还是看代码来学习.其中选择语句是:
! k+ } m. R& s. g; M6 ]2 QCall sel1.Select(Mode, p1, p2)% L! ^3 F5 G* `) [9 X: H9 i
Mode已经定义为5,也就是选择矩形窗口内以及与边界相交的对象,p1和p2是两个点坐标,
k' x0 V* r/ m* nSub selnew()
* F! E N. ^) J( g0 l0 xDim sel1 As AcadSelectionSet '定义选择集对象
- I8 v) N+ c) l- [$ G0 ADim p1(0 To 2) As Double '坐标10 B4 \# r6 N& O$ J+ F0 d( z1 Y
Dim p2(0 To 2) As Double '坐标23 Z7 j1 ~" D$ m& B- `, b, w
p1(0) = 0: p1(1) = 0: p1(2) = 0 '设置坐标1
- ]* `) r& L+ ^( Bp2(0) = 300: p2(1) = 300: p2(2) = 0 '设置坐标1
: {& W) P+ |: nMode = 5 '把选择模式存入mode变量中
6 i' D0 f# W( d; i( F, BSet sel1 = ThisDrawing.SelectionSets.Add("sel3") '新建一个选择集1 a, L$ |& x& V5 Y) @7 _' L# l O( D8 q
Call sel1.Select(Mode, p1, p2) '选择对象
9 }: a8 ? S$ z+ Fsel1.Highlight (ture) '显示已选中的对象5 J# G" s% O3 c' H* m, \
End Sub |