先简单介绍两条命令:, Z% |; k, P& t2 W! I
7 u1 Q5 E5 Y' F1、这条语句可以建立图层:
# u. n0 g7 N: _& i# J! r" CThisDrawing.Layers.Add("新建图层")1 @; A* x; r" ~8 D. u0 K* t
在括号中填写图层的名称。- p3 r+ O1 |* w, m- F' p3 ]
0 p% d1 W, n5 J0 T" F( a2、设置为当前的图层
) I7 x) W- }) g: i8 B- ^ThisDrawing.ActiveLayer=图层对象 f2 |& x8 D7 W8 ?9 n/ u: S1 r2 j
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量2 t$ v) D4 O7 [! I, ]! f2 n
0 G; ` c9 i" r1 U. s# \以下一些属性在图层比较常用:/ V8 k) d( D2 h. O3 n0 S
LayerOn 打开关闭: G$ m6 Y" d9 \% B7 r
Freeze 冻结
0 X d A5 W5 q( `6 E2 lLock锁定
, r' G6 d$ w+ D7 t6 MColor 颜色
: ~; v( a& F0 O$ JLinetype 线型" U2 b |& {9 H& L+ j
+ D; A, {" O+ b+ l; m
( T$ g5 q- ]5 F; \# W: x
看一个例题:. O" d' }1 r2 q
1、先在已有的图层中寻找一个名为“新建图层”的图层
. d3 h' E4 d- [0 O2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。* U# y* H: b# ]3 T$ _# V! n
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层& Z U8 `, c4 e+ s) v
0 d( e+ ]! o3 W) V( SSub mylay()/ v% q/ G* s- z( x6 t: s
. L6 b6 ^1 F+ l/ I1 g% M+ j1 }7 M) BDim lay0 As AcadLayer '定义作为图层的变量
4 W5 i% r6 k$ ODim lay1 As AcadLayer
8 K. ?( h; f: V: h* h1 c, g7 S! H/ C; Q
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
- J. N' }7 X. J6 }* ~- A& Y1 l3 ^. L, h# P+ y# A
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环 z% J7 [( P' w9 i
$ k! o( ^% F1 K' Z* I9 O/ ] If lay0.Name = "新建图层" Then '如果找到图层名
8 t) E; D( m p; t findlay = 1 '把变量改为1标志着图层已经找到
! L) O& J) I9 C& |* X msgstr = lay0.Name + "已经存在" + vbCrLf
9 E5 r+ f* Y* [4 P) Y5 H; M f% B msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
9 c" `- n4 @$ h" ^: t, |" N msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
2 c9 ~0 Q. T( x4 M) D msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
& i8 t$ w3 a% j4 T+ {. N! k msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
- T1 Z9 K2 ^1 f+ i A msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf( h% G' e. x8 ^. W
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
2 m, A9 ~* O( [: P5 f) w* @, ] msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
1 m1 |8 s3 Y" \: N9 S3 N msgstr = msgstr + "是否设置为当前图层?"1 D8 n1 g8 K2 n9 i( z) f& n
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
' \) _0 _+ V& }& z' u% L If Not lay0.LayerOn Then lay0.LayerOn = True '打开- U& O; e9 M, }" O! H& ~; y
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层" A6 I6 L3 s+ \7 b- L$ C# l% [2 U
End If( `6 m' c4 W+ s! I0 R) m+ ?
Exit For '结束寻找" f: |7 @$ n2 Q, N2 c$ ^
End If' z% L3 t, F3 o2 g
Next lay0
K4 j9 P6 ~" ]6 I; }* l0 V6 Y) D& h# F- _! q0 y
If findlay = 0 Then '没有找到图层* c& ]( N- R( y5 p$ {: {" J
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
. A! v$ @6 _: J0 h/ S lay1.Color = 2 '图层设置为黄色 D" b! d$ \, k
( U0 y0 O- |" o O& p ltfind = 0 '找到线型的标志,0没有找到,1找到; ~/ I" K" S3 T7 Q
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环/ b, h, z x1 ^' T( Y
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
' e: F& J. i- A2 `% V+ O ltfind = 1 '标志为已找到线型
. V3 m: L. {4 k; {4 g) N Exit For '退出循环
, M4 R+ c+ B, Y& f$ R- G; W8 S/ I End If( m0 O# S% ~( d; ~" S% N# ?
Next entry '结束循环
+ f5 R1 Q/ D3 J! U9 h; g, c: ?) o5 X" @. T+ l
If ltfind = 0 Then '没有找到线型
& t6 h3 |. r. U0 y) @: W' Y ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型& G, J2 z4 T& m# H7 x, l* ]
End If
# g& `- O6 m" g6 c5 j9 A lay1.Linetype = "HIDDEN" '设置线型
" ?6 q9 i" j4 W: O" r1 z; u! M* Z- \
5 t% w7 t) Q# y. m! G. O) c$ T ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层8 @& L% ` D p# j6 l+ F5 U# N
End If, n. `0 G5 F8 ?" g' ?: F- c
! Y0 q; U v7 t6 C% rEnd Sub
' {+ j7 f! d' h% V ~5 d" X; z
5 q) h/ i7 Q: ^4 B) s' S在寻找图时时我们用到for each……next 语句2 g: y0 p$ K4 [' ~
它的语法是这样的:) l3 n m: K% Z. H) t
For Each 变量 In 数组或集合对象/ C! m+ ~( L8 _0 @6 w, {; x# ^- z i
……% S+ P }8 T. b. _2 R! v% m. V* o
exit for
( g$ z2 ?. X- w' a$ t; U* l# B7 V……$ C% @! h5 i9 t) W: ?; j
next 变量
0 W: o* S: J- E$ u! P, P/ d它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层2 }5 D( M0 y7 T+ P- f: |
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
E8 h* n, i9 c [, x: j' N/ i0 `
" O1 K: R+ [+ r3 ^3 l$ FIf lay0.Name = "新建图层" Then3 @1 n9 O* S; Z3 j6 P) c
lay0.name代表这处图层的图层名9 w0 X8 I2 _. f5 ^
- ]) y N7 r/ U- w- lIIf(lay0.LayerOn = True, "打开", "关闭"): O1 H( u* e" `( A
这是一个简单判断语句,语法如下:' ~9 x4 Q, X4 c3 o! B
iif(判断表达式,返回值1,返回值2)
: m, e: h3 V/ U6 m) I当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
; v& U* x6 D9 j/ x' _$ h4 t, U' M: d; J0 |
MsgBox(msgstr, 1)
# `5 R+ P, j2 H9 e# Q, ~# O/ AMgbox显示一个对话框,第一个参数是对话框显示的内容5 x7 b! ?5 K$ m0 N# p" @+ _
第二个参数可以控制对话框上的按钮。+ a5 Z# l3 L7 I0 o) u, J% _
0 只有确认按钮
# K1 o( a7 L4 k1 确认、取消; W3 T2 I% V9 D
2 终止、重试、忽略
. M- T" }. B, ]! w8 v* H& [+ P3 是、否、取消
9 z2 H, i7 w- Z1 T7 {. n4 是、否
% m/ N) D' u0 A/ e: GMsgBox获得值如下:
2 u; \9 j# T" s4 F5 M* _5 P% a确认:1
" I0 [' X. g9 O' w6 h+ j4 w取消:2 C X, V p6 ]2 D1 r
终止:3
1 a: s' ~$ C4 i, W% m. h2 n6 k7 i重试:4
) { p p3 h, B& D x! d! T忽略:5
8 j+ J4 M; w& o是:62 x* f+ |! Y0 ~& F% b9 e
否7# Y5 L: E5 y) A3 z! t$ n$ a
初学者不需要死记硬背,能有所了解就行了9 |8 q% j4 G$ Q2 G0 P7 S9 G
/ x4 A* g" F0 C8 ^" E, F- n
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
; J( W9 A: u5 @5 xThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" & I E0 A* h3 F" d( N
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |