先简单介绍两条命令:
, \4 K5 [& Q+ @" v/ F$ V" u. T& U) O/ L$ C- x) c Q8 m
1、这条语句可以建立图层:6 W3 i) w8 i9 z2 e$ k
ThisDrawing.Layers.Add("新建图层")
4 ^1 r3 B$ W$ f在括号中填写图层的名称。
4 z, l9 f& a, w# @9 |# Q! \
. o! l: |/ A) W( y4 z8 @: ]2、设置为当前的图层) R2 i3 A; e) X. Y1 W: z7 j2 ?
ThisDrawing.ActiveLayer=图层对象& I. F# r! U4 d2 A2 b9 W5 n
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
3 G9 D- M H" V. c* f( k$ r7 `+ R. Z
以下一些属性在图层比较常用:, ~+ q6 f% o: ~1 m7 k
LayerOn 打开关闭( E1 r9 u b8 C( v% Y7 Z$ B. G- v
Freeze 冻结
' O! T2 S) A4 c" _Lock锁定/ D- D5 x/ i) C9 u/ x2 k
Color 颜色
; u0 Z5 g" G5 TLinetype 线型
/ Z. z' h6 z" g, a0 F, s1 J& r0 D( f# }
5 J% ]* ]: j4 H% t看一个例题:
# s- g" i6 `) J! ^1、先在已有的图层中寻找一个名为“新建图层”的图层
7 s# [2 ?" g5 ?4 D2 K6 E; }2 E: O9 l2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
5 y: u, v4 f) r1 e3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
- @1 g+ q& b5 i6 t* s! O
* B& D- y$ O# |' R/ o" u: fSub mylay()
! c. P# z+ ?8 c3 ~. s% Q# ?! f
& D6 ?2 j+ a; i5 d# iDim lay0 As AcadLayer '定义作为图层的变量, _1 t) b1 J, Z, N0 u3 d0 N
Dim lay1 As AcadLayer
8 B7 m- T2 t1 a* t9 |% b8 a: f+ u$ K' F
: s+ E% M p) R3 E# C7 ?% P( ffindlay = 0 '寻找图层的结果的变量,0没有找到,1找到0 s1 [& i# R1 d6 [* e
3 u$ d" ~$ j/ R+ _
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环5 \6 n* T5 {6 C8 r7 ^- C1 a
6 D8 F) e# T& v4 S+ u If lay0.Name = "新建图层" Then '如果找到图层名9 Z) c' |* t8 S% c! r x& f4 a
findlay = 1 '把变量改为1标志着图层已经找到
9 k# g, z0 F2 o/ q2 V1 E, @. D msgstr = lay0.Name + "已经存在" + vbCrLf
8 C/ H4 U8 r$ f4 ` _1 N* s6 i msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
6 S1 E; G, R. r; a% E msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
6 c" ]% Q: u' J3 k msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf3 v/ ^( e( }& n( P8 Q
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
3 a/ {( D+ R. @. S8 u' _9 f msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf s; v0 l0 r. ~8 M) s$ |' c: e b
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
; [3 t# ^- J$ U% u V o( S msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf" x# T* v+ |4 o7 ^- H/ p! C* j. M
msgstr = msgstr + "是否设置为当前图层?"
J0 r# j9 V9 t$ V B. [ If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定3 A7 {) C% A: L# P" ?4 j
If Not lay0.LayerOn Then lay0.LayerOn = True '打开" r# `+ F5 P5 D1 O1 v4 L# u
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
8 k+ u1 j' k- X u0 e7 |+ ]+ A# S End If
# S! f9 T; P+ d4 Y8 C& t& {5 } Exit For '结束寻找5 G% Y6 y( H ?" n
End If5 [) _5 _0 U! a f2 ~3 V2 ^- r3 i
Next lay0% _: Y: Q$ x& ?, U: T% k0 k
' U& e: c) U& U* u: i9 b% ` s# d
If findlay = 0 Then '没有找到图层
) C+ D9 H6 D/ s Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层$ ]: d o7 j: [, A1 o, Y
lay1.Color = 2 '图层设置为黄色- [+ U, Z- W! ?7 V6 n/ X
8 q$ N2 O7 b" C8 _* [/ ] ltfind = 0 '找到线型的标志,0没有找到,1找到
: j) L; f& m ~8 E/ F: b7 E For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
: }7 k8 N/ G6 s If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"- r1 @1 y) K0 @1 {
ltfind = 1 '标志为已找到线型' c p7 l7 b. L( S: U4 f* D! p
Exit For '退出循环6 f% }4 `$ O! R \3 d8 |
End If; S: }7 Z' n/ E" I" N3 N
Next entry '结束循环
1 C/ Z2 J+ m/ B$ f! ~" l1 W+ R$ Z* ^0 O0 k7 E6 ?; l+ U
If ltfind = 0 Then '没有找到线型+ \! \, D% }6 r3 P: f
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
4 ?7 J! e! G2 F' J6 o/ q! b End If& U. C) P! X% q8 v' F% ^* f
lay1.Linetype = "HIDDEN" '设置线型
. p8 \3 D% t$ M
. W W% U E! m& X' w3 j# Y& | N2 ~ V ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层2 v9 t/ W+ W4 o b
End If
1 @0 f; a4 G; N7 C* S# }
& @( E6 u3 F, a( o0 YEnd Sub
+ L0 }& j1 V4 w* N- G0 d5 l
Q2 l' R4 P# @7 q( S; \+ U' a在寻找图时时我们用到for each……next 语句2 S, v5 Q4 s( R/ ]7 B$ H
它的语法是这样的:$ M9 v- \4 {% q( i
For Each 变量 In 数组或集合对象! Y: e l! h" ^" F( `' t( B$ j7 A
……
" i# g( z _5 n1 r6 o8 Fexit for
( ~" D p* r8 p3 [! G' L# x7 @……5 X j+ X4 x! R1 p8 d7 ~# \/ |+ l* K. p
next 变量; k$ |3 `4 e, l4 L
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
' Y# W8 |( ]* b' q9 v; G: O在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
! e' s, a3 T! Q! G* V
+ R. J) i. Q+ e" k, zIf lay0.Name = "新建图层" Then" w5 r; ?+ P8 ~
lay0.name代表这处图层的图层名. j4 o4 B ~6 r" S2 s
9 R G6 C% H* f3 s, J+ c7 H$ {IIf(lay0.LayerOn = True, "打开", "关闭")
7 ?4 Y# X$ a ^" m这是一个简单判断语句,语法如下:- i, {! \$ o/ S. _( y% [
iif(判断表达式,返回值1,返回值2)
' J6 r) |" @( I% {" F) }当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2: q% G, D) Z; \
9 c. Q+ [/ C9 _. }9 ^2 TMsgBox(msgstr, 1) , w' n% M/ s) @0 M( [
Mgbox显示一个对话框,第一个参数是对话框显示的内容( p8 G( |+ @3 A I' C! v2 \; M% C$ }
第二个参数可以控制对话框上的按钮。
$ o1 S6 x6 A4 J7 M0 i, \0 只有确认按钮$ t Q) {1 Z- v; T5 [+ K+ `
1 确认、取消5 w5 s% q7 z8 O# q
2 终止、重试、忽略
( V. N* z$ p/ L C+ n$ d! ^9 y o3 是、否、取消" M& ~& N+ y6 o& A
4 是、否( N) S7 ~! V& q' \: t
MsgBox获得值如下:
# W0 J# j! W; W+ Y7 F: h确认:1
. ~7 E* I' B3 Y, H4 u9 O取消:2, {0 ^7 J) ?* E4 W' L( Z
终止:3
. k, K' c/ W+ j& c# s: b# H重试:4* {# u3 r% Z9 f, n
忽略:5
) h) y, W4 O; Q9 B$ n# O是:60 D4 Q' j5 n/ g9 F. L0 U
否7+ ^; S0 I. v$ E" ?
初学者不需要死记硬背,能有所了解就行了
' Y; Q' a( L( S$ H& Y9 S4 w: q2 @8 x& h0 g& ?7 S
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
! Q' t+ M2 }/ N9 j; U/ ~' @ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" * ]" z$ A" T# j8 Y; ]! T
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |