先简单介绍两条命令:
/ _( n; ~ n' l( ]' ?
* W9 T7 I) y: N) h& W5 g" K9 R1、这条语句可以建立图层: p- n) n+ p) I
ThisDrawing.Layers.Add("新建图层"): N, E6 |) } H
在括号中填写图层的名称。9 ^$ P( X/ w$ |9 ^
3 j0 A+ w, P6 C; N$ z* K2 [& d$ a
2、设置为当前的图层% k, ]# _1 n9 b: r9 s) V; P9 N
ThisDrawing.ActiveLayer=图层对象" v; w) F- _" S" k
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量/ I5 _) R0 _$ [
9 R% ^% N8 s) n& h8 p/ }以下一些属性在图层比较常用:
4 I! p5 D) h9 f0 MLayerOn 打开关闭; k) Y& N/ ~ Z* t0 F) [1 t
Freeze 冻结
0 x1 a1 u8 A4 m) a! f) l/ OLock锁定3 a- b# _: D" |, d& m* ~
Color 颜色0 n/ F0 G7 T5 W
Linetype 线型
0 j( W [4 c2 L) [. r- v/ Q$ J6 L- ~ Y
4 u0 H4 ^, Q& o9 m8 a看一个例题:
4 p* A+ K: w0 p+ B4 b9 @1、先在已有的图层中寻找一个名为“新建图层”的图层
( v# M* k$ \, \$ B6 H2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。# }( `' H# Z7 L8 @
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层/ g. n) d* y1 w% A- A. V+ I& G
# @9 X) h+ c7 N( A2 C0 w; A
Sub mylay()( h7 H( u5 H1 h9 v) b4 X
: H, `, Z4 X6 b9 w( Y; L; }+ j
Dim lay0 As AcadLayer '定义作为图层的变量- J4 i5 p7 g6 R6 |+ Q
Dim lay1 As AcadLayer
% g. S+ e/ O' L3 K* E+ R0 s; M6 g# | p2 F
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
7 e+ E- Y/ n: I: c5 C( [( |! H! S4 A# r7 Z# O
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环4 Y/ d5 G3 D) Z V
; ^7 b: U& S# @; o, J& q If lay0.Name = "新建图层" Then '如果找到图层名& U& C1 ^5 |$ C1 X" T9 g5 A
findlay = 1 '把变量改为1标志着图层已经找到6 S2 x1 t8 V! _
msgstr = lay0.Name + "已经存在" + vbCrLf7 r/ P. W* E/ ]
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
: U* B" y7 n# P3 ? msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
& i% c5 S- V0 z* G G5 m6 b h msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf' S0 n! a$ d' B8 [! ~# H) s
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf8 y$ n- K9 x; R
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf" x4 `5 W9 ^1 h# i
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf7 y3 X/ S l3 W+ u+ Y) J6 h
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf$ y8 q" y. o. v L, \: m8 L% w
msgstr = msgstr + "是否设置为当前图层?"- c7 d1 N. t6 v
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定2 M$ `0 O; R6 \$ n! f" F
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
: E1 z8 b! G/ S/ H9 o& q) @1 \$ q+ e ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层; W6 \! m- G3 g8 H
End If
) ]: M/ z: M z/ b/ }% {& s6 c Exit For '结束寻找: d' h5 u6 p4 p- Q( {9 [4 y
End If
. c( W1 g+ ?( h; j6 RNext lay0 f$ \4 {9 Y" E& g5 F
) j& ]6 T+ D5 m. C7 k* O5 BIf findlay = 0 Then '没有找到图层! O. M2 ^: n: d' R$ v1 F
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
; e7 h, \4 A, c: d4 w5 X2 p/ V lay1.Color = 2 '图层设置为黄色
/ g1 d& y* H+ l: f$ F& u2 z: t + ^# Z2 x9 F7 c7 J/ s0 a2 G: ?
ltfind = 0 '找到线型的标志,0没有找到,1找到
. m, F b! I" U8 }: e/ @; o, g For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
4 z, P4 ^6 J; E% s" ^ A If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"$ }9 C {# }% Z2 v* ~( E/ R8 h
ltfind = 1 '标志为已找到线型& y, u9 J" v: \
Exit For '退出循环' I* E2 t1 w; Z: [, w% U; J
End If
" l: k( i: @% ^1 A" `$ A% ?& l Next entry '结束循环9 v2 Y c g+ }, O
5 r( y2 H A, U/ y7 @ If ltfind = 0 Then '没有找到线型$ `/ O, ?5 J8 r% i
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
; {4 \! G) J: O1 s4 _: ] End If
. N, m/ K' f+ Z6 s% H! q lay1.Linetype = "HIDDEN" '设置线型
, e# S3 x! u- S& ?5 T6 C# {4 w8 S% k" i" t' _+ r- P
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
1 I! M- H' f5 r yEnd If
& u, d' i- }( |- a' H. ]; i' t7 o
End Sub
, r2 @2 U: V$ f, d7 m! ^2 J2 N$ U
在寻找图时时我们用到for each……next 语句3 t- U6 Z$ |9 J2 y
它的语法是这样的:
+ h( F7 w: E- Y, P6 B8 P. cFor Each 变量 In 数组或集合对象
% J h4 Z3 P& V9 K5 s8 e' R+ L……8 e# Y' X) b* {8 B$ ?! o
exit for ! q4 l, l. G3 Z7 K! t1 A
……
' |" p& z d+ Fnext 变量
& T) b- a( h, k3 L2 R4 P7 U它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
2 b6 e' w$ j" m A* X k在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
/ _7 [1 \% e- \+ U- u1 J" U% \, r& |5 f$ k
If lay0.Name = "新建图层" Then
% k/ o% f" x' `2 alay0.name代表这处图层的图层名% o. q% A, P# ?0 ^4 _0 Y
6 M& g% n, ?3 f, L+ S3 D
IIf(lay0.LayerOn = True, "打开", "关闭"). _0 @! Y _0 m2 X* ]9 c
这是一个简单判断语句,语法如下:1 Z% ? \7 [- L$ b# J( Q
iif(判断表达式,返回值1,返回值2). t* o$ Y% \; i; \: [( g
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
! Z/ E; \ @, h6 @4 ^, B5 X- l8 H! O# E1 |9 b
MsgBox(msgstr, 1) 6 d- `- D( O5 b
Mgbox显示一个对话框,第一个参数是对话框显示的内容% E8 i7 s/ N2 X
第二个参数可以控制对话框上的按钮。& S8 v/ L/ ~( q/ }! v: ]
0 只有确认按钮/ P% T; a+ ~( K" r/ [4 u
1 确认、取消
! v# _$ ]' M8 }2 终止、重试、忽略
. }+ Y: r3 P2 J3 H. Q# E: g3 是、否、取消, X$ k! o1 Q: l9 ]& M! y
4 是、否: @- U- Z2 _; b6 a: ^
MsgBox获得值如下:' B/ [ j3 E7 J6 x& X8 {, u' \
确认:1
& n* N w" f" Z/ l% n取消:2
5 J5 S5 @. s) u. a, h$ B终止:3
) _( E. R( c0 i6 e8 X5 Y, `重试:4$ p" K$ m7 [! w; @1 u2 T5 p
忽略:5
5 H/ c* F& y; `" e. m是:68 @( h8 K3 s* Z( @: s
否7
+ ~3 y0 h# A$ B# I6 z' k; N. \( D初学者不需要死记硬背,能有所了解就行了
; |* r8 C7 n2 [) h7 T8 _- _* l/ g- h/ P, _6 Y V ?
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:* A+ p3 U" c( o' _3 ~
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
* @ x1 V$ L: T5 J" j) b- OThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |