先简单介绍两条命令:4 J- E- }: Z- a8 r" S
0 z( _- W- Y4 `- G1、这条语句可以建立图层:
1 K7 J2 r, [( l0 lThisDrawing.Layers.Add("新建图层")8 ~' x T5 m6 s3 @9 s# @6 p6 T
在括号中填写图层的名称。
: F4 g/ P1 G' ~/ v1 g' H/ A
* s, O" b. n( ^0 Y8 t2、设置为当前的图层
% h+ U0 j! w9 }' s/ T8 HThisDrawing.ActiveLayer=图层对象. c+ w; {: ]0 L" G/ W2 M) L
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量7 b( t7 h1 U& i4 X
+ Y' D5 U+ Y/ ]" Q' `8 G/ n以下一些属性在图层比较常用:
. Y8 r$ w7 H, G) ?3 D' j, F/ `LayerOn 打开关闭
d, x2 S$ w5 O3 W8 \Freeze 冻结
! S; a$ q" o; N2 L2 C7 F( KLock锁定
* r2 T: i: R' sColor 颜色, t, E3 ^2 @. o; @1 Z
Linetype 线型
3 u) E6 E) s( y7 a9 N* f e* `. D8 v, _/ v/ Q5 p+ Y {7 ^; x$ h
- x* k8 K G& l4 g3 I看一个例题:
- ?* Y2 X. N, E1、先在已有的图层中寻找一个名为“新建图层”的图层7 i' W5 G4 s3 O( D$ o; j
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。6 P q2 k0 Z6 f" P
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
/ T/ w! t+ z/ p/ `8 J* d! J5 G$ ~1 B7 m, F1 v& t
Sub mylay()
1 ]9 P; p& Y3 V8 x8 v
1 n; T5 d5 J, LDim lay0 As AcadLayer '定义作为图层的变量
! v& R) W9 e) a8 P+ X7 ?9 KDim lay1 As AcadLayer. A; R d- s: L* S# c4 P
& v3 Q4 g+ {% H _7 Z O8 N) e* G
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
5 ~/ ?7 ~ p2 W* a$ s/ D
" J o( r7 N8 v! G( h/ YFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环3 [6 b4 W) e& U' j- u! M
( t$ G. w7 }7 @5 s* J If lay0.Name = "新建图层" Then '如果找到图层名
/ R7 V3 f( R k; r5 ]) \ findlay = 1 '把变量改为1标志着图层已经找到
@5 ]- q- @1 y0 ?/ g9 g! o msgstr = lay0.Name + "已经存在" + vbCrLf3 B/ |1 Y b J' a
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf8 L, Z |+ b$ U5 k
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf5 f2 W x3 e- j$ G
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
! R. \7 e i+ ^$ h8 G, G msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
4 @4 ^: Z7 s+ Q) i" i msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
+ `/ g3 W! q1 Z+ l msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
7 M- H7 |5 |& P# N' q- P0 j$ @ msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
& y: R0 x* M+ b5 W$ o0 [0 c8 n A; w msgstr = msgstr + "是否设置为当前图层?"& q7 N! g' }7 G$ ]- ~; [- t
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定% E8 h9 l8 i* A4 @! J# E' V
If Not lay0.LayerOn Then lay0.LayerOn = True '打开0 m$ \; g. k, R1 W% I- o& S
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层 r: K) l# Q8 B; ], ~
End If& I( e1 S9 a) S: u# W! _0 Q* [
Exit For '结束寻找
' v5 t" n; A6 q6 K End If
7 e6 H& `; h( j# o6 r! a! yNext lay0
0 ~- h4 D; l" @% f4 \# V! P5 M, Q6 {
If findlay = 0 Then '没有找到图层' K: n6 Z9 ~5 |2 q
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
0 `1 \/ R1 q# @* C1 r lay1.Color = 2 '图层设置为黄色$ t/ s* ^7 e3 W' d1 a
) }7 F8 L c" C- C5 [* [6 |4 n ltfind = 0 '找到线型的标志,0没有找到,1找到
) x: U/ F2 G% {+ F1 \& B) |; v: g For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环* B( _ q: N# r5 ^' h1 c
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"2 R2 Y' ]. ~2 q6 D* T: g) _' g
ltfind = 1 '标志为已找到线型
/ ]0 x6 h; d0 o0 ]' Z r- S( Y; r Exit For '退出循环9 c2 n5 j, U" U& ~( Z% T4 U
End If8 V2 H! v% Y* P- f9 a
Next entry '结束循环
8 F: Y" q! `+ v
) W+ }/ Y" c M' i' z) c If ltfind = 0 Then '没有找到线型
$ h) {3 N) z Z- Z7 [ ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
4 t6 Z" L9 o* { ^. l End If+ O4 t8 A ]0 b( p; M4 o9 H
lay1.Linetype = "HIDDEN" '设置线型* U* q" g2 c1 i7 S. q1 N
) R: o- B0 F% E. b) P' A8 R
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
4 m; g, F% R' V: k" d+ ~6 BEnd If
$ r' L9 ~+ P! s) k" |$ X# U+ J# U. e/ p6 p
End Sub* k# t1 F; {7 n+ k1 E4 ] K
6 B% ?3 w9 g9 p# O9 I$ n: W
在寻找图时时我们用到for each……next 语句( U& H1 ^- }) B" J% n4 n0 L2 Y, M
它的语法是这样的:8 E- _3 v d! f6 F7 a( J
For Each 变量 In 数组或集合对象4 a5 l8 u- z: d7 E4 l% U
……
2 P4 I! A& D/ Q' ^& R Mexit for % W; Z+ ^7 S( ^ Z- c
……
# w# \5 z$ G8 k( P3 y+ }next 变量
8 Q5 ?1 y/ [3 }1 Z' S0 P/ \它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层9 A0 Y5 Y) G) u0 @2 x# l
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
& X2 `, r# N. E0 q U2 R, D# J; k1 }9 C
If lay0.Name = "新建图层" Then
- i, I# I6 ?+ t8 v0 j' qlay0.name代表这处图层的图层名
) i0 l$ Z- {$ r
8 \& O; r& _' i. j. dIIf(lay0.LayerOn = True, "打开", "关闭")9 E0 f& c, J9 p1 h6 L2 X, {/ D5 N& g
这是一个简单判断语句,语法如下:6 Z( v2 {8 u- K
iif(判断表达式,返回值1,返回值2)5 W: j. m u. O q+ R: u
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
$ t9 }* M' _; E z
% Y6 F/ S. X2 ]3 e- n7 O3 f# X' TMsgBox(msgstr, 1) ( D3 P6 f9 _* a; q7 T2 y
Mgbox显示一个对话框,第一个参数是对话框显示的内容
5 |9 t! m: @8 \2 Y$ U: v8 @第二个参数可以控制对话框上的按钮。
( O/ X l" m' q3 h0 只有确认按钮9 c. C8 ^! j7 r8 O8 R
1 确认、取消
. m8 C; L- v) s) W# c2 终止、重试、忽略
+ L# @9 Z- \, k# l3 n3 是、否、取消" m1 Y, i5 R$ F1 ]
4 是、否
0 D- y5 G7 {4 D+ a, r% yMsgBox获得值如下:
6 p- S" g' I( h9 V& f: X1 t确认:1
7 G2 }- [+ W9 I: }取消:2
. O1 H9 v5 m8 J) A终止:3; z4 p6 C0 p# ?7 F5 B% Z8 y
重试:49 l9 x& n$ L- O
忽略:50 A* q* Q! u1 a- r N- j, ?' S* O
是:60 L' W' I( G( I6 C' L
否7
: }( O/ }( [5 N+ \* m初学者不需要死记硬背,能有所了解就行了: E! h1 x, F4 w. B3 o$ b
3 z- i e2 u4 K' FACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:+ W2 a2 G% t" N7 t" n/ e& i0 ?/ k
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 8 W9 F W, @. X% r
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |