先简单介绍两条命令:
$ b5 ~9 @( i5 N$ H' ]/ I1 F( [0 t5 O$ e
1、这条语句可以建立图层:
4 N0 R# ?& p0 r }ThisDrawing.Layers.Add("新建图层")
5 R9 C/ n* {' k! h& A在括号中填写图层的名称。/ J3 N. e9 {1 Z) K6 w: [
2 h$ ~4 X. l* P7 O" k# ]
2、设置为当前的图层! P4 ]( T+ o. i E1 p
ThisDrawing.ActiveLayer=图层对象
+ K9 Y+ A! f* v' T- _: V8 g注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量4 S7 C: T; H4 n( u, \+ Z2 X
0 p0 k* Y; |1 M9 w+ c7 g- ]
以下一些属性在图层比较常用:1 d+ l$ k6 o5 p" \
LayerOn 打开关闭( e6 A- g3 M- ^* d. I0 b ^
Freeze 冻结! @7 b2 A9 X3 A+ [
Lock锁定
$ [6 ^ f) i2 }8 w+ U, `, `/ Y% tColor 颜色
. Z. Q% z" ]$ t$ |Linetype 线型0 r3 w6 i' b& w# l' M; G2 T
$ H9 R2 Q% r& ~2 K) Q
! R; e( c1 n- m5 A8 t$ G
看一个例题:
/ U' R, A- F' G5 }& J' z1、先在已有的图层中寻找一个名为“新建图层”的图层, L, A+ h8 G/ u
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。, N& M; S7 z1 q6 x' ^/ n1 Z# B
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
* c; r/ W- ^/ S+ u" A7 `3 Q5 T$ I4 n' z% j% r
Sub mylay()
; N6 J4 G; j; ]0 c" |
. h/ p+ u1 x3 X3 }, g* K& dDim lay0 As AcadLayer '定义作为图层的变量0 \! S/ P% r! `3 z5 B1 i
Dim lay1 As AcadLayer1 `- c$ {- g9 [. ?, @
! g6 i9 I& ^" N+ G9 S) i
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到- o& n/ o' x3 y3 A" m! d0 h
2 [9 Z, o) u7 {& i, W2 V0 R; u w5 e. uFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环* L. g3 w) Q5 F2 W9 ~% {
' J* e- w0 D5 U; J, T
If lay0.Name = "新建图层" Then '如果找到图层名( u9 p* i% [. u4 p9 e+ G; x! v
findlay = 1 '把变量改为1标志着图层已经找到* C* L6 e7 \3 t& O
msgstr = lay0.Name + "已经存在" + vbCrLf
3 K) {) D: {4 K' y msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf" s4 W) m+ n3 Q3 c
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
' c9 i( M% j4 l) O msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf6 c0 J! A" n- m( ~1 k6 v
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
) L7 T5 z; [) I2 z; @ msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf* \0 {) e, \5 V& \" U" ]3 F
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
8 K1 d7 V+ N* X2 }3 U5 Y7 N msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
3 k/ E7 q! [- m3 e msgstr = msgstr + "是否设置为当前图层?"/ O n! Q( |& z
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
, J2 j5 {) k( j' I. o- s If Not lay0.LayerOn Then lay0.LayerOn = True '打开. w; b1 h; r( F5 V8 p, f
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
7 D' s1 ~+ b E" @. @# [ End If& h9 c7 }3 H. R7 g, \( {6 Z$ m+ s
Exit For '结束寻找3 u' s' ^8 t9 d( m( b6 X: x3 m n
End If' x# y9 i3 o8 F6 L( E+ }
Next lay0( h, w3 v+ o& H- ^
$ W5 M( H8 @. t3 d
If findlay = 0 Then '没有找到图层
]+ F0 f1 t' R- y' Y Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
4 z D- y$ T5 Z4 t# M lay1.Color = 2 '图层设置为黄色6 z: K2 z" R; G* ~
) I4 K! |, m, J
ltfind = 0 '找到线型的标志,0没有找到,1找到' s+ U( T0 _2 ?" p7 P- Z
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
s& u; ^, A2 z! T# T' Z) @ If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
+ Y- ], A: U" N ltfind = 1 '标志为已找到线型
( O4 d1 `8 D- {! }2 ~ Exit For '退出循环
# i3 Q1 w, I8 F- `- G! z, }, J End If4 X5 P. E0 [8 J% j( Y/ {
Next entry '结束循环
2 w" K6 ?) C0 N1 D; z4 N( X# g& L d* n- h
If ltfind = 0 Then '没有找到线型
/ j& S2 [+ Y6 ~, J U& S' b, H3 w4 l( N ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
7 w; B$ @& `; |" H End If
5 H: [4 j, p) H lay1.Linetype = "HIDDEN" '设置线型0 L# f: X2 S& O$ O& G7 u& _6 x. W
8 \, w5 H0 U. {" v ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层! ]5 u; P1 R) O, ~. r: r
End If: g- K) c; A1 P7 f+ E! a, t2 q8 N
, x8 R7 u8 T, e0 M; ~$ a" {
End Sub& I, d2 |3 w( B9 k6 ?, l. j0 M( [
% B+ [; B5 C5 _& K' k/ o- [
在寻找图时时我们用到for each……next 语句* u& t- b+ p+ s9 P4 J% O/ J- r/ q
它的语法是这样的:$ F5 D3 K! s! K2 F; F3 W
For Each 变量 In 数组或集合对象
) k5 F7 X# s4 j3 a- _……
" x/ k4 @, n7 h7 n: @exit for - I( I) {+ A6 z, A5 G) u
……
9 h+ X* D! [8 s w- d% Lnext 变量
3 P) U9 I; i s# e它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层0 ?+ Q& q8 u: y7 [# r, u2 r% O( ~
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。" K" j; D' n p
1 Z/ M8 Y% a8 O7 R" f
If lay0.Name = "新建图层" Then
3 t# I% W# b: Y9 r7 N) a5 hlay0.name代表这处图层的图层名3 g: v c2 V7 o9 L2 {* }; `
2 u6 ^* x, c6 e' G# K# YIIf(lay0.LayerOn = True, "打开", "关闭")
1 r" b' r0 T% T/ _# l这是一个简单判断语句,语法如下:
: J8 Y4 C! h3 z$ k- d/ Tiif(判断表达式,返回值1,返回值2)
' N( Z5 x2 q4 j* j当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
/ S' ~: P7 q& Y6 v+ ~ [1 j! s- S: @1 h7 {6 Z6 ^; B" e
MsgBox(msgstr, 1)
" w9 c+ s4 e$ pMgbox显示一个对话框,第一个参数是对话框显示的内容
8 ^; D" C, c, h* _第二个参数可以控制对话框上的按钮。& X3 `$ d" W& V. W Q$ L ^
0 只有确认按钮, r5 p0 q0 l+ W! @ A+ C, H. Y8 Q
1 确认、取消
, @- u% Q8 K: u' m4 ]2 终止、重试、忽略
# U( p9 Y( j% [& I7 X* h) k& A8 u0 q3 是、否、取消
A8 P, a9 _* j! d( w; I4 是、否* o) L# [7 u! A0 Q+ d* \: b2 z7 J% M9 Q9 N
MsgBox获得值如下:
8 p# f2 E: N8 S7 Q确认:17 G4 d! Z' b, o* J2 t6 ^
取消:2! `9 w, v( C( f, u" x8 ^- z; u
终止:3
! I9 F5 j/ x8 t3 W( e, o% `# u重试:4$ w1 K1 M5 d; C8 ?
忽略:5, {2 {9 J$ D- ~, P; H! b
是:6! C- ?: h" J" b7 P
否7
0 K0 s, K+ {9 U8 a初学者不需要死记硬背,能有所了解就行了
8 f7 `- l/ W2 d
3 `- u5 O! N9 p2 E" M5 {" n+ \# l- aACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
, O+ a/ b; X- DThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
# @8 T% U) q) a( f; s5 xThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |