先简单介绍两条命令:/ a+ D9 L9 s' I5 }, M, l+ j
% o" p& P; ] U8 T6 m$ p
1、这条语句可以建立图层:0 h0 G' }/ i" x3 v
ThisDrawing.Layers.Add("新建图层")
( n1 J" O1 g! l在括号中填写图层的名称。
$ `: ~% n6 l* L
, d- h: I2 I8 [& o2 L9 U1 K2、设置为当前的图层
+ A6 B3 O3 Z! j# x) l$ UThisDrawing.ActiveLayer=图层对象
2 w3 T0 |1 T' m! D注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量- n5 ~' b' l6 s% S
$ I# |. W3 v3 n1 _( q1 q
以下一些属性在图层比较常用:: |# W; L& W. Z _& R6 A
LayerOn 打开关闭
% G" k) `5 V9 d7 s, @# \1 OFreeze 冻结6 s- ]) W8 H; j+ T! |9 F$ A* e
Lock锁定$ b( _+ }% w5 k. H
Color 颜色
4 ]4 O0 J7 U8 PLinetype 线型. C, l8 y( u5 U& m, Z9 i
/ e' }( s, @& v% E$ \; x! W
4 J/ @! v' c4 l; A/ x" N6 q看一个例题:
* O- @# M3 i3 ~$ L0 ]! v, q: Z, g1、先在已有的图层中寻找一个名为“新建图层”的图层
4 T* j) b" h4 g! h P5 a9 j2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
0 |2 q5 n' W; B3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
6 h8 f# a7 e- z8 R3 O R) R5 z3 l# q3 S3 \4 x- f# u+ H L+ U
Sub mylay()5 S Y/ o. R9 R$ C* E6 H( l
4 N& y2 L" V' R7 m& `Dim lay0 As AcadLayer '定义作为图层的变量
8 v& M3 n# r9 q4 F. X5 v1 cDim lay1 As AcadLayer* ^5 z" c2 r i
- p0 f/ c/ f; @6 \- Zfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到5 e2 \: N! f6 b
8 \2 y( r0 j% U# D
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环% s5 R$ w. v( `$ ]+ t b+ f1 D
0 l- c3 M4 a+ W" _9 \5 T: F/ L5 ? If lay0.Name = "新建图层" Then '如果找到图层名
5 U n) {( T, W6 R- i( @+ W findlay = 1 '把变量改为1标志着图层已经找到
3 \4 O+ o5 `) i" W- K/ l' j( { msgstr = lay0.Name + "已经存在" + vbCrLf
' l) E) e$ z1 S6 U msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
1 P, |+ q3 [' p) K+ Z9 J msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
! K! p) v! W0 C* f" W* e msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
) `0 b8 Y! k; Z! m* w0 [ msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf3 Y1 U8 Q0 M n( |/ t1 H
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
' H# G& b4 n7 m# R5 s8 [! f msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
1 H, h) t/ \; |5 X msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf% J3 G; O# u/ J5 a! [
msgstr = msgstr + "是否设置为当前图层?"
3 U5 ^- `5 A& I3 o7 q% f7 t5 m If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定9 H( ~" f2 B: @" n" e" \0 A" J
If Not lay0.LayerOn Then lay0.LayerOn = True '打开# b. ^4 ^3 E9 R7 l+ t8 T$ U
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
% @6 F0 k: e m% N( S. M. V% g End If
6 Z {2 r9 p# c% ] Exit For '结束寻找
# x+ |: ?6 G) E |0 z' C End If
2 j8 D/ V+ P) B( B7 H7 ?0 q4 KNext lay0% q" ^# }- h5 a) Y* f- n; q
$ n3 q8 q8 T; x' D1 P- R# KIf findlay = 0 Then '没有找到图层! f+ f" S3 j2 Q9 U
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
( E6 F8 f( Y5 G" x, H& x+ t- k( f6 q3 d lay1.Color = 2 '图层设置为黄色
5 j+ A u0 E2 z2 B
9 Z, n- K+ Z$ c6 B: C ltfind = 0 '找到线型的标志,0没有找到,1找到6 ]2 {+ }* N8 H$ U, w
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环4 a' }" M" K' k3 q# S/ ^
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"5 @' s U3 }. c8 }9 P) ^, u
ltfind = 1 '标志为已找到线型
7 P* d0 D _2 t3 o F* | Exit For '退出循环
5 W3 K6 v! }% d/ ]: J/ Y' ]" O End If
: m. R6 f. ^9 c- M Next entry '结束循环/ u6 p$ q, s. ?. S' T
* k& y7 t& U. t+ H* | If ltfind = 0 Then '没有找到线型" ^( t; W4 R0 Z W7 {1 D
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型: S$ m; v1 d- L- W$ o" Q5 ]
End If
, u9 q0 A# {, ]* E7 w( H; v lay1.Linetype = "HIDDEN" '设置线型: ^' V# m- b* n. M, e: q4 ~8 @
# g' |6 O; h. ]- T9 s
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层) }# n8 G( ]+ f9 U
End If- o- i1 C- l8 p9 _9 x3 S
" d& I4 _. O5 N1 B6 ?/ LEnd Sub8 P, Y0 ?7 `( g8 v
) x4 i% K% Z" G0 j/ M' s
在寻找图时时我们用到for each……next 语句! H: V% d0 _1 Y3 }- z9 [3 y
它的语法是这样的:( z7 f- b4 U1 z; D3 ?2 W( s
For Each 变量 In 数组或集合对象
* L( t% u+ O5 H……
: b6 G$ B5 c7 Q- f& m1 S. texit for
( X/ |# ]& R3 m……/ r- `6 g# V7 E9 Z
next 变量
7 G# A4 e i7 u' T它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层9 `' T5 M$ ?+ b# _ B- n$ J# c2 {
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
; [) v5 d5 M" Q
# q$ S P! x. f& b# kIf lay0.Name = "新建图层" Then
* F# D' l, }% W, t' L8 ~3 W% hlay0.name代表这处图层的图层名 E8 V$ _$ S @! \; |
& x# d6 V; n D0 _4 ?) D+ y8 f: ?* FIIf(lay0.LayerOn = True, "打开", "关闭"): T) i- V; g3 l/ Z! O+ @
这是一个简单判断语句,语法如下:
5 w6 D, K6 y- R- ziif(判断表达式,返回值1,返回值2)
) K& F' K/ x, C1 f当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
. \. ^' @4 C4 H* y
: n1 C: [2 k! qMsgBox(msgstr, 1)
( B' o7 N5 q0 q# fMgbox显示一个对话框,第一个参数是对话框显示的内容
+ R% _4 I7 d, e+ Y* V第二个参数可以控制对话框上的按钮。
( o4 m5 h3 ?3 g! R) m: C y1 f2 }0 只有确认按钮
% ? u/ A b+ u2 e1 确认、取消
1 T- Z/ J9 a. d! T+ V" C( }7 f: S2 终止、重试、忽略2 D/ ]2 p' j. `* o8 c& l! ?
3 是、否、取消" U/ m: O, [- E0 p% m1 s
4 是、否
5 E2 A$ |! z+ Q" p* FMsgBox获得值如下:( I0 Q }* n- d( {$ A" c
确认:1) R& x8 K7 v' Q0 U& |: M8 ~, e6 d6 o
取消:2
7 P( | _: ~; D终止:3
9 O) c+ @1 \9 ^3 H# W& x( k3 j8 M重试:4
9 f t$ _& A, X( y* \忽略:5
3 B5 U* {1 b& e, D% }0 Y! |是:6+ ~# \# ~$ a- h |& Y
否7
' k- T/ {7 M {初学者不需要死记硬背,能有所了解就行了
% h1 |$ a. B$ B" ^8 R$ @- K5 j; S. P% |: M
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:4 @2 l$ o- O- |* s# @# y
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
4 S, w8 k: d: j" ?6 W. k% zThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |