先简单介绍两条命令:: _! ?8 @( I: t- n8 @
8 p& d: J7 n; p. z+ E1、这条语句可以建立图层:6 C; |# e4 A6 Q! j U3 X
ThisDrawing.Layers.Add("新建图层")
* b3 f" e* M, i( b- ^) e在括号中填写图层的名称。4 o% C, p4 A: s7 P! Z1 x
! M* j+ D1 M5 K3 P
2、设置为当前的图层
x+ Z4 M( u% N0 P4 S' _) `0 hThisDrawing.ActiveLayer=图层对象
* T7 w! G) X) `- o$ E! l注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
6 H* o* R' v) ^$ r7 L5 N s! D6 E. L/ U+ _; R7 w! n
以下一些属性在图层比较常用:
) S! e4 ?, R8 y. ^$ ~- T9 z JLayerOn 打开关闭8 i* Z& Q$ X0 r) y U
Freeze 冻结
4 U; `& R; [; `1 K) HLock锁定
/ a- m+ d8 _% H9 N. KColor 颜色3 C! n0 z# @8 n3 W: A0 K8 f
Linetype 线型
3 s: Z/ o& e" P: T! }- P" p
& m' B: S N1 v0 g6 N" b. [2 ]' W8 n9 \. C' \8 g
看一个例题:
- a( F6 T. @$ }) s ^1、先在已有的图层中寻找一个名为“新建图层”的图层# w' M' [; Q8 {: h6 F
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
: \1 d# ~+ _ n6 j/ p& {9 i3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层9 g: J7 k& x0 u% O5 e
) X, v5 B% y6 x w
Sub mylay()
, e4 W1 U8 H- E$ f5 U) N& Y. j; t0 J, p" ]2 {1 k
Dim lay0 As AcadLayer '定义作为图层的变量
9 ^! Z1 |( x8 V. B4 W2 HDim lay1 As AcadLayer2 e( z$ c' G. ]6 e% c, x9 C5 O
. \% l A& S% r9 e: |8 T' d4 J$ Q
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
. K2 m7 ` G8 s# o6 Y6 X; p: l: q2 ^
5 v) d, B9 R: f7 s- r4 _+ A, Q! tFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
3 h4 s- u2 N# L2 D' r6 a
; F( _' R3 ~7 x6 S7 ] If lay0.Name = "新建图层" Then '如果找到图层名8 S4 `4 q" Z" A8 o
findlay = 1 '把变量改为1标志着图层已经找到
+ R& t4 m+ `3 i0 z( g3 t msgstr = lay0.Name + "已经存在" + vbCrLf
^7 C4 H7 _. _' k( y+ P msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf9 x2 R( j. a, z8 A1 K
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
4 r: Q7 O3 M$ r9 X$ N# G6 S; [ msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf# }& C1 f0 w" R8 H: S- u
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
% Q" a" S8 E' ]6 [: e! x7 { msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
9 `8 C, E$ \8 H msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf& F( ^; t7 _& T; ?# U$ k
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf3 g% V" `* w. p; F3 y) O
msgstr = msgstr + "是否设置为当前图层?"5 K: ~2 _; {/ |
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定- H6 f7 v0 k1 _7 r$ S
If Not lay0.LayerOn Then lay0.LayerOn = True '打开3 ]1 a8 |. X8 e/ S1 b5 i
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
" [4 z5 l% X' {0 Z* q* G End If
7 O; u5 R8 P+ `4 @5 s1 t Exit For '结束寻找
1 }. W6 w& c! a. C& d3 z End If
" ]7 @ a0 M- ]5 h. x' S. {Next lay0
! k: L! o9 H# z& y
% C( v1 d. i. V; O" |If findlay = 0 Then '没有找到图层
! \, B) g3 u) u8 R0 v Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
* u* a& R& C, [" l' ~$ W lay1.Color = 2 '图层设置为黄色
, R1 ]# U4 o/ V; Q# ^2 C
$ ~/ l/ p# |/ `+ o/ v: ` ltfind = 0 '找到线型的标志,0没有找到,1找到
: z) K4 B0 S& {1 M- z For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环# ]! ?5 z. ]3 v9 J+ a* ]2 J
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
# D9 @/ a b) R1 k# N7 i9 z4 J% c ltfind = 1 '标志为已找到线型8 o) s6 B5 [- g# l4 ?# T
Exit For '退出循环
8 X3 ?0 ^( c$ S0 i End If
c k+ H1 T& O& @% ^# L Next entry '结束循环
# }6 z8 @; s) w5 R2 b9 d5 v- z" \: n6 B9 n+ T
If ltfind = 0 Then '没有找到线型2 ]+ f8 C/ M; i
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
j2 _" V- s. m# V8 _* L* _ End If; x; R; v8 C% c5 m& ]/ |1 |
lay1.Linetype = "HIDDEN" '设置线型& `0 E9 v) S; G& b% o3 t
2 t. q% b( F8 S' ?
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
4 a% ]4 J7 d1 j; @% U; D+ q. tEnd If- ]$ [1 e" G6 e# t/ X
' U0 k5 Z* l) b% F) y1 n
End Sub
W, x2 a# c; ~; E* w
7 S, n" N* J. _; q$ r r6 g在寻找图时时我们用到for each……next 语句+ m4 ? [4 |$ }& b' Y
它的语法是这样的:
4 B$ q! o; q4 f U3 _6 }5 jFor Each 变量 In 数组或集合对象. x o6 I2 i$ r5 m
……2 W" s( b' ^9 l5 s1 ~/ Y
exit for 6 o1 h6 L! |4 } Q6 |
……
4 n4 Z9 L5 w: S* m8 z" n$ a; s, S( N9 Knext 变量
! W- P, H# g7 i- x+ l它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层( T7 p% I" Y; k: p. ]$ T! H
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
9 v! G, Y; d: s( h
9 Z/ U5 c$ _) {If lay0.Name = "新建图层" Then) D0 }3 u- G i/ D i3 t) p
lay0.name代表这处图层的图层名
: V; p1 {+ d: P3 y. r$ E8 Q6 C; k4 ~6 }
IIf(lay0.LayerOn = True, "打开", "关闭")
& y( Z& b% B' o* w8 v( m+ O这是一个简单判断语句,语法如下:
! A, i7 O! {0 A0 r9 E/ ?- ^( tiif(判断表达式,返回值1,返回值2)
( l) T0 E0 c1 J" N' C* m当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2- _& L8 ]- x9 j
) x- M6 S& J# h6 R1 c
MsgBox(msgstr, 1)
. R* x+ l) q: e7 d0 hMgbox显示一个对话框,第一个参数是对话框显示的内容) e2 k Z% H9 n8 S
第二个参数可以控制对话框上的按钮。
6 _* w2 J. P7 M( l0 只有确认按钮
3 S; g+ M# D4 M" A/ m4 R1 确认、取消) R8 q( F, O! c
2 终止、重试、忽略2 [( Y1 f; e3 \, l! l% p* T
3 是、否、取消
7 u$ t- Y C8 F$ |0 f! Q$ U+ P4 是、否- r; a* B, X( ]/ ^/ @( }3 O
MsgBox获得值如下:& }) b$ e" I$ J* b
确认:1" s+ e! L7 }5 B7 X) \' e2 @
取消:2! ?) @/ J* v* G2 j8 R" B- f
终止:35 ]0 m# N5 _6 n3 r1 q3 O, p" U" s
重试:4
+ m$ N8 a( i& M9 H5 o! C忽略:5
1 x* A7 I [; P+ [( u是:6
- g( E7 A; g- `$ F' U否7
j a$ Y: F, | v: X% x+ V8 X初学者不需要死记硬背,能有所了解就行了
Z0 W/ [+ K& k; \. K- L6 t7 U" V0 i) v
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
2 b( r- u L' A u, JThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 3 k5 d+ t3 U: a& {2 ]/ g1 V
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |