先简单介绍两条命令:! T% O+ g3 R1 U. n6 v9 J
- m- c8 x6 `, ]' {0 W7 N! l7 Y
1、这条语句可以建立图层:
7 k% `$ B2 y" x& r/ f- w. {1 jThisDrawing.Layers.Add("新建图层")+ ]4 `$ N4 s# }8 c& E
在括号中填写图层的名称。
. K' ]! K: x/ V' X6 ^* j' X& L2 n( l7 q& p7 v9 w9 R
2、设置为当前的图层
) Z) z6 C* K/ a9 a( S$ i" D# }ThisDrawing.ActiveLayer=图层对象 w* X: e: a5 _2 F
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量2 p. ?: M L8 q2 |2 R1 ]
: Z, G3 M- y4 ~ d! b3 t
以下一些属性在图层比较常用:
) }* R n1 A7 A8 JLayerOn 打开关闭3 \0 y9 f3 w) q$ O- f3 D( {2 ?9 `
Freeze 冻结
& r1 h- |: R8 e, |9 p" b2 F" eLock锁定- o* K. Q7 g; E: F! `- }% [
Color 颜色: _1 Z) t: V' ?% ]) a! L% D
Linetype 线型
" b. K* E9 V" T2 y3 A" e, w1 p2 e- u. d& W$ `( G8 A7 L9 Z. w" W
9 T( ]# }, c! B3 K. h# w看一个例题:
* q7 I$ @9 k6 w+ S) P0 K9 L" d1、先在已有的图层中寻找一个名为“新建图层”的图层 }1 J4 ?# {7 e# n
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
. {8 v9 a( Y0 ]4 p3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层! N+ y' s7 s8 [3 P6 o8 K
% ?. Y2 P6 { J6 ~; _. ^Sub mylay()
9 I( B$ s8 {/ Z4 t! |" C
' N# R: `! E: l. J* n: WDim lay0 As AcadLayer '定义作为图层的变量
L4 W7 F: D# p) j4 |& s4 K: [Dim lay1 As AcadLayer* g# Y1 T0 @# X' Z. M5 s5 g! p; x2 P
! U6 E% j$ z. I, K$ c5 u, d' d; A
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
5 N+ ?( E% J- A- l0 K4 |9 @/ r& L. g0 `2 [+ X5 z
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环3 ?0 _% }* U4 K3 Q- o; j, g1 t
& n* Y4 t$ J" M& E8 r2 b# M6 T If lay0.Name = "新建图层" Then '如果找到图层名
3 h. W5 W, Q# |7 L c findlay = 1 '把变量改为1标志着图层已经找到
7 \. B+ Q+ B8 D- D msgstr = lay0.Name + "已经存在" + vbCrLf+ \2 ]4 A2 j' y# Y
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf! v) p6 f; ]/ e5 s* J7 \" }
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf9 v4 s' U* Q6 Q, o
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf* A; h: J2 U. u; _7 {4 Z/ G4 h
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf' p x1 |9 v7 j K
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf0 R) t- g6 q. @3 C
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf/ N- P- C% B/ O. _8 D) u) N
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf% y' Q9 d; p, l: ^5 A+ m9 X) n
msgstr = msgstr + "是否设置为当前图层?"
o, E$ E" P9 B5 ?5 ~ If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
- |: S0 z6 h0 C( \9 ` If Not lay0.LayerOn Then lay0.LayerOn = True '打开8 ], U4 `8 F" [2 }$ h: B/ u
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层5 ^2 p8 x6 a! B( ^- t* m7 T6 t4 z2 A8 @
End If2 G/ Z1 R' k! }4 v+ ]( ? f
Exit For '结束寻找3 L7 Y# |( C2 F- \
End If+ k, e1 Y# q3 L$ S* t
Next lay05 ~, n+ ]9 ]- A4 K2 P
# k$ m" a+ S: b: m) i* g4 zIf findlay = 0 Then '没有找到图层
& L4 s6 Z% R- X9 N* B J2 p. b Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
- M6 O, Z; W" _+ l8 ] lay1.Color = 2 '图层设置为黄色6 u- `; A6 I9 f0 Y( I1 H/ w) p
4 O% q5 C0 o3 A! f' k8 m+ m
ltfind = 0 '找到线型的标志,0没有找到,1找到
2 m- t7 q1 S- P/ g2 B- r2 B3 ~ For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环! ~# j1 o, S# i* p: J
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"9 P& Z2 U- @ g! b. |# ?. c
ltfind = 1 '标志为已找到线型. U1 Y" P9 m; |8 O
Exit For '退出循环
# r; v4 X3 D) x9 f5 S' | End If
1 ~( [! N+ I$ J9 p; p$ v( u Next entry '结束循环
6 Q) g5 R) A$ B! Y) G# @' c
j' i6 q+ X( E9 b/ k6 d If ltfind = 0 Then '没有找到线型& Z# ^6 d6 A; J8 a+ F$ y f, V4 [
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
& x# T& M2 P* L; h End If2 N$ q4 z1 N# }- O0 v
lay1.Linetype = "HIDDEN" '设置线型
& K2 R" l3 V- y! S: S l( a4 I+ m4 C$ j5 G
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
, e9 O. I/ x& C# O7 }+ F: w1 PEnd If+ ~/ q' H/ `& ^0 |* }' O$ e( w8 @
0 O& y; @5 T+ ^! k/ EEnd Sub- }7 m9 g; c( I/ ~0 l r
& }7 ^0 N% Z5 [
在寻找图时时我们用到for each……next 语句! p- I* p' c8 h
它的语法是这样的:, W; o3 m7 m- q/ F6 M, w
For Each 变量 In 数组或集合对象
0 q: U4 G' R1 Q/ f) c& T3 K; W; R- E……
7 o6 F( R$ I4 P( jexit for
6 D2 z! A( x: c: B……- q$ r s1 I X6 j, W1 L
next 变量
) N; u( o5 I2 G: L( O& o. _它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
b6 |- I1 S3 {9 ~7 V) N在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
; O7 g% U* E/ p- Q2 }2 b: F- N3 ^2 t9 M( L
If lay0.Name = "新建图层" Then9 I: ]. r4 ?9 R* `, E( A7 s
lay0.name代表这处图层的图层名! ] v: J0 i$ A+ _- T4 `
7 V9 k4 y! R* |; Z2 fIIf(lay0.LayerOn = True, "打开", "关闭")
( R0 l7 y! j- _! p6 s这是一个简单判断语句,语法如下:
, y3 Z5 f% j6 w1 c: ?8 o! ~iif(判断表达式,返回值1,返回值2)
6 Q( i p3 k, ?当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
6 o+ P- C* K: s' P9 f6 E
8 X% W- C$ B1 j% T/ l, P: vMsgBox(msgstr, 1)
# f& D* P9 i u* p2 Y$ D/ tMgbox显示一个对话框,第一个参数是对话框显示的内容
5 k3 M2 V5 R4 a" E5 G$ O& P第二个参数可以控制对话框上的按钮。( ^" e0 v8 \! U# E/ B8 A3 j" m
0 只有确认按钮4 f. U% _( p+ n3 v$ f s
1 确认、取消
, j# r+ k& d( _7 _2 终止、重试、忽略
" o) `0 I& n- K/ \2 Q3 是、否、取消/ P7 |+ D9 N( M
4 是、否, V' E3 E4 u& p& N
MsgBox获得值如下:
; a1 d5 K* Z7 j* o确认:1
4 n! a5 x4 l+ g9 m- e取消:21 e# N6 I; f& u
终止:3. ~0 v9 N. l) X; l8 T3 _2 E
重试:4
, a, B6 _" r& ^忽略:5 h2 q4 w/ p5 U) U* P2 t* b
是:6, D( j a2 u. D
否76 ]2 b# [8 W+ u* |3 _4 n
初学者不需要死记硬背,能有所了解就行了
% S' j( _: J6 W" ]) l: [/ H1 k4 {, z6 w, |) C! u4 ?
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:/ N" ?/ D' q4 l2 a$ T
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" * k- T; `. ~% g* c: X6 J
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |