先简单介绍两条命令:
& I" |+ Q) T" G( x, l9 B- {6 [) b0 ~* H5 m
1、这条语句可以建立图层:! i# U1 y T4 e4 }) d: i
ThisDrawing.Layers.Add("新建图层"); G2 |9 N+ {5 {* e( z
在括号中填写图层的名称。: |% S' f3 f& c
2 N& K+ y6 W/ x6 z9 [3 v, p7 T2、设置为当前的图层
! O# a* E7 A4 K6 I) }ThisDrawing.ActiveLayer=图层对象8 b5 m) b# Y$ V; `9 \2 k
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
1 {! e+ H: H1 L* x" N9 c' @: q8 B) l, V; Q* ~+ B% Z8 d
以下一些属性在图层比较常用:+ d! W# ]9 C0 C* D) c. j
LayerOn 打开关闭
2 t$ r$ L% D% n( o9 J7 gFreeze 冻结
' g# u- ?, s* C" O+ KLock锁定
* z' n0 J3 r2 ~6 _Color 颜色
4 {7 D: }0 v! bLinetype 线型& K2 ?4 l, ~9 o8 G7 O6 u6 Y
! F' x) X- v- _: T2 Z7 s# m4 V
) |4 C* q4 N$ X& d7 G' h, G9 p
看一个例题:
% Y A- y% m1 {& {1、先在已有的图层中寻找一个名为“新建图层”的图层5 h, }, P$ d$ I& r
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。( r7 R) P3 e2 ]9 o: J: n! m# c
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
. {& j0 {( ~1 N; x) v& r
, B2 _ C. B, j3 U1 wSub mylay()
2 R7 p! j& L# b! q+ a
; s5 P1 z' }7 B% QDim lay0 As AcadLayer '定义作为图层的变量% K! E9 X- A1 j7 X0 G$ O# @: Z
Dim lay1 As AcadLayer
, S5 w, E& Q$ q3 ?; z$ j& M9 Q3 X9 r
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到$ @ {+ s% i' q. ~5 L6 @9 [1 o
6 G. r1 h) t8 M
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
1 `( l( d" n" H; {9 D$ B7 s
0 d: r3 @) z- f0 ~( D If lay0.Name = "新建图层" Then '如果找到图层名
. R+ v4 \( M5 H' @8 Z findlay = 1 '把变量改为1标志着图层已经找到
# ^1 I/ j% `7 S" s2 J! u! J/ D& q msgstr = lay0.Name + "已经存在" + vbCrLf; b& ?8 z8 z9 x1 z5 G
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf7 O$ [: H2 v5 _
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
7 L) ~9 ?6 l* L9 Q& F. {2 V msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
- B: j' w# m+ M6 \ msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
% I: A8 v% Q |* }$ I" \ msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf) a8 Q l, }. O8 o1 ~" }4 j
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
+ f0 m( K s1 h8 b, u msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf" j8 J( K S/ P) o
msgstr = msgstr + "是否设置为当前图层?"
4 s! _1 g; X) p6 V0 n2 N If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
2 a. A; n0 g) l If Not lay0.LayerOn Then lay0.LayerOn = True '打开3 p( n* w" b: y, H; W
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层4 R# d# ^# ?6 x8 ]' b
End If, p( h" F+ o; v' C- {0 X
Exit For '结束寻找: o& `% \# |1 z
End If5 L) ~5 A9 f' ]
Next lay0
5 F o" }5 R9 I4 e
! L5 v+ h5 Z, N/ [9 `& l& X7 [If findlay = 0 Then '没有找到图层
, C. W# p5 {, {6 T" k+ O. i" g Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
2 x0 a7 b/ L7 b# I. O lay1.Color = 2 '图层设置为黄色 S% j6 U8 a! O9 S; `
; C) }' U/ z( i/ M+ r
ltfind = 0 '找到线型的标志,0没有找到,1找到8 i0 Z- o- \+ }# d. p/ V
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
9 o* S; R. @4 x& ?& u/ E, k# z; R If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
3 ?+ _* ^' \" H4 N7 b& f ltfind = 1 '标志为已找到线型0 q# [9 [8 D& {! Z7 ^' s3 v
Exit For '退出循环
% f, y. x! e, Y+ D. n; x2 G End If
- D; } d4 u9 n2 ^3 e8 J Next entry '结束循环4 h- z) o2 t J& w
0 Y, |6 v3 r% b6 y3 B2 J& T% v If ltfind = 0 Then '没有找到线型$ H7 h( v" A9 A; Y# V' ?7 w
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
4 l9 s( |6 b' T8 O- E. B+ @6 F. D1 ` End If6 F" ~; k) B" }' K) ^
lay1.Linetype = "HIDDEN" '设置线型7 f( t3 @" ^! N* h, U# P2 {' Y
) T6 f! g3 f. N( v9 m; C3 z/ { ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
' W) g4 C3 t$ u! W3 a7 ]End If
: w& h" g4 X& r: v8 C/ |' U' p" B0 o2 a8 H: A- N
End Sub/ t( J7 j7 W( c& z* f# G
* b" f" }3 l4 o. [- ^
在寻找图时时我们用到for each……next 语句* [3 \9 z. a, I
它的语法是这样的:+ B7 W9 I- t4 j/ t" [3 X" e. v y; u
For Each 变量 In 数组或集合对象4 F( I5 v5 J4 S+ b u% c
……
& n' F0 I- \/ r+ D, B' x( U6 Mexit for ! a k) f1 v1 L: X* i: D) b
……) C7 |9 R% e2 r' ^! s" b
next 变量
2 W8 t6 q8 |+ L8 }& t它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层1 B4 |+ H1 V4 l' Z O7 p. M3 X
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
8 E5 _1 |( u. u6 N% {9 Z
! e# g8 q; p' e1 `If lay0.Name = "新建图层" Then) X5 |( Z' G, S' b
lay0.name代表这处图层的图层名1 A: I2 a* y/ V E$ w; i
2 E2 b) d; @% ZIIf(lay0.LayerOn = True, "打开", "关闭")1 N7 F' ~3 ]- N5 F$ V
这是一个简单判断语句,语法如下:. l* j6 }: v, E
iif(判断表达式,返回值1,返回值2): P/ d: O3 p( v* l+ y; X6 U+ ?
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
$ O6 R, O1 O! `
0 w3 j/ y# a. l1 e. g% ~+ a8 hMsgBox(msgstr, 1)
" [1 a! A' D2 h; v, j. e+ ?' C2 uMgbox显示一个对话框,第一个参数是对话框显示的内容( G# y l! N3 z7 _3 K2 S! K
第二个参数可以控制对话框上的按钮。
, a7 U; I* ^1 j4 l0 只有确认按钮- S# N* v5 h* n; u) O; P* @
1 确认、取消
: {6 n; {. J2 {0 i: S2 终止、重试、忽略6 G: c% }$ b- V8 |! a( N J
3 是、否、取消
N: u. S4 s+ Z7 q4 是、否' ?" q$ u5 ?4 ?) }! o5 B
MsgBox获得值如下:" F3 {/ `4 o% o
确认:1
* B' O7 A5 h5 ]; Q取消:2$ U0 H9 I( o# G4 T! H, r U4 J/ D
终止:31 Z0 S- [8 I8 R# E$ g' g/ @6 q# f7 V- y
重试:4
" r* c. T3 x5 ]3 D忽略:5
3 {+ g8 O; F3 R |是:68 ^! B) o( M& s# V3 t
否7" U- C8 w" v# _; y4 O
初学者不需要死记硬背,能有所了解就行了, O$ g! w1 t( U0 |# i( p
0 i) `3 Q' d+ |0 e; [, {
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:4 c' V$ O- T$ s1 j& Y# T+ j+ [
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
0 K. Z) }. ~/ i. t3 aThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |