先简单介绍两条命令:+ b, q# K" G4 x" S) L1 ], s
# ~( T! k1 Z- o9 [: a/ O9 E1、这条语句可以建立图层:8 S& D% C1 q; P ?( F9 n& o" U, p
ThisDrawing.Layers.Add("新建图层")
S8 M/ [) o; L+ G+ ~0 }" S在括号中填写图层的名称。7 c6 c" S$ j8 J& _& t# s
3 n$ y* [2 b. d1 J: y2、设置为当前的图层" C' U- Z; L( C( I) U; M$ w; D- C. f
ThisDrawing.ActiveLayer=图层对象
' s: {2 J4 X' [* ~注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量" E9 F* u. |! t0 n7 w; A
! C* P, K3 ^: c( J
以下一些属性在图层比较常用:7 m( R; G) s" Z
LayerOn 打开关闭7 @) F2 c0 M g7 a/ m4 V
Freeze 冻结
" N7 Q; }* Y% BLock锁定4 c! [, K3 K$ a, v
Color 颜色) I- t' j: y. B+ q
Linetype 线型' Z2 f: F. m! b. H, {; p
/ I, l) B3 i O) I& r. c R9 q. Q8 _1 w- ^
看一个例题:
1 _1 G4 _( x- ~+ ^8 b% v4 y+ g1、先在已有的图层中寻找一个名为“新建图层”的图层
3 V) }4 @; L: T% _2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
' k( L- b: c) r* X# e3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
4 Q- f. ?1 C9 \+ Z* z0 }0 A( M- l- d$ p2 |# m1 }8 A) t6 ~& S, z
Sub mylay()$ F1 {: ~! @# c7 \' A
/ S; Z4 V( z4 G
Dim lay0 As AcadLayer '定义作为图层的变量
- r% x2 ?7 Y0 G5 }1 R: RDim lay1 As AcadLayer6 |2 V& X4 Q5 ~, L
! @' ] s" D# @7 n& c; ~7 @' [
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到* {& g. g) s5 j7 T" v, Y e% K
. ]1 k1 T/ v: S) QFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环$ w; ?; |8 H/ n" S1 G, j
- D g) C9 f9 c2 V, p( Z
If lay0.Name = "新建图层" Then '如果找到图层名
9 T# x) V0 r7 h7 D) g$ V( x" }% W findlay = 1 '把变量改为1标志着图层已经找到' q8 A8 W) e U
msgstr = lay0.Name + "已经存在" + vbCrLf
5 u! \/ L: f# z5 Y- v% O msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf8 v# o0 T/ ^- }3 O3 K1 g3 `
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf) r+ j8 |" a7 Y6 Z
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
* K6 O0 ^" p# G6 W- I msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf: {" d; N" E5 L1 [: p
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf, e& g: S3 C Q9 |4 ^/ K9 t
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
9 M$ F9 F, T. g E4 r( A msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
% e3 c7 ?9 J* F1 W3 P# G* N msgstr = msgstr + "是否设置为当前图层?"
6 W7 @5 y1 v$ N1 a. e. P: }5 J If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
5 i1 k# I9 g3 D5 E If Not lay0.LayerOn Then lay0.LayerOn = True '打开
8 g) t, J! U9 p ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
% u! `: P% j# [5 { End If
5 ]2 H3 L# h9 u- o7 n+ j Exit For '结束寻找
1 R! y9 U/ l1 Z" B9 J! n0 | End If
; V7 ?8 Y4 B" @* {( R4 W2 _5 ENext lay0
3 z( g3 ]9 {8 ~6 E* X7 _
z0 [- H$ ^+ m3 F$ A3 e" CIf findlay = 0 Then '没有找到图层 E8 b5 Q$ B2 g( s
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层. x X) E6 H0 ? u4 W
lay1.Color = 2 '图层设置为黄色
z5 m+ Q% E: \ Y
# `3 I/ ~ U9 _0 ` c6 C ltfind = 0 '找到线型的标志,0没有找到,1找到% l5 t; M' f1 D8 K) B
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环. }7 t. X6 H- ], [
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"6 C, N3 a6 _# J5 B4 s
ltfind = 1 '标志为已找到线型
, X- S$ n; N) o; y. \) L( a( ` Exit For '退出循环
/ I. o A) [. u- _ End If
3 D+ w& y l6 ~( ~8 S( d" d& \2 j Next entry '结束循环+ k" o. x8 [7 T; Q5 V' T2 \
" |7 c* q3 p' P' ~& U4 T
If ltfind = 0 Then '没有找到线型) p! X' b( G+ r' i, J9 A* z: _
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
% a* ^ f/ `/ m [ End If
& k' D- m6 q0 [/ [3 A lay1.Linetype = "HIDDEN" '设置线型( Q' p" F0 C5 g) J) N2 w" @ }1 z
1 ~6 I; F/ F4 {% d
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
N# {: X9 S: B2 X! v$ u& X- P/ bEnd If* e: K4 }) @1 ]5 o7 z
: \/ N, r( X8 B, C$ c$ r, j4 _8 mEnd Sub
6 V1 w% e1 ?+ a: N1 ^" M* d5 w3 y. }: y: c* l4 \4 M
在寻找图时时我们用到for each……next 语句( C: l: e; G" c7 B; U; R
它的语法是这样的:9 y p5 X M3 G$ P8 U
For Each 变量 In 数组或集合对象
7 B: |) Z) k7 K# Y……
0 q9 a9 g" `5 K0 |0 Dexit for & b+ C, [- ^4 D3 u: H! F! ~
……
( r1 v4 t7 Z, w6 g6 unext 变量
$ N9 `8 x. \8 O+ U+ L( v! n4 C它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层) d5 {3 ~; A9 u/ [8 R9 a
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
- B, D4 u; x L$ d$ B' Y) I. M" r
8 r" d! r; Y% uIf lay0.Name = "新建图层" Then
/ C( I. c( D* W. s2 A/ dlay0.name代表这处图层的图层名$ w1 e4 `+ g* H! B( `
9 V. m; v9 \: ~
IIf(lay0.LayerOn = True, "打开", "关闭")
+ r( ^/ M2 Y0 _1 _$ L6 j2 }- Q这是一个简单判断语句,语法如下:
9 I- |+ L! o2 q" W4 L9 i' @% Viif(判断表达式,返回值1,返回值2)- o/ J$ f9 ^- `, D+ a
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=24 j' V0 M! i9 ?! [7 E* f0 y9 Z
. ?1 r+ s" T5 X, t1 ~; yMsgBox(msgstr, 1) 1 N; A" Z2 ?. k# c$ ~7 N
Mgbox显示一个对话框,第一个参数是对话框显示的内容
6 k* i9 S0 [) a$ ^( Q) @# ?第二个参数可以控制对话框上的按钮。! p5 J- D9 u! S
0 只有确认按钮& J1 f& E0 x! i* I6 k0 @) M$ K
1 确认、取消$ B) o8 `& H% _. n6 Q: m9 ?2 A* `8 ?' ^
2 终止、重试、忽略# R7 ^ `- z. s! f: Q7 C; z8 `
3 是、否、取消, A( w) \ s2 X# {# F4 Y0 ^
4 是、否0 f0 u2 ]; ?0 Y4 b3 ~! E
MsgBox获得值如下:+ g) ]7 ?6 [& Y J4 v7 d: w1 ~
确认:1* B. b+ R$ I3 n, d H/ z
取消:2
6 }& N; ?, |6 {1 Q& W终止:3
! N/ c. ?' k9 O4 l/ e- H2 R重试:4: {+ p. ?$ g" O" \8 E6 P7 t0 l$ y
忽略:5
x C* ~: m( V+ N, t( @是:6) s7 k7 b' y. Y4 a* D* a
否7
+ R X5 J0 M8 P- _, ~0 c5 {4 Y初学者不需要死记硬背,能有所了解就行了
9 t) d5 U; u: q! n: A4 C, R! b' T, h3 N2 }# Q+ w3 a
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:1 J) Y! X' Z- \2 b/ u
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
7 ^. C! v! z" a, }" jThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |