先简单介绍两条命令:7 b2 ?5 K8 P* d& S5 |. _! p
0 x1 K5 @, o9 ?1 B! I- b: ?; Z1、这条语句可以建立图层:
$ j- V8 |" g5 ] F* e. Y& F; V( zThisDrawing.Layers.Add("新建图层"); o# P8 h' P2 [& h& t
在括号中填写图层的名称。
! Z0 b9 S' q/ ^
: z5 t6 L8 \9 ]& d- G: i# x. ]' @2、设置为当前的图层( ]3 v6 F+ B- Z P7 Q. O' E
ThisDrawing.ActiveLayer=图层对象: G5 U+ Z/ X% R: V+ R
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量3 Z- w6 @; j- t: q
8 r1 t x. p/ Z) O0 V4 v$ t$ x7 G以下一些属性在图层比较常用:% {. e) @' ~; E: s+ U' x( w" F7 _
LayerOn 打开关闭
& W# n3 o8 `; B4 P- vFreeze 冻结
7 @, d, k! e j" w* P9 P0 [ }& SLock锁定
2 \3 {. i7 C# T6 J' r+ b% ]' SColor 颜色# g- l0 Q4 J) {- {3 l: C
Linetype 线型% u1 }- s4 J5 }$ R' i! t F+ E
. X, n& a# G+ ]+ f: q: N1 V% t- j) f# \% @" L+ H- f9 J$ F
看一个例题:
9 W* g, `% U; [" O2 {1、先在已有的图层中寻找一个名为“新建图层”的图层
0 f& v1 h% o# a$ d; a$ Q2 ~2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
4 E [7 o$ m0 n; l$ I6 [3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层5 u$ J; u3 D; K- D
3 G* u4 \. C6 |+ D
Sub mylay()
4 a$ l# D9 o2 L# ?
! a8 ~) J* ~7 M# m; ^Dim lay0 As AcadLayer '定义作为图层的变量
) j# x! Y7 ~- l' s& J3 @7 m* Z; ~Dim lay1 As AcadLayer
: b! b8 D8 Q5 [# y) f8 ?' C) T$ s5 t( C4 T2 p
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
. [- `8 n( n# f; W$ E: z) z7 L9 j6 G, ]- N0 z
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环- J- Z' K3 s9 W# V- d" F
( E" C+ g4 l- ^
If lay0.Name = "新建图层" Then '如果找到图层名
% W$ a( G1 s3 Z" T- p1 T findlay = 1 '把变量改为1标志着图层已经找到
) ?0 w" j( j5 K* X U/ K6 F$ b msgstr = lay0.Name + "已经存在" + vbCrLf
0 P4 ?! D5 X# m( e; x* O' `3 Z msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf( r3 R$ P: m- b4 @
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
2 [ Y# h. ?$ C* F# t/ J+ ]; Z7 G msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf z! q+ ?2 h+ @' L5 v# y! v
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf; H9 n/ ^" V) d2 Y0 q2 K' X9 Z
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf% l5 o+ O9 C" x, z5 r
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
1 C: ^! L" q( ]& |1 d msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
: l+ B$ P, D4 v4 T7 S msgstr = msgstr + "是否设置为当前图层?"
) _( @- I4 C2 w+ \- K If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定$ `" ^- ]+ T4 J. ?" y+ ~! [
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
' y3 I- G0 }$ H! G- u2 @ ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
# G- X6 X( g. ?$ d4 R End If
5 [$ @9 } X; g5 P Exit For '结束寻找3 [$ W7 d% k3 h4 D* Q
End If- W# s' q9 o$ w
Next lay0- k/ V; f$ f8 T. _- n
# [; s1 E A! ]* qIf findlay = 0 Then '没有找到图层
' f/ b4 ^! y# \4 v Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层. R+ r& l. s0 x+ {, u
lay1.Color = 2 '图层设置为黄色, ~$ r. q6 j( G/ X4 `
( f) i/ g5 | g8 ]# l h
ltfind = 0 '找到线型的标志,0没有找到,1找到6 q- _7 O: m6 g. h+ c, R; l( N$ ?
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环* S3 k1 i: k2 y3 I9 b$ i: O
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
) [% P O: D4 L' n; i# g4 A' j ltfind = 1 '标志为已找到线型) \ g* u7 Z) v
Exit For '退出循环. G; K1 J4 ^" C
End If
. O: P( U7 {/ A. c6 ^3 F7 R$ Z9 h+ F Next entry '结束循环, j1 E) }! V& ?. M6 [
2 B/ _0 _; [: ~0 Z3 Y; m0 H
If ltfind = 0 Then '没有找到线型- I5 l7 ]% n- |! L& m
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型2 E. c! f# [( h& T( f
End If
* O6 i+ p: u6 v! h! N% y lay1.Linetype = "HIDDEN" '设置线型
7 b) F- r: @+ y7 s1 Y; \; D9 R$ w6 |+ h! B) o% k
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
; S8 }6 r9 y3 b- QEnd If
1 f+ V5 g& g& a! j
5 L' G6 m! a) F. f$ yEnd Sub
# p+ ~0 |, P% r% |- z3 N1 l$ `; b$ J6 f- j5 q
在寻找图时时我们用到for each……next 语句9 B" N- h: t" a3 Z* C
它的语法是这样的:
* R8 m9 I) M; p4 W" g% O6 FFor Each 变量 In 数组或集合对象2 x0 w! U4 p7 [5 S
……6 |+ z. C0 `0 i3 U/ r
exit for ( Q: }& @) u! w! b B. X5 M
……
7 ^0 O& Y+ a Anext 变量) w; e% ]2 U# B/ i
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
: \5 G* f7 u1 |在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。8 j! z; L$ _; g) X& |% C4 ]) H
! f1 h5 p, O3 CIf lay0.Name = "新建图层" Then
+ |' j$ e f7 v; S7 Q3 ~lay0.name代表这处图层的图层名
+ m2 r9 [+ i0 j% W/ _3 r4 }2 [+ W
IIf(lay0.LayerOn = True, "打开", "关闭")
: O# |4 g( s; n& U这是一个简单判断语句,语法如下:6 ^. B/ P& b" U' s- T1 M
iif(判断表达式,返回值1,返回值2)$ U4 h- P7 ?- V4 K5 U
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
& q- r/ w- r5 z6 x! [
- p, z: K5 F! w: OMsgBox(msgstr, 1) S( y# s: |! }, u) E2 R8 K4 `
Mgbox显示一个对话框,第一个参数是对话框显示的内容
% k8 B& L3 O6 k8 C) g第二个参数可以控制对话框上的按钮。! ^- B1 g+ n, Q5 U0 S- v* T1 K
0 只有确认按钮
% V5 [, z! q6 U" Z4 e1 确认、取消
3 k2 c7 v( n$ o2 H2 终止、重试、忽略; ~6 b, Y1 Y* W' t8 |
3 是、否、取消6 \# p. k" ^: X4 f6 L/ T( O
4 是、否% Q$ u0 r; J5 C5 r
MsgBox获得值如下:0 Q$ r; s1 w+ M4 C2 T0 \( f
确认:1
3 j8 @- E) `& z0 [( g# @1 Z3 I% ~取消:2
! e. j* m/ `; G, L终止:3- Z4 s3 \% g3 K% Q: w: h0 D" n
重试:41 m5 U! E0 ~ C( a$ y7 _/ |4 D
忽略:5) |' ]3 B, S# b1 R7 S* V# N0 v2 F
是:6, j1 e2 N' Y8 P2 V
否7! U( D$ k+ r; ?& h' x' L' O5 }) K
初学者不需要死记硬背,能有所了解就行了9 u8 ^' T' K. q$ r4 t* p- F; l! b
; T- n. w7 n0 U1 a) v, _ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
$ ]% y: I4 U' g; |& P- T/ p! HThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
J1 `$ S/ P/ YThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |