先简单介绍两条命令:
2 J% G& K' K6 I8 D8 U% ~2 ?6 a+ T- C- c8 P# d
1、这条语句可以建立图层:% ?9 I6 u7 U' o$ \3 w
ThisDrawing.Layers.Add("新建图层")
3 U( G8 m# m3 N% f7 S- O9 S$ ^5 Q在括号中填写图层的名称。
4 \+ u7 A) K4 X5 n, r# {6 I' C! M. o% d0 ?4 Y4 u) n. n2 t# C
2、设置为当前的图层
- P7 ^4 Q- J, h3 EThisDrawing.ActiveLayer=图层对象
7 l" e- n& S; _' |% T注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
) A1 `' Y0 V! m9 T! g3 P* a# C; Q" t2 z: y; h* j
以下一些属性在图层比较常用: D- r3 \. B4 ~( X" s
LayerOn 打开关闭
5 h. A" e8 o- w) \) \" ^3 A% ZFreeze 冻结
3 V6 v" L- A4 D8 L& A0 ~# w* W+ [Lock锁定0 s, `6 I4 h& b# a' r1 n, p. Q' z3 ?
Color 颜色
5 h/ E1 e# e8 W/ S/ V/ f* a; C( PLinetype 线型- y- ]. |1 v0 X7 [/ {7 B4 E N
. ]& R$ E; |( s( F; i
- o& d X6 d+ O" v B; P看一个例题:
. I9 Q" @. j; f1 g( K$ Z1、先在已有的图层中寻找一个名为“新建图层”的图层
( I* U4 E1 T' Q' M' S2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。, H$ [; M2 R8 S, V! q0 d% l
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
" u1 t+ r9 N; b( R& _# V7 Q' @5 f' M, q- o$ K6 A
Sub mylay()
K, P& x$ }$ t: Y
0 G' u$ u" v; l NDim lay0 As AcadLayer '定义作为图层的变量
$ x: j$ x5 Y* G _' W. W' JDim lay1 As AcadLayer
' w5 l/ ]7 Y$ e8 C8 w
& |$ J4 f0 L9 s% a5 C) ]findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
; D4 p8 O! ]" u# V+ M& L+ j
2 A4 _4 M, l4 F: VFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环! N; n/ z; O' u( b5 J4 c( ^
# @' ~ y+ x! Q& C2 c
If lay0.Name = "新建图层" Then '如果找到图层名; E8 {; x5 n! I+ R4 L9 W$ A
findlay = 1 '把变量改为1标志着图层已经找到& D" }/ g# e7 |
msgstr = lay0.Name + "已经存在" + vbCrLf
* q$ M2 O; Z+ C2 Z* x msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf" e4 U- S' @) n0 B
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
. b% Y# v7 s. V4 u msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
) ]0 Z, @) \- O! v& ?3 A! d# R% H msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf: P3 @4 e* l/ f( T6 P, o
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
9 w" L3 F+ I7 }* g m7 A( ^# H msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
; A9 g3 J/ m& H$ c5 L msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf' h+ G( y# `6 p- B; G
msgstr = msgstr + "是否设置为当前图层?"
: w* I+ ^- r; a4 [ If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定. T0 a9 V& H: t/ S
If Not lay0.LayerOn Then lay0.LayerOn = True '打开) E o8 B. P2 J# n7 u2 u
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
2 o# b0 P# o* `6 }3 s! q End If! m# g( a5 Q* @! \9 z5 a
Exit For '结束寻找5 q4 j1 c+ d5 M" k; z b
End If
% _) P+ q4 @) x n/ HNext lay0
* x! H4 G* g% W: f: ]
5 b* S; d8 Z; OIf findlay = 0 Then '没有找到图层; a% D" C& }0 ^: ?
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层7 a3 [- s2 r# T: r, e' ~' j
lay1.Color = 2 '图层设置为黄色
8 u8 r8 u5 x5 T- ?* T9 G1 ?# E # v2 c9 P: d/ F8 ]
ltfind = 0 '找到线型的标志,0没有找到,1找到4 z* n, x1 C) F0 d; H
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环+ _- F8 ?0 o9 ]1 h& S
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"' |- u( J1 w* J2 a* I# K
ltfind = 1 '标志为已找到线型
/ d6 X1 `7 ^( Q3 @: K G Exit For '退出循环, H3 x! _+ r6 Q: E& C
End If
% o- e9 m( |5 w- J5 U' E Next entry '结束循环3 R2 g# r6 F9 A5 K" i1 F
& N# c! a2 A) G# ^7 E If ltfind = 0 Then '没有找到线型
4 ]9 D9 |& j9 k+ f$ @; [& q4 e ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
9 h0 k+ _ v0 W J End If
5 I; k6 c7 k3 }* k* ~% S lay1.Linetype = "HIDDEN" '设置线型
, L- `3 }6 ^1 W9 S0 F& B% h& |7 L+ _& x9 o
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
- Y0 e8 ?/ L$ z& L3 q/ ~End If( t/ |4 Y* f& c) M
3 i1 ^$ Q. T7 tEnd Sub1 F% n1 \8 F4 d
3 s$ \' S. A1 @
在寻找图时时我们用到for each……next 语句
5 \7 V9 D# B8 V ]它的语法是这样的:
7 ^$ ~( f( z- s# }4 jFor Each 变量 In 数组或集合对象5 c6 o2 c1 {% R: }( N. g
……
+ C; G/ p! M- ], C# Iexit for + m e* x9 c# B f- l7 [
……
9 |* }, r# Q5 Z$ ?; k6 lnext 变量2 r3 ^" t6 I7 r' r6 G
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层2 @( {- n2 K5 U
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。 R+ b/ h, m h, F( e9 j
4 l+ w/ w! h u0 J. K
If lay0.Name = "新建图层" Then( k$ M# ^7 @/ q' F, [
lay0.name代表这处图层的图层名
+ r' b+ `, \0 M# d* V7 c: x/ W3 Z! m a+ i9 {: c7 S% Q
IIf(lay0.LayerOn = True, "打开", "关闭")
. L: l* e' ]* B( L! l" x6 y; j3 O9 z' }% J这是一个简单判断语句,语法如下:' ~3 d* _) a: s1 t0 P" y. `
iif(判断表达式,返回值1,返回值2)2 d( j5 ?4 P$ ~8 p1 ^' n# n0 J% V
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2- }% E5 k& P0 N8 W; I
# v5 N0 k/ b% o, qMsgBox(msgstr, 1)
- R5 @1 A; B. PMgbox显示一个对话框,第一个参数是对话框显示的内容7 t" B8 p; o4 D, M- H4 A
第二个参数可以控制对话框上的按钮。
$ S' m) t2 g! c W l2 @0 只有确认按钮
& c) o8 @, H4 r- K' t1 确认、取消
- h5 m5 m: X" q: e; z2 终止、重试、忽略
( h& @9 s: P7 ]7 r/ d3 是、否、取消' u) g, G, x4 T1 B$ g* e# I. y) v3 P$ V
4 是、否
6 C8 S0 \2 ]3 j, g$ J! gMsgBox获得值如下:7 k2 N- I: q7 W3 K! w* z
确认:1
: X) t* t& S" _; U% w, Q2 b6 @; i取消:2
1 N' h8 r' i) R O9 R, k3 W终止:3
1 Z1 ]6 U# ?$ J/ d重试:4
' t% X* d. F( q7 o! |+ U* W忽略:5
- {: A$ `" ?/ o是:6( D7 I/ L3 a2 k
否71 \/ v- P) ~- f
初学者不需要死记硬背,能有所了解就行了1 U6 p0 i/ |* C y% V
# z) R! z2 @6 J& v+ |; N5 jACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
S5 {7 z; \$ E# R4 e0 \6 X9 WThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
5 u6 B+ v8 T7 ]2 EThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |