先简单介绍两条命令:0 g; q0 s/ r: \$ ~
: |# s# @. u I$ j# z1、这条语句可以建立图层: N6 b( n7 U3 t. N& }9 G! {6 ]. P
ThisDrawing.Layers.Add("新建图层")
# [" }7 P1 |7 F6 a在括号中填写图层的名称。 x3 ~$ f3 u! ]
+ F! j# ^! u( \: X4 {1 q1 F
2、设置为当前的图层3 T8 B2 u F" p) k$ f5 {+ u8 U
ThisDrawing.ActiveLayer=图层对象* U& e+ u1 O9 X, _6 Z4 K+ c
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
' V! S9 X y( H& R7 d+ M8 l2 x* P3 J+ q! [+ Q, ?! X+ h, n
以下一些属性在图层比较常用:
+ c1 m3 ]9 V; mLayerOn 打开关闭
5 i3 ~. y* {, G2 B% CFreeze 冻结
2 }/ p5 j3 g/ {9 f2 W) _: PLock锁定; g, @; Q7 P, Y9 u1 ]. B9 B
Color 颜色 N0 E) I2 P2 t( a6 G/ ^) H/ o
Linetype 线型
) ^% z6 V$ P N) s2 T9 @
9 a& E! K; v8 X$ _, { x: o9 x1 e' K. @2 C1 m
看一个例题:( M& |" B7 E; K; C2 Y3 R
1、先在已有的图层中寻找一个名为“新建图层”的图层
* v# {' V* q) J# d2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
8 |. v. X2 D2 N/ Y2 A3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
/ w: y1 i6 r' x8 P1 W! w5 v6 \8 @3 B, C \5 X) s" h
Sub mylay()' f4 ], s$ G% D" u, i4 \# ?
0 T& n& }* W* {
Dim lay0 As AcadLayer '定义作为图层的变量, w% o) I+ V% q4 y& z
Dim lay1 As AcadLayer+ O7 ]4 e# k* X5 c: z$ n
1 {9 w* n* p: i# `findlay = 0 '寻找图层的结果的变量,0没有找到,1找到5 ^' S/ ` K& s+ P. O8 \) y
3 A) S' m8 t$ t+ uFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
. z" x9 v; c; Q: D* O
# b* l, R, B% S3 q. F: Q: I If lay0.Name = "新建图层" Then '如果找到图层名+ ?' h! }% e' v
findlay = 1 '把变量改为1标志着图层已经找到& y$ w' \% b8 g/ ]5 Y& r
msgstr = lay0.Name + "已经存在" + vbCrLf: r" {) x: H5 P" [4 G; C3 g
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf; Q2 [& t% j& x; L
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf! x1 S; N+ `6 o- j/ _- A
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
" m% q9 C" r; K/ C; L/ C7 p" I$ u# _6 | msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf* _" f0 l3 S& @1 D
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
$ n/ L2 s8 F9 M8 ~6 u& Q9 v msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
; _0 R6 z# q2 j, X msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf; L2 ~6 X+ N6 D, }3 E* l
msgstr = msgstr + "是否设置为当前图层?"
1 x7 S0 X" H* F' W' R! r3 J$ Q- j If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
8 u) k+ q7 [5 @: L If Not lay0.LayerOn Then lay0.LayerOn = True '打开" H* ^$ r' v1 E+ J0 {; z* h& I' o) m
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层9 ]+ j' B8 t/ i" N
End If0 E, L. u8 d8 {7 T3 K1 O
Exit For '结束寻找: l; c, q1 }0 M+ x9 J2 R1 d) @
End If, S2 e U3 F, J; B6 D) |- W
Next lay0
7 L# }/ Z, D- v& d& N) S1 ?% D! O3 `7 K, w
If findlay = 0 Then '没有找到图层! [' i7 }! X( B* _: _
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层* j4 E) e/ Q5 z, C4 n8 d
lay1.Color = 2 '图层设置为黄色- `" m0 g* j' `. O9 w( I3 \
' J+ _/ I' F1 p) i9 Y- \7 ? ltfind = 0 '找到线型的标志,0没有找到,1找到0 f9 G$ {$ n0 Y% X
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
/ K+ A6 l! O& B9 |* X If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
" |: J* r( Z3 P1 @- z( e( h% } ltfind = 1 '标志为已找到线型2 ~0 O7 S6 q$ C" p7 t% C
Exit For '退出循环
% X/ j+ L, q% v* [& r* P6 f+ I+ a End If7 I3 M/ [9 Y) {2 u" m
Next entry '结束循环1 _$ ^1 i7 k6 E0 b
4 g3 @! C. ?0 k* q If ltfind = 0 Then '没有找到线型/ l) F. c+ K: j( f$ ? e" y T
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型, _& G9 H o' m$ T
End If: Y+ F+ @8 H' c4 ~! ~: I% B
lay1.Linetype = "HIDDEN" '设置线型
. x% c7 P* S% m5 F4 S; |2 G! v# H9 h/ Y! |9 d' X
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层3 }9 z" W& o! U) u' x. D
End If
* M' \$ N0 E2 k4 W+ ^5 d! d& J2 @1 W" F1 @
End Sub
7 c9 N5 c. M: J; F; y
4 O6 `7 d3 a1 K3 @; P0 O: E在寻找图时时我们用到for each……next 语句, t. p: p ?- q* @6 }
它的语法是这样的:* P9 ^! b- U4 [- h( q, w
For Each 变量 In 数组或集合对象
) Q" z. i3 f0 L- ]( B" J/ ^……
$ a2 ?5 _! m8 q X# sexit for
; f- p1 h+ ?7 W' _% l……( C8 ?# c4 Y0 S3 V* r
next 变量- a" z' X, `3 X$ v) ^7 d0 ^2 Z, p
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
2 q: m, g6 ?( U3 D: D3 P在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
) a. U4 @0 P+ @7 P) o: I, w$ J' C- h; @( L" _
If lay0.Name = "新建图层" Then
1 y: M* Y! \# n8 U {lay0.name代表这处图层的图层名+ r4 E4 k& I2 {! U7 u" M
8 k1 \2 Y+ Y- I1 d4 iIIf(lay0.LayerOn = True, "打开", "关闭")6 w2 x, h6 d/ c9 O } O: D
这是一个简单判断语句,语法如下:; A0 C o, F2 s; L3 }4 J2 N: x
iif(判断表达式,返回值1,返回值2)
9 W4 R, m- |0 a' c" P当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2% \7 {8 v. |# Y" ~6 B7 o4 V
3 k: g0 f. X5 b+ O3 N4 ~MsgBox(msgstr, 1) ) m* v# p' u5 g. r
Mgbox显示一个对话框,第一个参数是对话框显示的内容
" |' I! t. }4 v4 G第二个参数可以控制对话框上的按钮。# Q* @8 P- H* y/ i/ t/ C. L
0 只有确认按钮
; A/ q k; N, c6 F9 p) ?9 u5 Z1 确认、取消
! |9 n' y& K0 ^3 C3 q" [( `2 终止、重试、忽略
# X5 N$ \/ G8 y3 k. i7 o! a3 是、否、取消: o) p# }2 f4 q" Q& j3 o* [
4 是、否, T- ~, J( J; k, O
MsgBox获得值如下:
" z; `- M* ?3 y o4 n c确认:1" g9 F% P# `! Q1 Y* y
取消:2; `/ H. V: c5 F/ u2 ~" l
终止:3 ?* v! [ q4 d5 U: X7 r- M, `) E3 i2 s
重试:4
0 o6 C" }1 t; V P4 i忽略:5
( [5 T D, q2 A是:6
7 y; S$ i T4 Z否7
. R2 I' a. j6 K& ]初学者不需要死记硬背,能有所了解就行了3 }, m: h" Y0 k0 s
1 Y9 w, j0 u; F0 J- hACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
1 W/ U4 D: E1 e5 z tThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
. y6 h* M" R# EThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |