先简单介绍两条命令:
: t$ F; S3 \/ h8 ~& {! x7 z# L# `& w6 C2 A3 k# J$ ~+ M
1、这条语句可以建立图层:
' ?1 X/ @6 r1 D2 E& n& YThisDrawing.Layers.Add("新建图层")
% N: o3 c+ M7 Z5 }' g3 c, P在括号中填写图层的名称。
! A h9 W$ N4 f) _! Q' k
1 X7 k0 |; j1 Z9 k2、设置为当前的图层
9 A/ e" e: x( IThisDrawing.ActiveLayer=图层对象( O1 b; F. ~6 F* [) `" [ X& M$ {8 U
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量6 Y% d3 _: }6 G0 w. {6 Z
! P5 ~( O5 f8 j* G以下一些属性在图层比较常用:
: F# R4 E6 d! o. P- Y0 T* O2 RLayerOn 打开关闭
* i. y) Z& d4 Q) y0 pFreeze 冻结" ?/ y. X! n+ M. n1 g2 v
Lock锁定
. ^& s: I/ {3 v0 C/ u! VColor 颜色1 g) x. `+ q% ]- `# E
Linetype 线型
' k2 o+ e" U3 m6 q' ?- X- U6 J$ d
* d4 S% H& M8 j. M. q. Y3 V0 Z% z. T* C5 L+ M
看一个例题:
+ p2 c& q# Y% b$ `6 K1、先在已有的图层中寻找一个名为“新建图层”的图层
/ g# T% i$ o- a2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
- Z2 h( Q$ L6 m3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
1 h" ~1 B) v8 C v9 D1 h! C( K: S0 C/ i; P
Sub mylay()
4 W( F6 V) \9 t0 h( L9 J2 M
- Z" ?. s' V4 `- uDim lay0 As AcadLayer '定义作为图层的变量
& Y \% @" {* H5 MDim lay1 As AcadLayer+ m2 Y {' v% s. _, e6 `
, g4 A' T% @& P2 i( L. V0 v3 u4 X7 y
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到1 y$ X) N! i6 F* B
* x4 t# j, S8 AFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环7 I3 s [* f! C
( s6 L; h1 r/ [( o; G If lay0.Name = "新建图层" Then '如果找到图层名7 t- o5 P( z6 x( t- T% L
findlay = 1 '把变量改为1标志着图层已经找到
5 T0 T7 f/ ?; p# N5 H8 h; W3 ?0 @$ e msgstr = lay0.Name + "已经存在" + vbCrLf
; }% K2 c: f* Q1 T8 L( p msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
) Z+ W: h7 {9 \7 b msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
; w. g+ ?( O- C9 \7 s5 U msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
: Y4 E# Q, w$ O# \, S- @ k7 }, v3 } msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf0 R# Q" l! m# t1 w' u4 G$ ?% B0 E
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf# c; M' r& f( [) d6 I( ~& t& _' ]
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
) T# N+ d2 x- J% _8 C) U" H) i msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf' n- P1 U9 \$ }
msgstr = msgstr + "是否设置为当前图层?"& j! o6 q& A; o+ @+ n
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
7 q0 m& _1 Q: O; w If Not lay0.LayerOn Then lay0.LayerOn = True '打开* _; b0 }' |4 Z) S) C/ b
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
6 f9 d1 _1 v) A* Y0 [( _; c End If
# J! D- I, Q& {& M Exit For '结束寻找9 T0 C1 K* l) y" W5 g
End If
3 t: m' K. x3 Q3 B( zNext lay0# t- d$ o. ^9 p& ?9 }
/ q0 V! ]( k d0 a! ^( [
If findlay = 0 Then '没有找到图层
! t$ s* b6 X' ], H" T Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层, Y0 U$ d) w( h s
lay1.Color = 2 '图层设置为黄色
4 k- u0 N$ Z7 Y! {0 y 7 r6 q( B" @! D, a }( }
ltfind = 0 '找到线型的标志,0没有找到,1找到
5 @- Q% k- l( m For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
& i$ N/ G$ ` w5 s# a9 z7 e If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
1 c5 r4 T9 C, O ltfind = 1 '标志为已找到线型
4 L# Q& z1 q G" ?. J# k0 ]- g% O Exit For '退出循环
Y# ^5 Q; N, [+ T6 O* X& b; Y End If
4 H2 q& ^; N& i7 q; \+ E Next entry '结束循环
1 f8 X3 F( k* L& O7 P4 c) r; X c3 L+ ~& w2 Q8 z; L
If ltfind = 0 Then '没有找到线型
- C8 G; ~$ v4 b/ z7 x, J/ r, x3 j ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
# B0 v# p0 L# R1 P- E End If# h: \% }% l, q+ W2 `
lay1.Linetype = "HIDDEN" '设置线型
: v- y6 K1 _3 Y0 Y( a3 A' @ F( Q1 u: J1 [$ M
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层) |/ F1 Y& C0 i$ _7 r9 x9 X
End If) D# P- K0 l$ b
- j) H- J, T2 s7 `/ E5 k3 k$ c
End Sub: A, F8 F- |" x# K$ D
2 v& J& ~$ Q$ v* h
在寻找图时时我们用到for each……next 语句* i3 d9 \* g: g+ H& Q1 Q, `
它的语法是这样的:& F7 q- n' h; x( a/ r& `1 J
For Each 变量 In 数组或集合对象
1 w; S- p; g4 D( P7 T# a9 o……
" e u3 K8 R" A# r0 F# F( K: kexit for - t: o: \: W1 t \" ^" R6 v) m
……- }3 F( l( m! G9 q# j7 l
next 变量9 |+ t/ D; m( Y' k& \: X6 b
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层! g0 a# Z5 H2 N% w
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
! j5 G( o3 k/ k5 ~4 R! R6 X
1 L2 X6 K5 r6 B% o* rIf lay0.Name = "新建图层" Then
a; `7 w. e( t3 o9 M+ a& M$ tlay0.name代表这处图层的图层名
" }1 R/ E5 z4 I) F& P% `
f' U D& E9 C1 t% r' `) V- UIIf(lay0.LayerOn = True, "打开", "关闭")7 G2 I+ M1 _ M& g9 `( Y
这是一个简单判断语句,语法如下:
- f5 z0 L, w3 B. J6 ?) c8 kiif(判断表达式,返回值1,返回值2)
# n9 e6 M- s5 ^7 ?4 f# b当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
! c) A1 Y* {% r- Y* k x* R/ s+ @5 `* a4 E
MsgBox(msgstr, 1) & t8 U6 k8 F4 y3 s
Mgbox显示一个对话框,第一个参数是对话框显示的内容
) J4 Y7 Z7 T* X第二个参数可以控制对话框上的按钮。9 x9 J7 v: L- i+ g, ^% S
0 只有确认按钮
8 U% | l; N! ]7 I* q h! x8 w1 确认、取消# J# M o, Q2 C6 }9 j7 Q+ e
2 终止、重试、忽略
u! n" N* D" `7 _3 是、否、取消0 n: l! |% o/ e9 m3 ~) ?
4 是、否
( M7 ~, _( l$ @& o$ A+ xMsgBox获得值如下:# s! e" }( A8 c* Z* @# \* y
确认:1
# e0 K: [1 D" L! Y0 B取消:2+ ?' F) [$ E9 B0 n: j
终止:3
5 {$ R' p& K: A+ |5 {& m+ b重试:4
3 g+ f% p5 \3 w7 Q, u9 v! s忽略:5' p( h3 \+ B; I8 _8 j6 q: _
是:6
! [1 r5 Q# ?. l" B% C, Q( U否7
+ {$ U# U5 V- x1 L6 K: l$ s初学者不需要死记硬背,能有所了解就行了
! `0 ]! z# J: v) O9 W+ N' @4 V" f& E8 z- B, A" z* W
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
* M6 I5 c8 r7 P2 j0 {ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
" M( j e6 {: p5 r, i' q/ xThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |