先简单介绍两条命令:+ ]8 Z; C! U/ X) m
) u% k l: p) }7 K" k# D' w; ^+ |
1、这条语句可以建立图层:- e% |0 y4 T9 J5 W" A
ThisDrawing.Layers.Add("新建图层")9 j0 E0 y2 q G7 x
在括号中填写图层的名称。4 n/ X; c' @ p/ s
0 t$ u0 p0 ?) B2 ^& P2 F
2、设置为当前的图层
0 }% s# U0 D* r! G) G) dThisDrawing.ActiveLayer=图层对象6 g H/ G1 Z: V& W' A
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量% W. G0 m9 o3 y. K. G
2 @9 m, |3 |+ {% | ?) Z以下一些属性在图层比较常用:
6 l/ M6 p) v, _/ G1 M! }LayerOn 打开关闭- a) ]1 k4 M) H+ g# C
Freeze 冻结; R O! w* b" @" F4 h i9 z- l" |6 A4 ~
Lock锁定$ ?/ ^- ~% Z* g3 y! W
Color 颜色
* ?: G+ c& {: C6 r6 nLinetype 线型
! M4 r8 u v! M+ V6 ^- s/ |% a6 `# \8 J
% Y- x: ]- h" _: L" u1 @& e! S
看一个例题:
' F, ]9 x9 B& Y! w* r8 M& g1、先在已有的图层中寻找一个名为“新建图层”的图层
+ B7 P1 f3 y7 N. M3 G' _% T3 x2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
+ b& g# G+ E" f( p; G: x, A3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
3 [8 ~! C) [% C' Y8 Y! Y0 B+ C
( Y5 a' v! l; V3 p, e3 a1 M- o& F3 {2 jSub mylay()
! I# p8 A( t) @- v3 c, e
3 \8 Y* V; a- f- pDim lay0 As AcadLayer '定义作为图层的变量
7 C* J) R/ b) b+ G- b! nDim lay1 As AcadLayer
5 ^! h# w) a+ E3 T5 S, \) n
8 l% ?( W8 j, y8 m/ ]7 ~9 Vfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到& W7 j7 x% J- n/ w; Q I4 f
" W8 x2 L. ]& l8 A" [7 IFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
8 @4 v( g( {6 D7 Q8 _& X" x7 _. x3 r# W5 ]2 @) J
If lay0.Name = "新建图层" Then '如果找到图层名* r4 y2 K9 @5 V% ]
findlay = 1 '把变量改为1标志着图层已经找到
% j. E, G, N" p9 H msgstr = lay0.Name + "已经存在" + vbCrLf
: k, i8 I; i7 j- K# V/ B4 m msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
0 {/ U" b% ?# z2 @ msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
; o: d: k" T0 k9 t msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf# X |( e. ?# D5 B
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
- o3 Y4 g) l \3 _/ r msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
! z: F- e- O0 A msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
! c% ]- e* s. M g2 i msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
8 H4 F/ D: M4 b9 z: s' B' m msgstr = msgstr + "是否设置为当前图层?"9 `9 t. c7 K/ A* G9 _
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定3 L- \* }+ q. O' T' e
If Not lay0.LayerOn Then lay0.LayerOn = True '打开6 r; F L; y2 h# c* h
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
% X. S B" L3 K/ C: X End If5 D, z9 {' y5 B
Exit For '结束寻找- G' N( ]7 p9 R7 p4 a" g# X
End If* i. ~# i$ V5 B: K) |6 G
Next lay0; V4 ~1 t4 o) P2 f, n
- T* o5 d" z" x' h9 N' u3 c
If findlay = 0 Then '没有找到图层
6 L% ]' s6 @, v Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层$ B/ f0 n8 `. n
lay1.Color = 2 '图层设置为黄色
9 [/ \1 W: z" J5 u; w0 R; k* e . W- R! k3 R$ j
ltfind = 0 '找到线型的标志,0没有找到,1找到! c& f3 r7 t( s3 N
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
+ d1 v4 k) _- ` g6 e! E If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
Y2 ]6 q& N2 T, ^1 X& o, \* a ltfind = 1 '标志为已找到线型9 [; J0 w2 C6 e2 h( P h
Exit For '退出循环
- s: z, R& s5 N1 U6 a1 G3 {" c3 N End If! X4 ?3 q" ?9 c8 \" l+ m) ?
Next entry '结束循环
( N& y" ~3 J: M$ k9 _. f4 P+ x
Q' {7 F* _' C& ^5 F If ltfind = 0 Then '没有找到线型! q. H3 }0 Z z. C3 r
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
6 b7 d: `% o0 X; Q9 t5 E) M& Z End If
* K- v" }) U c g lay1.Linetype = "HIDDEN" '设置线型' T2 B8 K- }% b
$ j* P, e+ Y2 d1 |& x
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层% E* J: F1 w0 f3 Q
End If
9 n8 b3 ]1 A% X3 J! b$ c
0 L- @: `' J2 M! ?% J0 p" mEnd Sub5 V- I* W" H( s* n& e4 ?5 y& I) H" i P
" `8 k0 C* R5 I8 N$ c& r+ i9 l! ^
在寻找图时时我们用到for each……next 语句' f; V3 d! Q7 |+ }& `* b1 |
它的语法是这样的:
/ @ g: p( _; pFor Each 变量 In 数组或集合对象
$ i1 w: Y2 f* i) I4 T0 L……2 C+ [2 n; [9 {8 w9 b, z5 }
exit for
0 [. n$ o6 I8 @0 z" Y1 C5 \……! N ?( n+ D' t/ |" }, v7 o
next 变量
2 p' ^) W! }+ M它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
3 m9 q, L* P) b% O* q" c9 t在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。/ t& ]4 V' C2 x& j5 s& d
+ h; r- k- U, vIf lay0.Name = "新建图层" Then
4 M8 V0 ~" t" ~* h! r. [$ R! Rlay0.name代表这处图层的图层名# q- x/ K* X4 l* O, [; H
' V) m. h5 n3 r& q0 BIIf(lay0.LayerOn = True, "打开", "关闭")9 i) o2 m( f7 d8 q# I" ]2 t8 p
这是一个简单判断语句,语法如下:! Z, k! @% t0 n) P
iif(判断表达式,返回值1,返回值2)! y4 I- i4 z7 C) s! c
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
) C j }. E1 D2 k2 z% M' {9 N& ^, ~4 i+ V3 g
MsgBox(msgstr, 1)
; q3 ]7 z7 g1 {: YMgbox显示一个对话框,第一个参数是对话框显示的内容! W, Y% x5 U5 n) e/ B m
第二个参数可以控制对话框上的按钮。
: ?4 r5 e0 _! r0 ~: w/ F9 k" T0 只有确认按钮
, a* W1 ?, M* u8 Q, u* j# J1 确认、取消" `. D9 Z$ _$ r2 x
2 终止、重试、忽略
- t+ ^- c. Y3 L1 @3 是、否、取消/ T4 `1 d$ Z4 |8 M2 }
4 是、否
/ r; I+ n- w3 ^; cMsgBox获得值如下:
6 H0 m0 j$ {! N' L确认:1
2 c/ ^6 r: \5 S- M取消:2
0 |( ]' h8 f" l- T5 Z终止:3
- K* ~- S9 `- ~8 o; Z t# I1 K重试:4+ E; z" _, d- n( I% u
忽略:5
& C+ |/ F! q0 A4 d' ~; _! N是:6; o& G" l4 h+ a$ b* s% A* v1 U
否7
) b( e; O2 h% _! s2 d! b1 ~0 \/ G初学者不需要死记硬背,能有所了解就行了
o1 h9 Q* u$ J& _6 A( I
8 \, L: t% c AACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:( M6 @' l5 q2 H5 A* R- ?, x6 G. I
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" , l+ B9 S4 U4 `* h& z1 H
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |