先简单介绍两条命令:/ t" J( v: y3 r
- L& C' x: p: y5 ~1、这条语句可以建立图层:
4 O, U( b# l9 O5 Q! }/ [ThisDrawing.Layers.Add("新建图层")0 }3 k9 x0 @6 |. S
在括号中填写图层的名称。
) B! m+ G; Z# j8 l
* E1 X. w: C3 P, g q7 B2、设置为当前的图层
9 [# R p5 L; V( A( Z5 I+ SThisDrawing.ActiveLayer=图层对象 n- j! f T* l( @+ S, |7 J' R
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量! B( M8 G4 Y/ x
6 W7 O7 E! V9 }- P以下一些属性在图层比较常用:4 J7 m+ Y* k8 I- G
LayerOn 打开关闭
# Q/ G9 O p5 [& HFreeze 冻结
" N! c2 \4 [# n) A3 A9 R4 ~Lock锁定; r0 f4 v& y; _$ ~- {) k/ C
Color 颜色
0 p9 C: W) W1 W7 h1 l4 y5 VLinetype 线型
( i7 e4 J3 Y& n9 C. |5 c! n/ V, U- C1 p; E
( W' r5 n* F/ Z/ Y
看一个例题:/ d j9 ?) W5 s: D0 X0 _2 M- m/ X
1、先在已有的图层中寻找一个名为“新建图层”的图层2 z* S" P4 E' ]+ Y7 `$ h+ B
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。$ G- u: |5 J5 O" I9 q9 [! ?, c4 d
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
8 h0 d" T; b, @- H! g0 u" ^! H) P+ }3 V5 S: B% {6 s0 z
Sub mylay()
) [! \( Y" N, ]) @- S$ D$ V8 \
. c* p+ ?: O2 X8 c3 i) E* EDim lay0 As AcadLayer '定义作为图层的变量
, f: K5 R8 s% D0 mDim lay1 As AcadLayer
2 P1 @8 @8 w% j L' {" o. {
% ~3 w0 Y+ F& F: ^5 \8 s% N) hfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到9 m, x' \9 R& \% p
) H' }: u2 r% U5 dFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环" T$ h8 m U% M: b" k( r
9 _/ E+ b* a0 t4 W/ [5 u9 Z1 t
If lay0.Name = "新建图层" Then '如果找到图层名
& @6 V: Q- j8 H5 C findlay = 1 '把变量改为1标志着图层已经找到
( @; d. T9 ]9 e, f/ b msgstr = lay0.Name + "已经存在" + vbCrLf! R& B/ }% ?, c4 E) R' M
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
. ~. s. H4 s& I. u$ g: j) ~5 ^. D msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf, n; v0 F7 l/ s6 O i
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf1 {* G% N' a* M9 Y0 r
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf% |: z/ }2 F* P' s$ \2 X
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
1 t* U' ]1 u6 _$ R* { msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
6 t5 p; B- j/ l+ b# }# T msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
$ R' ?" f& g/ @; M+ e- S; k msgstr = msgstr + "是否设置为当前图层?"
0 M$ K! e" i0 V& I; ?$ Y3 W If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定6 w; p3 z% r m7 ]7 i! F
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
7 q6 L8 a8 p. e4 O3 X& W: F ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
' Y3 W& L. D: S, H5 _6 O/ e End If
' B# A' c7 o+ Y. y Exit For '结束寻找
1 m2 T) y* P+ p) W% n( L& l- b. j End If
; y6 j; y. Z& {) B XNext lay0
$ ~7 ]: w" |( i% H& x( c7 V$ n, c+ U* Y" _
If findlay = 0 Then '没有找到图层
; v0 n; D5 O, s% K Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
8 i1 s6 a T$ y8 n% ?$ ^ lay1.Color = 2 '图层设置为黄色
% e4 J1 Y8 Z9 C9 P0 a( t' } ?* B/ L4 w( X& K# m8 z
ltfind = 0 '找到线型的标志,0没有找到,1找到9 o& E Q7 }; i% u0 w# O9 Q5 G1 p2 ?
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
8 e1 b, m& k1 r1 Q: I/ {1 k1 X If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN") K S7 ?+ l* X. J7 c
ltfind = 1 '标志为已找到线型
8 V) h1 j. Y _& L1 U) X: C' [ Exit For '退出循环
8 ?7 r0 t- J/ w6 o End If
! g+ }! j5 N; j8 Y: B1 x' Y1 A Next entry '结束循环
- b; M6 b2 u- n/ K- \
* L: g, m1 V+ u$ X1 x3 N; B! g If ltfind = 0 Then '没有找到线型5 r7 u: G# y- }1 B; M0 A" F
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型+ \# ~. v: D# I6 `! D$ j
End If
- l% F1 e4 g! Q0 s$ u4 | lay1.Linetype = "HIDDEN" '设置线型
7 W" ?( J* j4 x# X9 M' q
/ t( ^( G# Z! p ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
5 z \. E6 h6 {. ^( iEnd If
* a3 ~; f6 u3 q: `" g6 x2 Z0 J8 o- a
End Sub0 I/ c7 F, S; ]! J2 J/ j
& X3 c) r9 E* r ]8 i: J3 ?在寻找图时时我们用到for each……next 语句
8 g% ?+ r. N% D0 r它的语法是这样的:
9 q. ^& A0 M& X" ~( `For Each 变量 In 数组或集合对象$ A1 |2 {4 p1 U3 b# Q9 d
……
b8 h( r' k# h/ Wexit for ) A; A4 A2 Y/ }- c7 J. o
……0 N- m$ h' K$ [4 u" A1 I1 G' s
next 变量5 ~6 z7 w; t: B/ n
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
7 k& O: ]. _$ a& {! E, {' O在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。+ A$ I) `. V3 p' e9 d
. e( p! D3 Y1 T' [5 qIf lay0.Name = "新建图层" Then9 t5 \# ]* o+ X8 B, e
lay0.name代表这处图层的图层名4 V; K3 O( h2 d1 S9 ]" _
# v# ~& i: {5 ^. M0 S
IIf(lay0.LayerOn = True, "打开", "关闭")
* y# w9 x; f) Y- U6 {这是一个简单判断语句,语法如下:
& G/ k1 m6 v5 o) a, U+ Qiif(判断表达式,返回值1,返回值2)" l+ d& G; A$ ~, O6 r+ C
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2" Z' A. D4 k& L' E
& w7 R+ E1 X6 P( e% O* \
MsgBox(msgstr, 1)
! Z6 A' g% p6 u7 L+ @: P' iMgbox显示一个对话框,第一个参数是对话框显示的内容9 \- R8 _: C) r0 e" K1 }
第二个参数可以控制对话框上的按钮。5 R! K" X* R& C X/ U3 L
0 只有确认按钮4 J; @; F) n& |8 C+ @
1 确认、取消
. T9 q a. {1 o3 n! g; r/ \2 终止、重试、忽略$ L2 U9 X8 N: Y3 f5 N
3 是、否、取消
' [$ t5 a8 C2 w9 X4 是、否$ H3 ? q. d6 |8 N
MsgBox获得值如下:
# g% I" x; x" H6 m/ g0 ~确认:10 P4 d, L E; k V
取消:24 H9 V0 q; _0 E" I! \. h7 D+ \: R
终止:3
! S! r. V8 `5 R) \% _# k重试:43 M( r" E( N$ E6 {# k) {
忽略:5& _2 L) \# ?* P, M9 v& q2 s
是:6
+ J! h+ I. x( K3 Q# v' m7 s否7' k( D( r1 w- P# \3 S" }
初学者不需要死记硬背,能有所了解就行了
2 J% G7 H# m9 L2 p- h& k: n2 q, d9 Z `. {, _) T
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:" P! Z8 e. [3 Y$ i0 J% n/ ? e. D$ w
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
. a7 q1 r# v- M& B ]ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |