先简单介绍两条命令:6 Q2 a/ Q% l1 t# C- D' V
6 k( S# l6 T. l! F1、这条语句可以建立图层:
% i5 i" s/ Y3 E% i+ C# ~8 n1 @ThisDrawing.Layers.Add("新建图层")7 g" g3 b* T/ X+ w+ U D5 ?% N3 y( M
在括号中填写图层的名称。
t6 j. ~# t6 r; ^; B, x2 Q7 P7 f: q" h* U6 W5 Y4 Q
2、设置为当前的图层( V- e" L! g- |; V4 d3 n/ L
ThisDrawing.ActiveLayer=图层对象: N) P$ s* S- ?, v7 z+ d0 C0 V
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量! D$ _, [0 E; }" q8 {
" C( _" \" r. J5 _4 ?. R7 W以下一些属性在图层比较常用:
" D& W4 v! ^) q/ J6 ^: W8 ^LayerOn 打开关闭
( j1 B. y% @$ a; E% ~4 [Freeze 冻结) Z1 f- I- R: v( I n' P
Lock锁定
0 J, W: w A7 p) p& iColor 颜色
9 @& x1 C1 C; SLinetype 线型. F) L4 m2 e2 G( u$ e. V! L
, a, G- ?' H# N1 x6 P+ \+ m% X
& x) _3 h5 E" M7 w6 X
看一个例题:
0 e, G$ K. m# v1、先在已有的图层中寻找一个名为“新建图层”的图层( Y( A& d" I/ K4 s$ S! H& A
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。9 Z0 } S( V/ B9 a
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
2 N9 z/ S: q9 z2 |5 L7 H8 |( r( f' ]+ b& A1 v, N& _
Sub mylay()
. b% h% E$ D6 @& u
- U/ J+ Q, \ n4 rDim lay0 As AcadLayer '定义作为图层的变量 u1 r7 x9 a4 X# \* A+ Z! j! r/ O
Dim lay1 As AcadLayer6 K/ l; Y2 g) @0 d) d7 l; A p
: k3 c0 [; {9 r
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到( n2 `& _7 @9 v1 x2 K
$ O& z% V; l2 T9 O, j @" FFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环1 Y4 J! o! |7 T! |
& J0 M0 I6 d; { If lay0.Name = "新建图层" Then '如果找到图层名
8 U, q- ]0 f! m findlay = 1 '把变量改为1标志着图层已经找到5 Q7 R- n3 ~5 Q3 [! j
msgstr = lay0.Name + "已经存在" + vbCrLf* b8 M/ i! Y& d1 ?
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf8 Q5 B2 X" t6 Q9 Q3 o( n
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf4 G4 ]$ q% V: v: T6 v
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf. t9 T. l% K% z' a/ k; I% i0 `
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf: h7 }$ ^) w+ L
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
! R6 c+ @$ y, I7 X msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
/ ^) K* {" m1 f& G; c& p2 b msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
+ ^( p+ I! I4 M3 E2 }' C msgstr = msgstr + "是否设置为当前图层?"
4 l! D) S% U( f7 N- \ If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
. }( E" e2 Q0 O4 D4 Q0 f If Not lay0.LayerOn Then lay0.LayerOn = True '打开# [- c6 H5 q9 i9 e
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
% M _. y% l4 t4 p End If
" c* n4 J9 d1 A Exit For '结束寻找0 l+ e* w! `$ c/ }! [$ j( q: ?
End If
! x0 V1 m; Q/ \" vNext lay07 [7 @2 f- n" e w0 u
, k4 t- D O4 Q$ [2 |4 m2 d" T6 C) _8 s: q
If findlay = 0 Then '没有找到图层* n$ h6 @2 H" J- E: J+ J
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层: z- i. j. p) @
lay1.Color = 2 '图层设置为黄色
7 j. c/ v% y/ @; [% N- ` 0 U$ w, Q6 K+ Y: s
ltfind = 0 '找到线型的标志,0没有找到,1找到% j6 @$ @! r% m
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环1 |4 `) I; m4 X' q9 E: c
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
1 n/ `9 y, f. ? J ltfind = 1 '标志为已找到线型
' v( F3 p1 n5 E: d5 p. U2 k Exit For '退出循环
5 ?1 q6 M- e% y, x9 U% l1 n( ~ End If: Q/ n, Y8 |( h9 g2 @0 N. T
Next entry '结束循环
# W! @( ~- @1 t h3 e9 S
+ B: {: i* b- B6 @9 v5 c8 X If ltfind = 0 Then '没有找到线型
$ g, P; c4 z5 E$ k4 j3 r4 ~ ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
, o5 F9 }& q- d End If1 k+ h" C4 `1 z* Q+ S9 z
lay1.Linetype = "HIDDEN" '设置线型
0 n3 l$ r0 o, X/ q5 p! K6 p4 f' w& r# [" L# x
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层' m/ N# Q1 C4 Y* g" G6 {
End If8 u1 v, v$ q F- J8 S
+ q& t, P# C5 U9 N! k. g9 e. E- O( SEnd Sub
; Y( K+ o* I- d, M4 n2 n- \6 J: r! n7 O- }/ p
在寻找图时时我们用到for each……next 语句
) r8 ]* i' |: G7 F它的语法是这样的:+ c: w n0 p9 N1 l+ ], F
For Each 变量 In 数组或集合对象
5 Z; k9 M. |6 p: }% ]+ U……; u3 o$ @7 S4 x' `6 i) n- U
exit for
& i: J V, b1 a& o/ @; k……
4 T7 ^) u( T# M$ i: Bnext 变量
4 Q1 V+ Y0 F9 j9 P8 {3 O它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层$ |) |% s* S5 d: a, r r
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
9 X" s n2 i5 x9 p- ^; u e% ?& ^9 A+ {# u
If lay0.Name = "新建图层" Then" r: q" V$ q0 n. ] e K% I
lay0.name代表这处图层的图层名
' r- G% f# H |
/ g/ S* w, s, |7 {IIf(lay0.LayerOn = True, "打开", "关闭")! u5 T' T+ P: ~% @
这是一个简单判断语句,语法如下:
# l) O* d, C( T) g2 M6 v. u" k1 A6 \( Uiif(判断表达式,返回值1,返回值2) X$ F% S* E6 S
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
; f5 M9 w+ {4 X* o% p
! K8 C* e( Z# ?$ C; RMsgBox(msgstr, 1) & {1 F, ?! j* C' D' ^2 M
Mgbox显示一个对话框,第一个参数是对话框显示的内容7 e5 k6 d- p. I: ~, Q* t
第二个参数可以控制对话框上的按钮。
9 [( r* {; L' B" W' ]+ x6 l0 只有确认按钮
3 p8 g2 u1 v; u) Z1 确认、取消
8 O* R/ m: ^; m0 B4 D* R1 Z, `3 o5 [2 终止、重试、忽略$ R6 j: [0 R* @
3 是、否、取消3 U U% j6 J: ~& u% X. ]( F
4 是、否& ]$ [7 @5 T% |7 S! z0 o
MsgBox获得值如下:" m; e O2 t! K" n
确认:1' ~; r7 A) x3 P
取消:2
6 X0 i+ t, T' _" n8 w- v终止:3
8 a/ x! p0 {; g* F2 L% T/ {7 W重试:4
7 P, w* g1 j, v# s" ]$ u4 A9 k忽略:5* Y0 _$ Y8 |9 f+ n& ~& V5 u
是:6' v7 i/ S p: l9 h% t8 @* O% E
否7
& S0 r: [3 f* w/ A X' e初学者不需要死记硬背,能有所了解就行了
: K+ R. |, H. y# D
2 s" B! l( ~' U' o) o8 e& M2 QACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:' _* |7 r6 @1 W0 Z
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" ! S7 n8 u+ U$ w/ Q) V' `
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |