先简单介绍两条命令:
: M3 h: T7 r% s# e/ K" V# {+ f; H5 Z4 N9 }
1、这条语句可以建立图层:
% n0 }* q) }' ~2 S% LThisDrawing.Layers.Add("新建图层")/ g! M! f( B& w$ R5 Q% C
在括号中填写图层的名称。
) Y9 f' \( m' _8 O/ l3 N, A: [6 a4 y8 C/ \9 B7 W9 w( y
2、设置为当前的图层6 `: U) s g0 _ e2 _ t
ThisDrawing.ActiveLayer=图层对象
; ?% |5 }$ A9 Z1 I3 j注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量# w7 k- \1 ?+ }# O( u7 Z h
: u2 T0 v6 J/ ]
以下一些属性在图层比较常用:4 {0 b, O9 O3 |# ~5 U. t
LayerOn 打开关闭
& r% |& l' d2 T( y, a1 Y7 s& oFreeze 冻结* _- G0 f4 f3 n8 b. Z
Lock锁定2 F! ^. z- q* _$ x( x$ [2 C" p
Color 颜色% e; Z0 C7 |3 P0 C4 R: N
Linetype 线型
! R, B, @4 b. W5 |
$ N }- n' a( O- g! h# ~' _) }
% Z/ p6 }' ]% O+ d看一个例题:
7 h, `4 H# E7 |- }& E6 n1、先在已有的图层中寻找一个名为“新建图层”的图层4 H2 Y9 l: ^/ J) c0 b/ }
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。2 k- ~! N+ n" w& o+ a
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层# s% A$ L) ~2 }7 j7 e
/ D2 O* \5 C/ M; ISub mylay()4 r; a6 N( S) t
! r8 I: H" a& ^' I" [: _
Dim lay0 As AcadLayer '定义作为图层的变量
1 J% u8 c% r# y/ N/ cDim lay1 As AcadLayer
( K% Y& |( u4 q+ _7 o5 @' O
5 t$ J; n$ A7 B8 C pfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到, `2 d6 [1 j$ ?
0 t2 j& E: d% F3 T' QFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环& M t9 ~1 Q$ f' b
5 ]3 d5 p5 E8 Z* M4 Z( W2 Y
If lay0.Name = "新建图层" Then '如果找到图层名
- g' W2 X& G; s- m9 @ findlay = 1 '把变量改为1标志着图层已经找到; }0 h. w% V" m' L
msgstr = lay0.Name + "已经存在" + vbCrLf
+ O1 i: t2 Z/ o msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf. g' N/ e3 _ A4 S$ M' o+ n3 j
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf: U- t( P# d6 R, E) K
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf4 a1 l+ c/ H5 c& n
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
! E$ q% S& j+ [2 ~0 g' b msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
0 i& X0 h4 u J" C4 \ msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
6 @8 u: T) [8 {* u. F3 ? msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf, t% o# }2 ?0 k, _. g Q3 P& b+ n
msgstr = msgstr + "是否设置为当前图层?"8 y& t, @5 ]0 C2 h1 O
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定2 d( o) P1 i- n
If Not lay0.LayerOn Then lay0.LayerOn = True '打开* K- E) `' Z* F
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
0 X) Z4 q$ X- E3 {% q7 ] End If& ~$ m# F! |: a3 S/ m
Exit For '结束寻找+ j/ v, A; p3 p2 ]5 T" j
End If# u7 z7 e: m; r3 P5 O
Next lay05 |! r; I2 s+ T# Z/ e
$ g) v2 y2 `0 A6 a# vIf findlay = 0 Then '没有找到图层
* @. s* c; @4 G( _3 V Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
7 q/ U0 b G7 b lay1.Color = 2 '图层设置为黄色0 w, w; P' H( R1 I6 Z7 J# i& E
|& \6 h4 r- V9 O" W$ m ltfind = 0 '找到线型的标志,0没有找到,1找到
0 V2 R' K1 k" |$ ~; W! g For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环, W W. E3 H$ r
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN": W7 b& T) c5 }) H
ltfind = 1 '标志为已找到线型
: i# s" Y! }- O0 g Exit For '退出循环9 ?+ i% _% H+ I3 ] ~% b3 V$ F9 \
End If
0 ?, U" X$ y! Q3 h/ E Next entry '结束循环" m+ u) U1 u. D$ G: q& E2 ~
0 B4 }$ y* |% @5 p8 K- F* I$ [ If ltfind = 0 Then '没有找到线型
; R5 ~3 D4 N1 S$ o ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
& o, M' @& W# O* s2 [ End If$ V! u d$ [) `1 _, d/ j! {6 \
lay1.Linetype = "HIDDEN" '设置线型$ w0 a; G1 B$ [0 w1 ?" I( g* V
8 n& U( F% Z: P ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
6 ~' ]+ V1 R9 P! J6 b0 \End If
" h0 T9 ?. f" j* n# ]7 Q5 X! T
; b) q' a- T/ H; `* R! QEnd Sub$ _0 A& W3 M$ e* B
0 b0 ^. x* u/ B! y8 u在寻找图时时我们用到for each……next 语句" b. z* O: j* ]# t$ E
它的语法是这样的:
/ f; [" u7 Z$ K4 ?3 ~For Each 变量 In 数组或集合对象) B/ P3 Q' u6 U/ _. X5 b
……
! c6 Z+ m* o' kexit for 1 x5 M4 C- r. C7 Z C
……
' a/ j7 T: C2 t& ~next 变量$ _0 ?# u8 G: X
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
) d; s z$ U6 z6 m; }3 H7 W在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
$ ]' Y4 n1 n; u5 B8 U) |' U% [0 C0 m6 F! v( H3 l- T% y" c
If lay0.Name = "新建图层" Then' x4 |1 h2 g! b5 o7 h/ T; B
lay0.name代表这处图层的图层名5 l+ Y. g) {" \/ G! s
. k8 E( U; t5 T. q; G
IIf(lay0.LayerOn = True, "打开", "关闭")
& J5 y; u3 p3 a: u+ ^/ ?5 \这是一个简单判断语句,语法如下:1 H5 t' @! C7 ?" p5 f
iif(判断表达式,返回值1,返回值2), D( T3 y$ e' w/ g, \
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=25 d+ k' ~8 V4 u# s) }4 Q/ t; H" l% A% Z3 S
) F9 `1 |1 l H
MsgBox(msgstr, 1)
$ @. M3 p, `/ E, yMgbox显示一个对话框,第一个参数是对话框显示的内容
1 {4 y' M% k' e第二个参数可以控制对话框上的按钮。
. J* u' N& s; E0 只有确认按钮# O8 m# E% |+ l; z" Q% e% _: h Y
1 确认、取消9 U- L% l+ F9 O& c6 L; L: i8 ]
2 终止、重试、忽略& n& \2 n; h# ~
3 是、否、取消0 O* A3 |$ {1 @9 D/ V4 k6 h
4 是、否
0 k* t8 V% [. P1 u8 v/ rMsgBox获得值如下:
7 }9 S( [; U p确认:1# T; {5 ]: L% s% E2 k+ |' F
取消:28 T: {1 Z: A4 Q5 l: {9 G3 f% r
终止:32 l0 a" D; p" Z- N ^* M- s
重试:4* l7 u, f2 i9 G6 O8 ]
忽略:5- [1 O& h$ A1 u. q' U2 I* a$ x9 x
是:6$ j0 x" `2 ~- \' M4 k; S0 q- C
否7* ] t0 y! o5 i# ~" b( |! m+ G7 ]
初学者不需要死记硬背,能有所了解就行了7 L6 G5 L: S! A7 o( V# t
' Z0 |. }& P7 l5 N9 H! [ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:4 r3 r% c- t$ m) [ H, l: [
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" " M7 l. U% z/ V+ ^9 P
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |