先简单介绍两条命令:
- S% s5 o" ^/ G1 g' U) t2 C
! @" b% z z$ w7 R8 r8 {1、这条语句可以建立图层:4 q" x3 L3 ?# I; z/ o# d
ThisDrawing.Layers.Add("新建图层")
3 Q/ ?, m' M2 i1 v在括号中填写图层的名称。
$ l4 }5 y: d6 f* K* K0 h6 I9 M0 D+ n: m$ N
2、设置为当前的图层
& Y% ^( f$ N" c: w* }, x$ tThisDrawing.ActiveLayer=图层对象
( J. n7 a2 h- O# |注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量' w( d! d: X; c) z* a; u: p& f2 u
A5 ], _7 J- v1 }( H2 r l) [
以下一些属性在图层比较常用:
# R" t5 S) K4 b# {2 ]# Z4 ~2 SLayerOn 打开关闭
6 k2 M* G; y1 D+ ZFreeze 冻结
. ^7 V9 w, l) ] g& aLock锁定
# J. C. G" o l1 c. L. ~$ N7 Q- D7 @Color 颜色7 M% U. C! ?( U% v
Linetype 线型9 }. B6 b6 c x- k7 n
7 E% E( v% x( ?$ F5 k0 y' V. ~1 C0 y1 W% ]' I. [$ x2 a
看一个例题:
! m x- {5 t1 h. z1、先在已有的图层中寻找一个名为“新建图层”的图层+ r* G+ s3 n& v" U# @& V
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。; L a. k$ `: ^0 d3 J p; {
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层& l7 O8 f# h# B, N- t" E6 K
' S3 l, v7 a( o% Y4 t9 ^% d& R5 X
Sub mylay()1 s" h1 a9 o9 a0 N
) X; Y i+ o) `0 L8 ]' C) n
Dim lay0 As AcadLayer '定义作为图层的变量$ A+ _0 f g3 _$ A( T) I: D$ `5 s B# @
Dim lay1 As AcadLayer5 t+ H: U- K) ?/ o/ ^
1 L% O) j, [" k" a) U( C: y% p
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
- m) a% e5 h8 Y! U7 c2 l/ B* w
: A$ o+ Y( T6 e& R3 _& vFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
3 B* D7 r# D- G% z" d/ ^, j, F
If lay0.Name = "新建图层" Then '如果找到图层名8 |1 E- e& ^2 i. `* a4 u- g
findlay = 1 '把变量改为1标志着图层已经找到. N6 [) K8 K2 M, z
msgstr = lay0.Name + "已经存在" + vbCrLf6 h2 [; U4 Y+ C, }9 e7 W
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
5 c# y8 H) k; G8 t9 S# | msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
4 \; s2 K6 o% }3 c7 m1 @ msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf, P8 X4 Q1 `1 w Y$ K6 I" Z
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf j3 ?8 L8 ?1 O9 v7 c
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf. Y! d/ J% z% O7 i' a
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
4 f8 Z% w/ a% v$ L O msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf4 [4 n# z- g3 J
msgstr = msgstr + "是否设置为当前图层?"5 c- j7 B: ~! D" n# }# \+ p2 I1 u! e6 N
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定7 \6 l8 I; N: ~* ?
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
6 b: }8 m+ e% Z I ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
: W) v- U. v& e9 |" x End If* q6 x) b3 J0 L2 [* [1 ~- B
Exit For '结束寻找. \) e R. w; J
End If
4 m( j$ A9 ~# f" yNext lay0- _& V; g4 i% l
# `8 _& X7 l8 J$ b3 H
If findlay = 0 Then '没有找到图层) p l5 u" { p- R
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
1 \3 j q0 o$ L lay1.Color = 2 '图层设置为黄色' g) i. c5 x8 J4 ~, U
5 @* @9 x5 h3 D1 a( l ltfind = 0 '找到线型的标志,0没有找到,1找到
. ^% I* E% d% S8 o1 v3 ? For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
B9 ^9 G) i* B3 C p h Z8 K If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"+ t0 T) V: c! \6 L4 h1 E
ltfind = 1 '标志为已找到线型
7 X- S7 D/ e# c. { Exit For '退出循环
) L# n! R/ v/ W" G End If& L3 r O5 d! M2 r: g/ J2 e1 E
Next entry '结束循环( a8 n/ g0 s! N
4 x! l. G4 p0 M6 @ If ltfind = 0 Then '没有找到线型
8 F$ l6 C) S7 R; u ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型4 \, p4 M! E4 h) g6 H# D% x& ^
End If% q3 e2 c$ s% O: k
lay1.Linetype = "HIDDEN" '设置线型
8 |9 K9 X: n4 b# R: u* q5 ~ X6 @7 A# \
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层6 l& ~4 ^& \3 P2 y; X
End If
) h$ @2 D- m7 i% l: z1 L
* _. H! C3 Y; UEnd Sub0 e/ \; Z% A7 D- J4 s6 j! [
' g' C! G: H3 L4 R9 o- X6 c/ Y在寻找图时时我们用到for each……next 语句% H1 ` v5 S2 i. S; T( W
它的语法是这样的:! C2 p+ J( V$ ?1 @ S
For Each 变量 In 数组或集合对象
( V; A. L( K: s* ~+ D+ I……
* P: y, |5 X6 U0 Rexit for
* ~/ N, g7 O7 ^# u# V3 _……, C, ? \9 {+ v& Y! R* A v
next 变量) ^. x- ^/ ]2 A
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
& \! c- l0 A* O4 l) v+ ]在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
4 B3 a3 l% Z8 g6 L+ ?. _( p6 K
! S" U* Q4 w* ?6 B$ G: EIf lay0.Name = "新建图层" Then* a. x/ I0 x! `6 O! v. K% O
lay0.name代表这处图层的图层名
3 [+ o" D* s- o, l0 f3 X i( N" u% s6 v
IIf(lay0.LayerOn = True, "打开", "关闭")
5 t) C5 O* `$ p; p) `% {' i, g这是一个简单判断语句,语法如下:7 a% k4 V2 p- V
iif(判断表达式,返回值1,返回值2)5 Q, `) f1 }$ B9 z6 T
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
" f' R0 d. C1 X2 a" V0 @+ W1 }2 G4 g- l' U3 w4 h+ @; g# U6 h
MsgBox(msgstr, 1)
% `3 E" a9 e% Z- L$ M6 n$ HMgbox显示一个对话框,第一个参数是对话框显示的内容3 L1 H+ j; x( J9 S
第二个参数可以控制对话框上的按钮。
& J, p; ]$ D1 U# R) _$ M! G6 f2 A0 只有确认按钮" D* @2 |- @( \5 i, K- G+ b7 [
1 确认、取消; P4 Y9 V: d0 @& c1 Q4 e2 v
2 终止、重试、忽略: S) c( l: b. P2 }2 n7 k6 S' O) A. L! w
3 是、否、取消
$ K5 O. D# {0 e& L! ~8 p+ T- W3 Q4 是、否
5 }, o! d5 \/ qMsgBox获得值如下:1 E2 S. ]0 j) O% M/ a- y
确认:1- t9 |8 R* e9 S( x* y& Z d6 l& r
取消:2
% J- {6 j, b g( k; R3 n0 W- s终止:3- m8 {+ x; m9 s F4 ^( C
重试:4! u, N, U7 b4 q& t2 y
忽略:5
3 s0 X7 t6 z: i# L! @) E( [7 C是:6
& ]5 P. ]; L, I& A l- D1 l, v否72 V6 e+ k" K% h+ Q% `: k# c
初学者不需要死记硬背,能有所了解就行了
7 D. |; l) j3 E4 X* O4 v; Q0 l$ ^. O' C+ D5 r0 s
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
5 b; j; j/ \# p; l" P( `2 MThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 6 E" ]- i) f. z" k5 u4 n
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |