先简单介绍两条命令:7 l& w- h) V L6 K- S
, h* C( n; f" X0 Y, g& E a( m6 G1、这条语句可以建立图层:; F& y; b; D) Q+ Q; u7 E# w H& {
ThisDrawing.Layers.Add("新建图层")
1 @ E1 X/ b; Y E1 R9 S在括号中填写图层的名称。
3 _# N0 r3 a' |+ D9 N. K) D1 w) ~4 |; @( R& h
2、设置为当前的图层
( k5 U/ ^5 b5 ?9 s0 L9 oThisDrawing.ActiveLayer=图层对象1 q: V1 H* L+ v5 Q3 j6 S& Z+ \' ^
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量/ m" [% _+ {& j( ]& Q i
2 v* k- F6 J. N. c, D: u以下一些属性在图层比较常用:
* f0 R1 x( H( ] R' M3 b8 m1 zLayerOn 打开关闭
+ B( J# ~5 h/ U. O0 [& t/ tFreeze 冻结
3 |; x( |2 M2 X8 Z% v, Q3 u) ULock锁定5 T' Q* o2 n& y( S: d0 K" V
Color 颜色
, e$ F# {9 N1 \! [Linetype 线型. ~0 L/ c; ~ f* }
* ^% m6 O* G! U$ a: j2 h* W, F- }
0 p0 }4 f) \4 t% |. t5 j
看一个例题:
+ s9 a; _/ `. J( X3 F1、先在已有的图层中寻找一个名为“新建图层”的图层8 s* @( h" S2 p1 m+ T6 F
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。7 V* f% R _: k4 C4 x& e4 H( M
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层. c) a- S3 O/ T
0 W! E U- y# g+ L9 P- i
Sub mylay()& \4 @- u1 [5 l0 u4 m% Q
7 Q# Q4 x: z3 d& k8 ` ]$ C( O" D5 gDim lay0 As AcadLayer '定义作为图层的变量
" R- k9 {# b: O* R O: z# C* c. EDim lay1 As AcadLayer
0 X# k$ d- ?( _, i" q+ }+ C+ i# q$ y& s8 x9 |/ Q
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到+ o Y( @9 b2 I3 z2 H, j3 ~7 J
6 `# N- ~0 G. c6 F9 k6 LFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
+ o' h+ P& Y2 o
! C: u) w. x1 Q5 N: I( _ If lay0.Name = "新建图层" Then '如果找到图层名- N7 Z( w: K$ c [: K
findlay = 1 '把变量改为1标志着图层已经找到
" a3 j2 o/ J- Y1 p. h msgstr = lay0.Name + "已经存在" + vbCrLf
1 s! @) L, M8 Q! E! k- v+ y4 o msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf2 U+ a% I, s1 ?) ^& p
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
/ i6 h" o+ _/ }# v$ z msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
1 N/ x" v6 \# I* ~- C' G) N2 Y msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf! o9 S' n, |$ S' A+ P7 N) s
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
) j3 A; Y+ e1 i* H# y; }1 M0 U msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf u$ w H- t; G3 a3 v7 t
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
8 I. S% D! ]% q msgstr = msgstr + "是否设置为当前图层?"
/ u) h: Y9 L0 f3 M If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定5 T. X4 l1 k% m7 O
If Not lay0.LayerOn Then lay0.LayerOn = True '打开& x8 D+ o% g3 A5 ]: A0 ]
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
8 C) X+ C7 ?3 }. b. L End If( |! l0 O0 w0 n% x" E6 T
Exit For '结束寻找
, f( \" S9 G$ l& Q' W# G# X End If6 A2 A( j' |. }# |! Y$ j
Next lay0
# d6 k* v" i, [, g2 j- W: F% x! c
If findlay = 0 Then '没有找到图层5 M; ~5 Y, K# M. x8 A% R% h6 B" C
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
2 z: g- A1 U9 \4 }! V$ z4 \ lay1.Color = 2 '图层设置为黄色# k/ o6 c1 \1 ]: U1 v' v- Z$ ^' Y0 H
$ V# {, w& K2 X
ltfind = 0 '找到线型的标志,0没有找到,1找到
' u# F- S7 A r+ a) x# b) ^ For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
- A. g: a+ j3 }) C/ y7 e S2 @ If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"+ x" y3 h( s7 o
ltfind = 1 '标志为已找到线型0 N/ Y% S3 ` T+ Q4 T9 }% g
Exit For '退出循环3 ~- n. {( Q' [( G5 o w; H! D- I3 f
End If
* ~ l5 g5 T& s: X Next entry '结束循环
/ S: |/ ?1 o" Z; u1 S5 H4 D
4 I, Z3 [7 r$ D% o If ltfind = 0 Then '没有找到线型
4 r1 J5 t% r9 ^ ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
* c# N( C& d' J End If9 y. N# D9 N9 J- m2 G
lay1.Linetype = "HIDDEN" '设置线型- A9 c4 s$ q d( Z$ H
) `+ D) s" q! ]" p
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层) d+ | `- ]/ t3 h. J" |! K
End If i: R& g8 b! J" x) u/ k
7 B9 Z l; K% V4 e' }7 ~End Sub
. t5 N2 h' _8 O: w* J% j1 v
+ T1 k% }! r" D9 A在寻找图时时我们用到for each……next 语句- B" D7 D+ v. c) \+ s
它的语法是这样的:
8 o) I6 \: F) c8 M6 zFor Each 变量 In 数组或集合对象
. Z* r& t; L+ d" \# |……& |1 P' v9 D. B+ e7 r; z
exit for
( n8 v0 G5 n2 {5 z* T% ?……# C0 K1 B% F+ z9 u& H% U4 |; P
next 变量
5 g6 M. F! t4 j它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
: n! H% h f* S7 P" @在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。3 D. j( G" I8 f7 p: O& I
8 B+ ?: Z; e. `
If lay0.Name = "新建图层" Then
& t$ @9 @% _8 v' [+ ^lay0.name代表这处图层的图层名/ h3 [- y# {5 Q4 p, j
' R! g5 a; D3 ~* R) I+ [
IIf(lay0.LayerOn = True, "打开", "关闭")
1 B* B) o; ^# ]' u" f$ e) e这是一个简单判断语句,语法如下:7 E+ P0 E: C7 P9 {4 C5 b
iif(判断表达式,返回值1,返回值2)
3 _& M# M# R3 C8 ~/ f当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
$ `6 |) F4 T* O& G: b
[/ U$ ` g* W' u; F q4 k: eMsgBox(msgstr, 1) " I4 s E7 d0 M- U/ [
Mgbox显示一个对话框,第一个参数是对话框显示的内容. \. B1 F% n4 v d
第二个参数可以控制对话框上的按钮。8 n" o+ q9 t% D" ~
0 只有确认按钮
0 p4 U7 a2 n- H8 _* i- e( P1 确认、取消
: U4 ]8 J. p1 o/ X0 y2 终止、重试、忽略$ N, h c q* p Q" S. } p
3 是、否、取消" I- Q" Z" P3 k# y# I
4 是、否' P5 s, v: q) p/ `9 ?
MsgBox获得值如下:
. s* U S5 B" O5 a! ?9 U9 a# `1 I确认:1
9 X! D3 X3 a% s0 ?* Q取消:2
& [% g+ c# c) {; Y. g5 ~7 P终止:33 [/ E4 R) I4 H1 Z
重试:4! B n' c0 L* X( f
忽略:5* n/ V# `6 L) c
是:6: x- M( D/ n4 V( F
否7
! f0 U# j+ W" T; C \! G1 b初学者不需要死记硬背,能有所了解就行了) W& A9 h2 R( a8 H$ ]
* L/ T7 z3 y* E8 T5 NACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:3 U0 c) _& G6 k. f
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
4 \% s' o, s. f( SThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |