先简单介绍两条命令:
{3 a: K/ x! ^# }& |" s i1 b3 V c: Z- l% R0 r" n2 c0 x
1、这条语句可以建立图层:8 Y/ i5 @7 ?. I" C) A2 w u
ThisDrawing.Layers.Add("新建图层")
5 i) `& \5 f. R- y在括号中填写图层的名称。
, j3 h$ h; e8 O6 g8 q$ v4 G5 B8 U) u( ]0 e6 x8 H
2、设置为当前的图层( P4 D) L2 f [
ThisDrawing.ActiveLayer=图层对象& I2 x+ o0 v- P, z+ `! n
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
6 b& I2 Q% v3 i% f4 \: y5 ]8 i. m5 y
以下一些属性在图层比较常用:
7 a& T+ P' }7 k' `; Q2 G, dLayerOn 打开关闭
- t6 B$ U8 l- D+ P) p# S4 l3 cFreeze 冻结' q, Z& o8 x, P) f/ x# ?; S9 e
Lock锁定8 s& H2 s1 }3 }0 r' O% M" _/ i
Color 颜色
3 y" P9 \7 x1 t9 q* lLinetype 线型5 d9 o! E5 x: V* `& ~) t
$ P; K! d- `' c" P+ V- F; K* |4 ~: Y, C: Z3 }3 w Q2 f2 [
看一个例题:$ a9 b6 V+ W+ e
1、先在已有的图层中寻找一个名为“新建图层”的图层8 f+ y0 ?: ~2 I* b4 d( I8 n7 }- _
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
2 y1 A7 O9 X5 a( t3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
) ?6 t, k F$ e& ^1 B2 W9 v% a; n' s' b- l) G( g6 g2 v. N
Sub mylay()/ w0 h# Q% `; g# z( G
! p$ n3 F) B. S6 ~* o
Dim lay0 As AcadLayer '定义作为图层的变量
4 v& M. x4 i7 ?8 a \Dim lay1 As AcadLayer
! I" A0 M6 m8 w7 t, w X& d
( O( J$ Q6 l3 E% ~! Dfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到
1 O1 m" G' [, R
' h" C* Q: e/ aFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
, t* t! Q1 ]0 V5 P8 `. Z
( ?' ]% H2 Y% j! o If lay0.Name = "新建图层" Then '如果找到图层名4 B( m- N& m. p" E7 |3 D8 \; @
findlay = 1 '把变量改为1标志着图层已经找到
, r; f# T2 W2 o3 i msgstr = lay0.Name + "已经存在" + vbCrLf4 u& {# a1 `" G- n! {
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
4 ^6 W4 d( y% l7 g5 z- K6 M msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
2 g; F" q5 X: y2 V, [5 V7 d/ D' y msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
/ z5 ~1 y- C# k msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf2 J" B9 j# `8 E& ?) e
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf: `7 h, R& p. \! S* W( j2 m! C) ~
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
2 ^" G v. v- ?6 ]7 M& c- b msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf% [; o' a. Q% i- \# ^( y
msgstr = msgstr + "是否设置为当前图层?"
/ J/ R. @* k9 T, g If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
9 V" o8 W; W5 S! O, b- t! j If Not lay0.LayerOn Then lay0.LayerOn = True '打开
0 _, b/ ]* H7 ` ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
9 d& x, E0 l* R! s: ^- ^+ x End If5 v% ^: P e. B
Exit For '结束寻找7 E8 Z0 b! g/ U7 J" G! p; w4 L6 ?
End If
& P7 j" v- a: gNext lay0$ _* n' g. i' x9 t4 S4 K
* z) b: Z! g& t g9 J
If findlay = 0 Then '没有找到图层
. G, i; R% M% b/ @2 W- J2 m Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
* E8 W; J5 H. I lay1.Color = 2 '图层设置为黄色
9 g& N2 m% c8 a6 u ! J c6 n0 \0 p) A* G ~4 _
ltfind = 0 '找到线型的标志,0没有找到,1找到3 f! H# P; q- q5 g8 L, d
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
; E$ A8 j+ y, }% ~% d) i7 L" s If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
1 ^; M* U9 ~ q/ v* } ltfind = 1 '标志为已找到线型
5 y, e V0 Y: i L5 h3 ?5 [ Exit For '退出循环9 h; A( [0 n) @: C. p
End If4 C4 K4 E, P: E# k; A5 |
Next entry '结束循环: ?& j. a7 I' {3 L9 @ r! R0 S
9 x9 D$ {7 P) E
If ltfind = 0 Then '没有找到线型" s- L& u+ @4 R: d; c2 _) d) h
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型: A e0 y& Q5 P3 M
End If( ^# [" v0 n. j, h9 T
lay1.Linetype = "HIDDEN" '设置线型
0 G2 S% k2 b: N0 g0 `6 y% _
8 z$ e# B" B0 R' {( v& R ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
' A! [% v& R& n* f' aEnd If
$ a ^( E# D7 m) M) Q& ~- J' G ] ^! ~' j" C, X
End Sub
3 L/ B+ f8 m' e J$ G8 [
! w" I5 G' r4 t! }; Z; e3 C9 u3 Z6 Y% w在寻找图时时我们用到for each……next 语句: M2 `6 h G+ ]0 A9 i& i! K
它的语法是这样的:4 ]9 A# `5 q, R8 M [6 e
For Each 变量 In 数组或集合对象) F' @) H; V% i& O1 s, [
……
2 l3 j; f. o% c: N: M8 Vexit for
1 j# i" R3 l. N% c……
0 b8 w( Y. H5 p: J) i) T. bnext 变量
) F" T- t5 m6 K4 G它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层0 K4 u) o2 I: Q* S1 I+ m
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。# z) r$ [3 q* |' L- B) u
h. R o; T4 d+ I6 Y9 s) eIf lay0.Name = "新建图层" Then
# d# u7 ]2 ?! k; x7 R2 K3 Y* y% _lay0.name代表这处图层的图层名0 K$ G- T% s; T) h
, q) l3 w% u2 |: fIIf(lay0.LayerOn = True, "打开", "关闭"): L4 b8 M; ^! }0 t
这是一个简单判断语句,语法如下:
& H/ g0 o$ d+ Z/ |iif(判断表达式,返回值1,返回值2)$ ~ M* G) F& T& k, S
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
) g8 X! f! Z& y! U' V8 m
5 n" }5 G: v$ d) R0 k H2 z6 l7 RMsgBox(msgstr, 1) 0 P8 ?3 k5 ?! x0 L! N
Mgbox显示一个对话框,第一个参数是对话框显示的内容4 |( X1 S# P, w8 |1 }/ P& h
第二个参数可以控制对话框上的按钮。) g* {. j2 K" ]3 @$ a
0 只有确认按钮
* [( R! E$ P2 d; u1 {/ g4 g% G- }1 确认、取消/ \8 ?. X8 y: ]% F, E2 K7 [: c9 t8 ?
2 终止、重试、忽略
9 f* o; a3 L* f6 F+ {/ J! V3 是、否、取消
$ M1 {* c: S3 a; c. I6 S4 是、否$ i7 b! P9 U: X0 ] _; B
MsgBox获得值如下:9 X2 w; u# S& y3 m7 Y8 ]
确认:1/ x( ^9 U, T5 Z. B& a8 r) N& \
取消:2
7 C8 |/ z( j. K' x9 f0 t. v' y终止:37 ^% N6 [) P" B) I
重试:4& t9 |7 `' w2 v6 g0 Q* |
忽略:5
3 u$ v5 C1 ~- d8 Y* z# Z是:6
6 ` }6 e. O2 {3 {$ ]5 Z否74 J8 E3 I% [/ R1 {& T7 l* x) ]
初学者不需要死记硬背,能有所了解就行了0 O6 P+ {# a6 X9 E+ B9 Q/ k1 c5 X
( D @2 p2 \0 ]2 k x. a7 X U5 `3 W
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:. Q3 H' v9 e: u0 F
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
3 j! ?3 G: H! d+ YThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |