先简单介绍两条命令:( c7 f0 X1 l4 S* l$ W
9 t& z8 `6 L' b$ s$ H8 S% M$ t* P
1、这条语句可以建立图层:6 c* g, i' Q0 K; l* K" i3 |
ThisDrawing.Layers.Add("新建图层")
! W4 U* E1 r d& r" u' V# i/ N在括号中填写图层的名称。( l0 h8 H. c1 c& r' V8 ^
$ s' G# n5 L/ e
2、设置为当前的图层
7 T; l' e4 I; L4 k. P: y8 cThisDrawing.ActiveLayer=图层对象
* y' ]# M6 j: w, U" X) u+ R" {注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量! W# _3 y& l' y1 N: Q$ P2 x
- v( S- ]+ b% }9 L- A" h
以下一些属性在图层比较常用:- ]3 a2 w3 Y, Y2 ^) b- l0 A+ `
LayerOn 打开关闭& r4 V7 q: V2 ~8 {* ]
Freeze 冻结
$ v5 D; r- t/ E! S; R5 K2 VLock锁定
& w2 [. k0 ]+ L! }Color 颜色+ I' o) ^8 y8 u9 D' P+ s
Linetype 线型
3 w* _" l3 e/ n6 K0 m/ | V D( V, E' I' i; J" g
+ a9 N( {2 `! H" O
看一个例题: S3 f0 ?3 S2 g! Z n& ^
1、先在已有的图层中寻找一个名为“新建图层”的图层
1 v% x; q. S. I& X6 k% D, q" k2 u2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。& o) H# _& B! I% T1 z8 Q- T
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
% |5 k' |# u+ Z e
0 u5 C* q" Q$ v' gSub mylay()
3 t9 E" g4 n% ]. }
0 @3 h6 m4 U+ b1 pDim lay0 As AcadLayer '定义作为图层的变量
& b0 N; ~$ I8 w8 R6 x' |Dim lay1 As AcadLayer
, L4 r1 j, ^. ]; g: U& R$ Y( F& `& ~! w5 s: ]
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到" x7 }! @; \* F3 N5 f2 w! D' a h
- d: z0 Z5 ^* @. R* Q) t
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
" y- f- a; U1 L8 e( q: h0 Y8 T* A' v" s. F# J' g
If lay0.Name = "新建图层" Then '如果找到图层名$ {( R0 I; A- F
findlay = 1 '把变量改为1标志着图层已经找到
) U1 M5 b+ Q% R! x2 u$ P' | msgstr = lay0.Name + "已经存在" + vbCrLf
+ Y5 W: n m/ C! r1 _1 J% m$ U msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf: G. x* Y, }$ [* P$ r+ W" A
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf6 W+ {5 a9 k# {
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf5 T' F q; [' B: T) F7 L3 o* c) A
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf; H& n" y9 ^" \" e8 E% C& r
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf6 d q: h v, A, m) C# @- X$ [
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
) H: h1 f5 j, h7 u3 R msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
, c" F, t8 m J) E5 B msgstr = msgstr + "是否设置为当前图层?"
# M8 C3 W. D/ u4 s' n! c7 |3 \. V If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定- B: o8 g M+ N
If Not lay0.LayerOn Then lay0.LayerOn = True '打开& C- F' u: F6 l$ a# j
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层 ?/ e* Y# g+ O8 V2 }0 k8 W
End If
8 f- k5 n+ X) A8 e Exit For '结束寻找; k s& {3 {" |4 M
End If- N/ z8 L g' y2 H% Q" T$ A
Next lay0
' e9 z, R1 y: h1 R
+ n: S# F2 b$ \$ [( A$ J' i* j% \If findlay = 0 Then '没有找到图层
0 Z! l; U# C. \5 S! G Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层1 N; W: _4 P, ~* T
lay1.Color = 2 '图层设置为黄色" F# `& x8 d: y8 R: M/ X+ o
& W% b# F# t7 @$ j
ltfind = 0 '找到线型的标志,0没有找到,1找到3 y8 z% W! I" s: v# s% p( O/ J: V& ]2 I
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
: W$ B9 L3 J9 k X3 y If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
& f# a0 |1 ~+ d% a, a" \ ltfind = 1 '标志为已找到线型
1 v3 ^6 Z$ N- ~1 e* d Exit For '退出循环
& l- d: V2 u/ A0 r& \$ E End If
% ^! `0 Y( ]- y4 J, ? Next entry '结束循环' n/ j2 ~: I. G4 ~) O* K$ x3 F
% b( v& H- T" A If ltfind = 0 Then '没有找到线型
# [+ }: h% x/ o) | ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
) W3 F8 {& k9 _ Q" h6 Y End If
1 A: L' x; @+ ~1 k. q2 w+ D6 w lay1.Linetype = "HIDDEN" '设置线型; q5 e7 Y8 Z, Y- F. j
! Q" o |; R, R3 j( B8 w7 o, F ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
+ S4 F9 x6 x- J4 r/ NEnd If
5 X' a; R3 ]8 l( P
" ~& \/ j0 t J) o" HEnd Sub! `) V R. d% S# j5 Y" U' @
4 g$ s3 P' ]. e) Q" j, g
在寻找图时时我们用到for each……next 语句
9 T5 g# W/ v9 ^8 R9 _它的语法是这样的:& |4 E$ a( B Y1 z
For Each 变量 In 数组或集合对象
+ z0 e7 `* N, o8 z3 b1 x k' u6 k……/ C9 A! n: ]( F! C
exit for ; @ c8 k8 U, g8 h6 c
……
9 j7 J. a4 j$ _/ N! ^3 Nnext 变量
0 F# I" {6 f: a/ Q) a; T& Y它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
7 p% o9 _5 m( C& X# O7 P: |, j- p在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
% }$ ~! y. i" z/ i" H' `: p8 X2 y; X0 B% U5 O
If lay0.Name = "新建图层" Then, h1 c3 p- b- s9 U7 z, r
lay0.name代表这处图层的图层名
! P( y; K+ }/ L4 V$ X& L
" [9 M# P* g: Y6 l1 o" mIIf(lay0.LayerOn = True, "打开", "关闭")
5 T! U" t* A1 C" _. s这是一个简单判断语句,语法如下:$ C- Y& {' v/ K+ N
iif(判断表达式,返回值1,返回值2)
4 h) L" i, R7 s" R) b% C& t当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
. ]& g0 |, }4 N& b# n3 {2 u, X" f$ F0 E
MsgBox(msgstr, 1) 0 x) P0 H9 ]+ W( Y2 L
Mgbox显示一个对话框,第一个参数是对话框显示的内容
[9 U: {7 Q) E第二个参数可以控制对话框上的按钮。% G) l: V$ R" u9 c' {6 P
0 只有确认按钮9 k) k! l3 Y2 g1 [# e
1 确认、取消
' q, p. ?! u* S) w2 L: x2 终止、重试、忽略) ~/ W9 @: B. }/ p8 K
3 是、否、取消
0 o6 e0 n! i% M0 R% t9 g0 x3 M2 ?4 是、否' m2 _3 O$ u; Z, z$ j c
MsgBox获得值如下:
; Q* z# |( M1 H1 i确认:1
/ R3 i+ Z1 A. d7 K2 m. _取消:2+ E4 I& w' |; b$ p
终止:3
; Q& x* X7 k; ?' H- t/ s1 |重试:4
) e% x' J E2 h6 \忽略:5; v8 X' x o; t0 b( N- T
是:6+ z4 }- r. p5 z: g5 g. T
否7
+ C6 Y9 C- b+ x* c8 P初学者不需要死记硬背,能有所了解就行了
2 X4 |3 ], ]3 w( K2 J. @9 n! e3 }% c, O
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:# t7 _1 e) X1 e+ n& s* t- \
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
4 z, k! f( |# }3 ?8 E& g k% SThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |