先简单介绍两条命令:' S: |" k$ X1 d3 q& [/ r
2 y$ e4 p3 n7 C+ [5 e
1、这条语句可以建立图层:
- B# E3 m7 p- A3 BThisDrawing.Layers.Add("新建图层")2 ~) p. F2 T% i( s% x8 S/ R+ U
在括号中填写图层的名称。
3 Z) r& R- X/ k- `; q: [! Z8 s
" E6 ~4 q/ Y I* n: P3 x8 O; q2、设置为当前的图层
O# G2 e Y7 V! SThisDrawing.ActiveLayer=图层对象
' ~% y6 D$ ~" G. i注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量8 s& v6 H6 k1 j4 J' I
3 w0 a% p/ W3 x7 d8 {3 N, G以下一些属性在图层比较常用:
/ x8 H9 j2 Q* V! J }' mLayerOn 打开关闭' L% P" y3 n5 @6 t+ Z# A i
Freeze 冻结
: d C2 a7 u1 W+ {5 [Lock锁定
9 _' G& ?" A1 K R0 _6 Y* BColor 颜色
) \3 g- u0 ~( S* |6 d; ELinetype 线型2 ]- c x8 H; E! o& r" h
% h) B2 o6 E0 Q! h7 |3 U
, \% [" i& M( f3 ?看一个例题:( i6 P* | I" n( p9 m u" [; H
1、先在已有的图层中寻找一个名为“新建图层”的图层
1 K" K5 \6 @$ w% |" D& c2 }2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。, q& S7 Z6 A/ h/ U$ f% P1 V
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层1 m P- i% n8 O% Q; ^1 J
& b i- u" {' Z) E7 F2 z8 s
Sub mylay()
2 \! ?5 R4 |# y( S6 o- Y
i; p2 b+ a* c" y8 X, { wDim lay0 As AcadLayer '定义作为图层的变量) J9 H! p/ u+ E. Y# t, H
Dim lay1 As AcadLayer/ ?& i* Q: P- ?# V. T* p y
4 N6 y- p8 z% ?% gfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到" v4 B) G+ Q3 q/ p- t* f5 Q
. k) f' k% L; F" ~2 u# z/ w! x l5 T' ]
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环* T0 r, }4 A' d: d+ Q8 g& t- `
& i* g: f: {' c8 { B: v: { If lay0.Name = "新建图层" Then '如果找到图层名! E) I( i' k3 K2 b0 }* n6 V* [' W
findlay = 1 '把变量改为1标志着图层已经找到
7 c ?' r: o: p. p" O msgstr = lay0.Name + "已经存在" + vbCrLf
/ s. ^; G9 W) Q. ] msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf- `! X8 v3 V4 o- X# v3 |! X
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
% p. n' e6 v" @# O6 ]6 c msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
2 Z) P S, I- Y. i2 a msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf" `( u: B5 v- Z& ?2 \+ S6 X ]
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
( B7 o) n0 X# f s msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
0 h! X* J! }4 Z+ k: H, \2 D7 F msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf1 r1 Z4 h) H( }- n- j
msgstr = msgstr + "是否设置为当前图层?"
, i& r4 e2 `8 M* d/ E If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
7 H5 L2 N& l1 }9 H If Not lay0.LayerOn Then lay0.LayerOn = True '打开
! q0 i4 T0 k s0 v- S ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层 f1 g; s( D+ s' g
End If; X6 T% `0 j4 o7 U& v. f1 l
Exit For '结束寻找( \& e* ?6 {( j' P
End If1 o5 y: B' A- G2 X( ?/ v
Next lay0, M2 I/ F! k- Z
) A" o( U* u! N3 I9 ]) d; H' ?2 l! [
If findlay = 0 Then '没有找到图层
* N# c' ]3 ^- d7 }4 F2 N y Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
# k3 p. t: k' q. M; V lay1.Color = 2 '图层设置为黄色/ Y" L9 k2 t2 m2 j: I- l3 I. c
( c$ | Z, Y, _: G* y1 M ltfind = 0 '找到线型的标志,0没有找到,1找到 \- X8 Y" V% v5 W2 w7 J, ?
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环: W3 G' A F" j# m$ s# e
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
/ F0 M0 Y( l: F0 Y% V ltfind = 1 '标志为已找到线型2 b) u: e0 _ m% l# o
Exit For '退出循环
& e/ h4 E% s3 |" P- Z: S; B End If7 v) J7 t) x/ j* q" r. w
Next entry '结束循环! r i3 o2 Y* D
3 { U3 U- `. Y5 g2 T* Q8 g If ltfind = 0 Then '没有找到线型
0 q/ i J! K/ q, }- I$ a7 L ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
& j/ i' P6 R2 @ End If6 K+ R$ r$ {1 m$ c& B7 A* R1 U2 J
lay1.Linetype = "HIDDEN" '设置线型1 T# t" ~, @# D: |
: i/ ?' q2 B' C' W3 h5 r
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
& {6 p1 ]% D2 y& a8 N& vEnd If* D- n/ v) }6 n
! N. T& R3 O) @4 W
End Sub& {" U; u+ l2 P" y( g/ w
& ]; L* U! F/ _* z. a在寻找图时时我们用到for each……next 语句
8 i3 ~ }. I' N" \ i它的语法是这样的:" l5 J5 ^% C8 a7 t$ Y
For Each 变量 In 数组或集合对象
- ], f5 s9 n0 u2 a& u. J8 @……2 h/ e, ?. ^2 u9 X* }2 \) [
exit for : I) _# X' b# [( q
……" ?. a& v) x( n/ O F
next 变量
, G% S/ g% X* L6 C( ]2 u/ U" W它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
; r5 o+ x# k% M- T' K8 H. [: _$ _在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
5 S% E( E r R1 `+ |, V( ?( e8 y/ H9 O! J% F0 a8 m; `9 t1 V! S
If lay0.Name = "新建图层" Then
$ i8 s+ t1 N$ G0 {% clay0.name代表这处图层的图层名
. q! `& \: P) C1 E1 w' \9 z
0 f" H" z) T0 _/ [3 E0 SIIf(lay0.LayerOn = True, "打开", "关闭")
0 q& \5 M1 x" O" ` j' d/ _这是一个简单判断语句,语法如下:( \/ r2 p7 U$ g
iif(判断表达式,返回值1,返回值2)
1 b t9 @: A, J. D8 M5 X3 Z) Z* a当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2. ~- @ x8 v" }$ O. ^7 ]1 `
# w* F) w+ H8 w' c" h- fMsgBox(msgstr, 1) 2 V* L' |9 }. [: h6 D$ E
Mgbox显示一个对话框,第一个参数是对话框显示的内容
! d6 O& i' {2 V" Z第二个参数可以控制对话框上的按钮。& i5 V% u( T/ }2 e" n# [% m
0 只有确认按钮& d: x7 J! T% N4 f
1 确认、取消; b. l, ~. }6 x
2 终止、重试、忽略
: O: j" n1 ?* r0 Z* Q3 是、否、取消
% o1 n) J. j$ m9 m6 q" v2 K% [5 J" Z' A4 是、否3 j5 ?8 z+ p& @, e: {" _
MsgBox获得值如下:
?* b0 m! a- g6 _确认:1
1 f' j9 i; ]% D6 z取消:2
+ B- c2 s- C+ f1 @5 w终止:3
7 z' y1 @8 J0 T# X重试:4
& i7 j8 T* h6 r' ~' C- d; Z. V, s忽略:5) E' u( z* |' ^) A
是:6
3 Y4 s, e% v% w ]3 q; p/ t, G否74 |8 F( h& @2 P' Z
初学者不需要死记硬背,能有所了解就行了
# L+ R+ Q% y+ F" g+ t& t
Z+ z# {! z2 m' IACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
, S6 t5 V8 P2 Q7 oThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
8 L4 V. V$ v4 I- \) ]ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |