先简单介绍两条命令:
( v9 }5 `3 i8 C( l) D6 ], W& `
1 X8 a& K5 B3 X3 a4 z1、这条语句可以建立图层:1 q1 q# q* v# K* m
ThisDrawing.Layers.Add("新建图层")
# a+ w* `( K$ Y/ _2 r在括号中填写图层的名称。
! ?" C+ ]4 }% W4 B8 u2 u% e2 s# r# D* ?, i
2、设置为当前的图层
; w( q1 W& r$ y3 t8 H6 o0 FThisDrawing.ActiveLayer=图层对象! ~2 Y- _4 d' b1 N# K5 w( e
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
: s% B; n4 G# o( W, h1 \5 B
: z5 f$ Y. k4 d5 v以下一些属性在图层比较常用:+ {" z' z1 I# y" q: X* ~
LayerOn 打开关闭
& ]+ e! ]( j& m4 BFreeze 冻结
# p9 @( y' U; b6 l' oLock锁定+ F" f# x) u- r
Color 颜色
, [4 p' F5 \/ _9 W7 l5 A/ o5 W0 T4 ?; DLinetype 线型
: C# O0 [' F) h l
$ J6 C& s1 A7 E: P {1 w* ~7 j% m/ r3 f) s5 y1 n; r
看一个例题:+ G, i% y4 s6 R5 ?- X4 e8 S
1、先在已有的图层中寻找一个名为“新建图层”的图层
c/ W3 K# E: B2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。4 T4 s: A3 M' [- q- }/ E' W2 N9 o
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层% M5 \; }# ] K8 ~/ a: m
7 K+ S, q$ q2 w. e( {Sub mylay()
% K" U* m% a* i2 a/ v. t
f7 w9 \1 d! ZDim lay0 As AcadLayer '定义作为图层的变量
) ^5 ]4 R* Z/ d" \Dim lay1 As AcadLayer7 J9 u/ R% b( ~2 a
1 z8 G, i& a! c4 r
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
! H, [ ?: Z1 V- r a" k
, X6 P! L3 Z% E/ H+ NFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环3 \+ |- j. l8 Z& @* G- }
" W( F5 F. I) f9 S) J
If lay0.Name = "新建图层" Then '如果找到图层名
2 v, F {3 a! Y; c: _1 ? findlay = 1 '把变量改为1标志着图层已经找到
9 D8 X7 T! I1 _7 o$ |3 T3 I msgstr = lay0.Name + "已经存在" + vbCrLf+ n) G, W3 c9 r# n/ |
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf0 k, E' q# t/ E, |# V
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
# D& o+ F+ I# F/ g: e$ z8 [ msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf( C- t8 v# h. I2 q3 N/ Z
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
* ?1 j. E7 Y- l* u' z- _ msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
+ C) d* ~4 M$ K; \2 x" x msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf0 g5 Q" }6 z7 B5 u9 ^) x. m
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf) l1 u9 u8 O! H0 I- M
msgstr = msgstr + "是否设置为当前图层?"8 \: y. O1 E2 \+ T: P7 a
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
4 y% K3 ]4 N9 z- y. o4 {, G0 C1 P/ N If Not lay0.LayerOn Then lay0.LayerOn = True '打开9 ]* x1 s" I8 U w* C9 t
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层% \0 V, B" _; V$ V$ d
End If, R' ~/ v# |! }6 q: P3 `
Exit For '结束寻找
7 u0 D& \9 Q* H9 F {6 }* h End If
) L4 E/ Y3 z9 c7 [+ |8 P$ FNext lay0+ Z5 V" h* i/ t' X/ K
7 s. [% S" v. f
If findlay = 0 Then '没有找到图层
+ B9 ]& I2 S9 P1 H( g$ t2 T/ d Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
, R* s* Y* o/ m8 I, X! a6 m. S lay1.Color = 2 '图层设置为黄色: X5 b6 z! U v/ p
7 P) C9 X' g4 t1 U5 I
ltfind = 0 '找到线型的标志,0没有找到,1找到/ F% Z; V. ~( H0 p8 ?
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
. P2 A- y! \: B3 U' z" K) u' P6 ?4 Z If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"6 u/ W( ]" E1 H& h
ltfind = 1 '标志为已找到线型5 c$ e. A$ O" G$ @5 t) p
Exit For '退出循环1 z: f, l, B7 a) y% V' E- L4 S
End If5 O2 t8 s( V5 F, A* s
Next entry '结束循环
% `# s. [+ K+ d/ F/ a; a3 n& Q2 A
If ltfind = 0 Then '没有找到线型9 f5 Z3 S7 k7 D/ G& j+ ~/ y$ e7 y
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型- g' O$ C7 z% d0 w8 F1 y
End If" @: _) p% R' K( H8 q6 C1 k# p
lay1.Linetype = "HIDDEN" '设置线型
: t: y0 ~3 W4 }
! `! {5 n/ X. Z ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层2 D' l+ H: y. ~: f: Z+ q" T) _6 N
End If4 N: K. v5 j8 p1 X/ w& o1 w0 e
" [) g n; E5 b+ g6 D% iEnd Sub
4 s+ w& z6 W( Q q6 F, I1 }4 l0 I; h) k" u& I1 w, u( J' o
在寻找图时时我们用到for each……next 语句# r* {, G3 } A/ x
它的语法是这样的:
0 j, O* Y$ S4 v5 m- q" {For Each 变量 In 数组或集合对象
# C' v8 C- S* H* F5 n/ i……2 f" z' t- _( X- E$ s
exit for
7 O: N) R3 _( S% U; |* O0 t' e……3 t% v0 @' `' P2 x* e* W
next 变量
4 a( Q1 T5 ?/ f& T它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
_4 x+ O+ ?2 }9 ~% `$ U* D在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
# o5 i/ @; o3 y6 b- H- ?- _( D G, [, }2 q. U$ _) t4 a
If lay0.Name = "新建图层" Then
5 Q5 T2 ~. V3 i& Mlay0.name代表这处图层的图层名
! ^- l& L7 P% ^: u+ J R
" R: `) p8 \+ }0 O# K5 M3 X9 h2 X* kIIf(lay0.LayerOn = True, "打开", "关闭")
" M. x7 d5 f$ g0 `. ^- g这是一个简单判断语句,语法如下:
" K5 y4 J$ a, z' Qiif(判断表达式,返回值1,返回值2)* Q1 @- Q( ~; x+ E3 \! m2 x
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2 [+ ]) H8 h7 Q7 o3 z. {0 S, r
3 u x9 }3 L, h0 w( Y$ q9 @, _. N
MsgBox(msgstr, 1) & v/ ~+ A* ]* b' ^1 h
Mgbox显示一个对话框,第一个参数是对话框显示的内容
7 f# e6 y! F6 S+ u% w: P+ G( Z1 O第二个参数可以控制对话框上的按钮。6 x: Y: [% d9 g1 A* Z1 e% ~$ e/ T
0 只有确认按钮
& i8 T$ ^8 a& o1 O1 确认、取消
( z0 Q% h+ n' W4 Y6 E0 H2 终止、重试、忽略) v J2 f5 w0 Z; M2 Z, Q
3 是、否、取消6 X4 A& i1 l5 E6 i5 O
4 是、否4 [: v$ ^4 j9 S5 P* a
MsgBox获得值如下:: q/ \0 E& ?* y3 }# \9 J% X+ d
确认:1
' W" _+ \8 G m取消:2
. Y# N" f+ H' u3 N终止:3
5 Q G! ?, t7 \$ Z4 _重试:4. @. I: i1 h6 q7 |
忽略:5
3 L7 c9 m, y! Z8 u是:6. v* d9 I, w4 w! |
否7) x9 n; i, U4 f/ t% j7 J, f
初学者不需要死记硬背,能有所了解就行了
; `' V/ R) |3 ]: a8 H
9 Q/ F, \1 o4 N/ zACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:& A/ C* P2 i& {/ ] s
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
- h( H' y. A* r# t0 VThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |