先简单介绍两条命令:
/ s; i, [) e8 q$ ` u3 `0 B4 m0 Y, C3 G2 _
1、这条语句可以建立图层:
: k$ |2 O$ r5 z7 D6 t$ sThisDrawing.Layers.Add("新建图层")' R" q3 `: v$ G2 n
在括号中填写图层的名称。
# v3 O0 C; \* B( a' f! B2 a8 i2 Y* v% N
2、设置为当前的图层0 ~7 [, }, |! j5 D! C9 J B t
ThisDrawing.ActiveLayer=图层对象7 O9 F' p4 i4 z5 O' ~
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
5 Y9 x; N8 D) ]1 x. N# s8 F$ c e4 m" i# g- m) M, g5 P6 T
以下一些属性在图层比较常用:
* a# o) `: I5 BLayerOn 打开关闭
! J' B- p2 q t: q) hFreeze 冻结! Z- b: H; P; p
Lock锁定/ ]5 u( u& c6 Q3 j5 D
Color 颜色
$ D A- R) I9 i1 d, KLinetype 线型7 A+ r/ F5 J/ z! P8 H% ?
, C- R5 s# z+ B0 k k
2 Y9 Y4 M7 l- D看一个例题:
9 k) k8 A3 h/ X. ?9 K: X1、先在已有的图层中寻找一个名为“新建图层”的图层
6 A/ W d/ j9 e/ H0 A5 E; P: t2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。" H- `( l) [6 l# T4 X! z8 ~3 J5 M2 j
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层/ m( J* B* A" l0 }0 m
. E. D# p) \+ [4 V& E m5 D
Sub mylay()
' E* P; X6 q& T& U5 K
. U- n" P5 Y( `- t- k1 m3 P* b# IDim lay0 As AcadLayer '定义作为图层的变量
3 C7 C9 i7 I2 k4 x' }# f& aDim lay1 As AcadLayer$ f# u6 {) [7 I, e
5 P7 C, p/ F8 U: n7 I
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到" z# P5 R3 @/ n4 {/ e9 u
3 w5 f& d2 o# E4 V& ]
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环4 Z4 s3 U8 z, u2 H% V2 Z1 }
7 B! ^2 Q2 m( {6 U. h7 F7 t) Q; N If lay0.Name = "新建图层" Then '如果找到图层名( @2 z- K) t$ d
findlay = 1 '把变量改为1标志着图层已经找到
6 M6 c2 z. L `' O) g. _ msgstr = lay0.Name + "已经存在" + vbCrLf- M3 x; i3 w4 [! r8 E4 C7 V
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf. H* U& W5 v7 ~! F
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
& v3 \: h! g7 _2 Q( X msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
+ I' h1 S! v: q4 D msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf9 O3 y: K2 P2 ?- \" ?
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
2 ?0 d/ I1 t* U) k msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf* `6 B8 u1 V* e
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf& a9 p0 r& [5 Z! \* f5 ?
msgstr = msgstr + "是否设置为当前图层?": G& a0 r) @% i7 z
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
# a# N7 q0 a* N! F If Not lay0.LayerOn Then lay0.LayerOn = True '打开8 D$ m3 Z1 m( C
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层+ ?" W8 V) v3 M& I8 I4 |* ?
End If
# g/ r- `8 U/ J' N Exit For '结束寻找7 L" G) p' y; C3 [+ D% v0 H7 `
End If" f- w' L+ V8 Y( F
Next lay0
& B+ W; A+ P0 M) @& [1 T0 o1 U' Q# g* F. m% |( V
If findlay = 0 Then '没有找到图层
/ p- ^6 M6 G8 \5 I; W. K5 Z$ C$ U Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
& b9 t( e( H; c2 o3 A* f# }% P lay1.Color = 2 '图层设置为黄色
|; o9 c, [* n' N3 W
7 p" _) s6 Q( o+ B* X7 z- D+ \ ltfind = 0 '找到线型的标志,0没有找到,1找到
* i1 C+ ?1 r+ h For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
* ~; O9 B, @. @9 T% w1 e1 t' v If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN" C% x* l; b! ~/ e
ltfind = 1 '标志为已找到线型* [ x, j9 \. h5 w) H! U2 @
Exit For '退出循环
W- Q# f- r7 v End If
, ]0 w; ~4 v" h8 h3 I, b Next entry '结束循环2 |- a. ~* x1 w$ @% J
4 ?/ r# q3 a, m9 A, V! o( u/ K% D& U8 J If ltfind = 0 Then '没有找到线型6 }6 Z! J6 ]9 b4 ^: r
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型' Y) j9 @: n% ]8 ~, l. ?9 Q# L
End If; ?+ j- v4 N# M# j
lay1.Linetype = "HIDDEN" '设置线型
9 L( X7 h9 Z* [# U. c o- z" ~# l4 J Q8 `
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层4 c- R! g4 W+ Q6 \* P8 r: a
End If
% |) ?( r# f! l2 f6 F) S: F( s$ B, K( F8 g1 Z: G7 I2 a
End Sub
- g2 m" {0 ?1 I7 o" m* j/ d& Z3 ?7 c
在寻找图时时我们用到for each……next 语句
# H6 ?& T; k/ l它的语法是这样的: X4 ? ~1 O* w/ T/ {) s7 T3 C- n
For Each 变量 In 数组或集合对象$ K4 c' n$ q' w8 }' w$ z4 p7 \
……
5 ]. s3 R2 p4 ?. j/ c% g4 Eexit for - F3 T7 w3 W2 V# F
……" l8 ^! S p, u) C/ C8 {
next 变量% J" ~/ n% f L. C( [
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
+ P1 a2 Q" g K& D8 Z在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。! r7 B4 }6 }5 A" E9 L; y
2 g1 C1 @4 B2 v# K7 c/ @( ?* [
If lay0.Name = "新建图层" Then
" e; I2 \5 W! ^3 L; Jlay0.name代表这处图层的图层名
5 k" q! C) [, h1 E0 w
$ F5 B& j. j! P$ \6 JIIf(lay0.LayerOn = True, "打开", "关闭") o/ P" [8 _# W' G' s
这是一个简单判断语句,语法如下:! E# X9 \# f) X0 {; {
iif(判断表达式,返回值1,返回值2)
1 [6 o* V4 N! J; R2 S7 v当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2( n7 r8 q* U& s6 E! m
* ?! I& n" s6 q5 c2 _1 oMsgBox(msgstr, 1) 9 Z( ^, f2 q& m2 C' s, O
Mgbox显示一个对话框,第一个参数是对话框显示的内容
8 i" p: y8 ^2 ]3 }第二个参数可以控制对话框上的按钮。
* m' k t) H$ y9 E, @, h# o0 只有确认按钮
M* @: S. T: P* g1 确认、取消: |6 H" ^0 p+ i) `* |: y6 O6 o; O& [
2 终止、重试、忽略. o, i0 |' w$ p R- n
3 是、否、取消* b; K2 }/ S: s4 p
4 是、否
# r8 a* L. x5 `# \$ }& T8 PMsgBox获得值如下:1 A4 m1 k2 w0 F7 l' R
确认:1( |" O/ e( M5 u. e# l
取消:2
& B0 I; J# u7 U1 z终止:3
+ ^ x7 Q7 E# Q" b4 N# L重试:4
- ^$ _( z* H( n m忽略:5/ X1 R/ z+ {* f6 S- k5 P& r9 N
是:6
% s" r. t5 H7 Y+ D# a# W4 P9 D否7: @5 `) I# t# x( y$ G/ Y
初学者不需要死记硬背,能有所了解就行了" e! s% y. D/ O0 F7 o
( r- [: `/ d" a' }ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:1 t& E% x! H0 s
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 3 ~4 W) a# I" v7 P2 P
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |