先简单介绍两条命令:
: T- A+ R9 h; Y' h9 g p* l- o0 n- n
1、这条语句可以建立图层:
$ `# z# ^) a$ x; l+ p" E# VThisDrawing.Layers.Add("新建图层")
1 d2 E* e% Z. ~: b: _在括号中填写图层的名称。
- m* I3 ]+ T$ ?4 V7 l$ ?
2 V+ f# |! S( Y) n2、设置为当前的图层
0 r. d+ B5 I# z* V" ^( GThisDrawing.ActiveLayer=图层对象
) B, q N. |: O注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
$ ]# c3 B( h+ n3 j0 ~/ n* S
- x* N$ ~: j5 {0 c% M* ?以下一些属性在图层比较常用:( h+ L6 l/ u: `" g
LayerOn 打开关闭 _" R( [1 w& ]: k
Freeze 冻结
+ p! w% B* N6 c3 D$ z, K0 jLock锁定
" [% f8 b, K% e6 O# u/ PColor 颜色& \" t9 x0 [& o, |( G
Linetype 线型# Z& z) j+ n% x
% w' a( |: _8 c& y9 q2 R/ ?2 f3 R8 R- O6 N
看一个例题:8 ? d( N. B+ f. Z# T0 g6 f, \
1、先在已有的图层中寻找一个名为“新建图层”的图层$ l( O k6 A, N. w
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
- p4 ]/ @: }, Z6 Q/ }3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层. b1 a6 ] b6 Z M; `" L& a1 L! p
t; \5 m1 j( m3 ?/ _- `
Sub mylay()
; E' _4 T! P4 v$ w% V7 Z: c: R
7 p8 Q$ V5 C5 ]% X! e2 S& |Dim lay0 As AcadLayer '定义作为图层的变量 A3 X% }- m9 c9 o2 l: X
Dim lay1 As AcadLayer
9 B; s9 i/ Q0 ~2 n' T8 {5 c9 {8 Z+ ^2 }% i5 L
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到$ v O5 b; |0 H/ x5 |1 E0 H
/ e3 ?7 `3 u! C9 N/ o7 w! b
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
4 Y. [7 i7 r5 O- X9 @
1 Y, E8 X+ K! K* i/ Z If lay0.Name = "新建图层" Then '如果找到图层名
' r& m/ j7 H( t5 X7 C' Z' _ findlay = 1 '把变量改为1标志着图层已经找到
" e4 {6 X/ p1 q( i% C( y msgstr = lay0.Name + "已经存在" + vbCrLf
0 I* _2 {- m% o; ^) ~2 z msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
6 I- [; p, ~- g1 x msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
. H8 S3 ]. ^" [. ^6 w msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf: s: j$ |3 t* Q2 w" m
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
9 D) w! ?" X. i2 u msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf' r) x4 v% b& M, T( _
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf0 o! L" X8 z7 v* P9 D9 E
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf5 @0 g; S' d9 l% s w
msgstr = msgstr + "是否设置为当前图层?"
- Q2 m! ^& b" }% V If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定2 `+ J4 {$ g7 n3 ?' Q! ^
If Not lay0.LayerOn Then lay0.LayerOn = True '打开( E/ M/ {2 U/ i6 k
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
. E0 `; y3 _& ~ W End If2 u7 B* v' K' S& _3 Q
Exit For '结束寻找
# [, Q$ D# v& u2 T# Q4 n6 ?! Q; v End If
& j' [- [) G- BNext lay0
4 f+ V3 x3 K$ g/ r2 w
3 b" E, B, }+ i/ ^If findlay = 0 Then '没有找到图层
7 Y: G. |: y5 O" N3 k( O- |/ @6 X Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层, E& B" q) n& k3 y9 m5 N) z
lay1.Color = 2 '图层设置为黄色% `& J& D" e1 e/ V1 i: g& ~ z
1 N* P( m6 {) Y. D* q7 J' L
ltfind = 0 '找到线型的标志,0没有找到,1找到
4 K! U9 a. e# L5 T& j8 I$ g6 W For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
* U& q7 @4 p4 y5 q- s" s: R$ n If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
/ Q& V. u. |1 U ltfind = 1 '标志为已找到线型1 s/ }9 \3 W& e; _" k5 ]$ o
Exit For '退出循环& `5 W1 l6 q7 q7 f: W
End If: A) D( O h. G
Next entry '结束循环
" a& O# u; }0 [ J! |! F4 U4 f4 \) g8 ]7 N
If ltfind = 0 Then '没有找到线型7 z/ J. u# n1 ~ n* X& ~! u3 z1 q
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型+ t# g0 Y9 i; A- r; q' S
End If" k( g3 b! T0 n6 a1 ^2 J% p) W
lay1.Linetype = "HIDDEN" '设置线型1 }7 _' `9 I; D
# \8 K" c2 B; ^( a& p
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
1 h+ r; g; j; w' S3 r2 cEnd If
0 k) y" a( z2 y5 ?, [: v4 a! l* O/ X1 k/ L
End Sub6 D0 q9 a6 ^$ F9 c6 T6 k9 F
+ k' _8 z; k& r9 W8 b
在寻找图时时我们用到for each……next 语句0 W' ^1 h' H9 E; [) g
它的语法是这样的:
3 B. y x3 Y! Q* j/ w/ p- Z0 RFor Each 变量 In 数组或集合对象" }7 M/ X6 r+ R3 D
……
* {8 h0 j/ z$ f1 L9 pexit for
8 w. S9 t+ y* ]9 `……
4 c9 q |# F, Z7 O4 y2 U4 ^& Inext 变量8 @3 c5 P" T1 d: d g: w
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层! g9 o: i/ z) n# Y! l" S. y) f
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。 Z# z, A' q: t/ I: y
" @) q7 M- ^9 J1 @* QIf lay0.Name = "新建图层" Then- |5 M& t5 o! w4 ]2 H2 V0 @0 D
lay0.name代表这处图层的图层名
6 \2 o. [3 Q. h# s( ?7 b0 A% T! `, {, H; i) y6 Z
IIf(lay0.LayerOn = True, "打开", "关闭")' D9 Q& l+ t1 k& F+ q2 O2 \% }3 t
这是一个简单判断语句,语法如下:
% L( Z$ K5 d8 D. f2 @4 u- d# F2 giif(判断表达式,返回值1,返回值2)
5 q- v) D1 Q2 F- W- _0 W当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
; j8 g% I z2 C u8 D7 \$ O; u: j+ d& i4 d
MsgBox(msgstr, 1) ; M; y3 } f; f9 i2 B1 m7 V
Mgbox显示一个对话框,第一个参数是对话框显示的内容
" @' n/ }; k7 ^9 ]$ d) j2 d第二个参数可以控制对话框上的按钮。
$ w( M! N' r( x6 q/ B# P0 只有确认按钮
`; |8 Z& B+ g" C/ z0 L1 确认、取消6 e8 O7 u3 T9 @) G: W
2 终止、重试、忽略
, q! w, W7 z4 g3 是、否、取消; _' Z6 }% \' T3 D6 g
4 是、否2 m) Y, J+ j/ I
MsgBox获得值如下:$ W: T" F5 D, e( V4 l G& R
确认:1
% b$ H" d3 V! _( q1 i! h取消:2: p) y; H5 P/ A' y" c4 n
终止:3
2 L, t" D% s, X/ h5 n2 l重试:4
4 S, H8 w0 Q/ x! W2 X! F$ R G忽略:5
* \# V% W0 } F ^是:6
" b' m; m6 L/ y {否7* x/ n+ l: ^' @# a0 p% e" H/ x
初学者不需要死记硬背,能有所了解就行了
2 i! P) F( l/ k1 w. n9 A" [" H. {# b% T8 V
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
; ]9 L4 m$ e8 B7 Y: U8 v. K! cThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
" @9 C( k [) g( X. sThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |