先简单介绍两条命令:( N9 ^1 q( ~# L" M! @
* U, u+ `/ ~( ~8 Y
1、这条语句可以建立图层:, P# n: A4 S8 o8 k& |
ThisDrawing.Layers.Add("新建图层")( T, G& Y9 x: e9 |- [
在括号中填写图层的名称。% \2 \# u/ v$ t8 U$ j+ q
' J/ g" W+ D, S$ \- O3 c2、设置为当前的图层! d" n9 d' x. G! N/ _- [% s) W
ThisDrawing.ActiveLayer=图层对象
+ N1 Z. N7 ~9 z( A注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量; J W1 j+ F9 S! d
2 h, `# @% I. v) ^0 S+ D以下一些属性在图层比较常用:" L! T: k. _6 k3 N* B: w5 u5 r8 P. P
LayerOn 打开关闭
* l5 F$ A2 M3 j1 ? b/ q) p/ i8 ^Freeze 冻结% F. h+ Z% N- }
Lock锁定. @# B/ h, u0 Z/ f' P& l. e
Color 颜色& q5 I) d9 J9 [. @8 z
Linetype 线型
$ F; Q0 N2 V3 d8 p# y- t+ G3 e
3 E; [$ j5 e6 V1 f8 \看一个例题:/ T2 w8 a) K, `5 @
1、先在已有的图层中寻找一个名为“新建图层”的图层
' ?$ o2 y" g, L+ m6 `2 g k( ]2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。3 g& q' N0 W" a: K
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
2 a: o5 Y( P' Q# f! w
# [4 {2 @# J- u" L; E: N* _0 ESub mylay(): A P6 p2 j! s
8 u7 I. ?3 \/ f; p9 q% X/ ]
Dim lay0 As AcadLayer '定义作为图层的变量2 x' e/ Y, X9 m9 o# M0 J
Dim lay1 As AcadLayer4 D5 [- m/ _( ?( f1 \" _
& U$ V4 a) a6 p& ]findlay = 0 '寻找图层的结果的变量,0没有找到,1找到, [" E# q, N- p4 a
/ O5 c2 _/ M" h d
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
) o: h8 ?6 K% f9 W% e8 S/ B, r3 t! E6 T% x3 v- J, T
If lay0.Name = "新建图层" Then '如果找到图层名
/ B$ o* |% M9 X" I! z7 T" L findlay = 1 '把变量改为1标志着图层已经找到$ i# F& w* a9 f6 v( i9 l( R& k. w
msgstr = lay0.Name + "已经存在" + vbCrLf g5 C3 x" p- L# v& Q
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
* V, ~9 K. y( k+ Z! _% r msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf' C5 [! K8 Z: p# K5 R
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
. \& |* s9 S; o) K& S3 a: I msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf5 a, z6 M$ A* V: B
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf9 n/ \6 b6 Z2 P& ?
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf3 K& J" y+ O& u. u5 r. m2 o
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
7 v! r6 l- \ P! ^2 s) a% k) ] msgstr = msgstr + "是否设置为当前图层?"7 P+ n5 S6 C4 a/ o
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定& y6 j0 c; l1 B& l5 B+ q
If Not lay0.LayerOn Then lay0.LayerOn = True '打开7 _5 S; X# ^5 \) S6 P3 i+ }$ t* L
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
# g4 y* E7 d8 v+ @ End If% I3 v% m! a0 R" v4 o, O2 S; a t
Exit For '结束寻找* ^$ P, T/ K5 m' B& R0 K
End If
0 Y( M2 H/ i2 I. `' _; @' P/ O, L6 eNext lay0" @: U' M$ ~: t# W- u
; c/ n6 e2 ^( j9 z" k# d
If findlay = 0 Then '没有找到图层# o0 s9 r* n/ a5 h5 b: t
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层6 ^3 v5 w$ C1 t2 Q9 @3 h
lay1.Color = 2 '图层设置为黄色
0 C: ]3 {7 Q/ F* R- d/ }
$ e3 e; G0 @+ y- d! h$ @9 p- `, e r ltfind = 0 '找到线型的标志,0没有找到,1找到
5 l- q7 R: x& o For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
& n6 c; d" l8 ?: z If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"6 d# t' D/ s V1 p6 ]
ltfind = 1 '标志为已找到线型
8 e. z9 L9 q" z6 O. { Exit For '退出循环# h( V4 o, Y( s( ^, W4 H; a
End If4 d+ X+ s% A$ i. a5 Q* L
Next entry '结束循环
0 ?& g% D, ^ R5 f! A G
, t* p9 ?4 q/ U3 r If ltfind = 0 Then '没有找到线型
( Y% M7 s& O# a ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型6 y$ A* T: @* R+ V7 E n# b
End If% \ u7 G6 U& ?+ |) p. E# R
lay1.Linetype = "HIDDEN" '设置线型
3 g/ ?0 Z; Q T/ v1 V/ w s/ G/ M- _7 w! j
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
- r; x$ u# v8 \- y3 _End If F& j& J6 ~1 J4 I2 C& w& y' W1 F
2 b8 C. Z) ]( e. n# f3 f, a B- AEnd Sub
# q5 ~; T* V y" d3 V) Z- M8 [( ]4 R
4 N# h) L- L R0 D2 d$ e. J, F在寻找图时时我们用到for each……next 语句8 e& e. G7 b7 s- Q% L0 q: `% A' A
它的语法是这样的:
& Q1 a' S! [% ^% P+ xFor Each 变量 In 数组或集合对象' Z2 w1 m- r- Y& T
……
% S% W1 R l% t }/ D% h Dexit for : C5 m. J5 t. V; j3 o, d
……& j2 b8 E. Z! s, ^/ A' V0 Z- y
next 变量
: |4 O$ D7 r, h+ p7 {它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
6 r8 w1 V% ^/ M/ Y# M$ i在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。( R% ~2 t- P' Z- [6 W
5 y4 B5 l5 e4 T6 oIf lay0.Name = "新建图层" Then
7 @' q. k( l5 N4 A a0 {$ M7 hlay0.name代表这处图层的图层名
, m" J: A6 @) t: ?+ t6 Y% k X6 F# l+ ]6 R9 H3 n, N( q$ o+ P$ s- O# [
IIf(lay0.LayerOn = True, "打开", "关闭")4 O: ~+ ?, c6 }# O
这是一个简单判断语句,语法如下:$ b. b2 ?( M0 U* L9 ^, y4 A
iif(判断表达式,返回值1,返回值2)
5 G2 P% n& |# V& \当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=24 a3 D+ {9 E! a9 |
* o) U" `- J' p/ |: K8 g
MsgBox(msgstr, 1)
8 C Z* E: I& `7 n$ NMgbox显示一个对话框,第一个参数是对话框显示的内容' s% q) l6 ~6 L3 J6 N
第二个参数可以控制对话框上的按钮。# e, X- y; }8 r3 l3 }
0 只有确认按钮& L2 p/ ]- N" R+ z5 m: y% i
1 确认、取消5 I" R' k6 B3 N" }- @
2 终止、重试、忽略5 ~/ h2 W" e# a( [+ T* ~" G1 I, x
3 是、否、取消7 @2 |: ]5 w Z: v! u7 ^
4 是、否& `( @# _! ~5 D3 b' J/ y
MsgBox获得值如下:) @% f9 s; g( f# o$ \5 t
确认:18 z: `1 `8 h( T, |1 a
取消:27 b5 Y+ k& P, D$ X
终止:3
, @0 F! o+ Z! A8 o8 z重试:4
& d6 l- l; N2 Z% Q/ h. E忽略:5* ?: e* u- _$ B! B$ v$ Z C
是:6) N: f( Q7 E# _) j# U$ F( j" s2 _
否7( V' i4 ~9 E0 H- H6 h0 W& Y
初学者不需要死记硬背,能有所了解就行了
Y s0 t% V! `: f+ N8 N. Z% ~+ [- v- [. c0 T" S4 ?! o" b
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:" i; H: B4 b* e1 u3 ?$ w( V
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" ) Y: w5 o; [* D5 y
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |