先简单介绍两条命令:
7 m4 A: X& j+ E$ ^5 }2 h% |9 H# R# P! {: d4 E) G
1、这条语句可以建立图层:8 f) O: Z8 Q8 O# j! F, Y2 w7 c/ C3 q
ThisDrawing.Layers.Add("新建图层")
' K# \/ o- n/ l% Q2 L' W& }1 a6 }2 W8 l在括号中填写图层的名称。4 g7 Q) V3 T" S! D8 O' p/ ?* U
/ e' G+ p% O8 b$ u# `2、设置为当前的图层" z! c1 n/ O9 y1 F# L- o" f8 A
ThisDrawing.ActiveLayer=图层对象
3 J# o) V8 P- }7 e3 N. y& A" W注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量% z: N6 @( j5 I( K, h4 @
* r, U% |( k' R' a3 T
以下一些属性在图层比较常用:
: m. K5 m% r+ k, S& HLayerOn 打开关闭0 T2 L$ Z# M. M: t
Freeze 冻结* V+ k+ }* |' E8 d3 X, ? w
Lock锁定
6 r( `" Y" h$ J8 C4 sColor 颜色6 M1 P7 U p/ k3 o9 |! y
Linetype 线型( N7 D0 d. Z& l1 q( }- h
+ q% m3 i [' r) K* S S) s% {8 S b) }/ n
看一个例题:6 K J7 W) M+ b% u) u! y; P. }
1、先在已有的图层中寻找一个名为“新建图层”的图层8 W( Z/ g, e% D# ]- j
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。2 ~8 J( i/ Y2 D, l9 |; w
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
7 q) i- [4 ]3 S# _5 q4 d& q- c* a/ r! j0 M
Sub mylay()
1 a6 Z! ?9 t$ m$ F0 W1 f' n& n4 q" \; k o" a$ @# t3 a
Dim lay0 As AcadLayer '定义作为图层的变量
0 E& ]: {# n" O; lDim lay1 As AcadLayer! l6 z8 Z6 O1 d
9 n1 _! H, Q2 ^7 yfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到
- z+ P. s9 p3 w7 H- E5 F
+ R8 [' n& h7 S% sFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
8 X: z. u9 Z8 U- D* g
5 R, E6 q% y3 l9 z' e2 Q1 w If lay0.Name = "新建图层" Then '如果找到图层名! ?7 i ]& w; s$ Y: F
findlay = 1 '把变量改为1标志着图层已经找到
' a3 J+ o7 H( e3 V6 { msgstr = lay0.Name + "已经存在" + vbCrLf' l* C8 |% i9 I2 S1 a/ g
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
9 ^/ H& K, R7 m msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
& d$ b3 @: i( J# M msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf" E2 p( h$ x& f3 Q* ]) |
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
$ E" {! ~; l5 t msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
6 x/ q' j( ^+ A6 B4 W# } msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
" ^ _8 l) Q( T1 O msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf* E& F, v. h4 \/ D4 \
msgstr = msgstr + "是否设置为当前图层?"
* E7 i6 Z3 q6 u% w2 e( e8 d If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
) ^ F) T- @* c0 _& g0 m If Not lay0.LayerOn Then lay0.LayerOn = True '打开" M4 A& v" z1 W% V4 Z0 Y, _- p. S
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层: I T& r5 Y7 l e
End If
* D& B6 Y6 B4 |9 D* h* P Exit For '结束寻找) O' T. b: g" N) i' L
End If
( ~1 ], s: |% `9 [7 {Next lay0
$ w7 r$ m) L6 M# U
; @0 ^- U. I4 \" |; ]) RIf findlay = 0 Then '没有找到图层5 W! b$ A8 M1 F2 R, Y* Q
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层+ B$ _9 B+ e" W( v/ l1 B
lay1.Color = 2 '图层设置为黄色
/ _! t/ ~5 Q* S8 Z6 |1 c/ J) @# \2 j ! c" i3 T/ V g' U$ ^ k8 M3 h
ltfind = 0 '找到线型的标志,0没有找到,1找到
+ r. p. f! s! | For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环2 D4 T* \! }1 i% P9 k: I% ]
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN", i8 g N, {, H( ^
ltfind = 1 '标志为已找到线型
( s4 a7 u) l6 Y* d$ e2 S6 X Exit For '退出循环% T. r8 a9 i$ q( g/ P
End If
. d5 S# _! }3 P/ A Next entry '结束循环
: e/ R/ W9 s" ]# W! j2 O* c: x6 G, }7 b- Q9 ~
If ltfind = 0 Then '没有找到线型+ |9 Q( y/ [6 b9 I7 R, K
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
$ q ?5 n: Z2 X& }' L: {4 d- E End If8 V, Q) W' L7 _0 _4 u/ V
lay1.Linetype = "HIDDEN" '设置线型* ]2 z% F; q/ F) q2 t
! H5 i8 v) J# }: W& y+ g: A9 ?
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层4 z" C7 T# X% p: I
End If' h+ ^6 b! k9 L8 J ~# n5 B
/ w8 m! `% S' m9 m% Q+ d7 W' i
End Sub
% t6 O/ K" D9 E9 v5 i& H1 W* A2 A' s: X6 | K/ u
在寻找图时时我们用到for each……next 语句
/ [8 G$ y1 c/ {它的语法是这样的:
: V+ N: J# O1 V- q7 [For Each 变量 In 数组或集合对象4 t9 k# _" L R$ x
……
7 ~2 H' S8 b4 [" x; _2 C0 U; zexit for
6 ]1 c$ x5 l+ V/ a' W……, i8 R9 p3 P# t3 w) P% l9 h
next 变量
4 L! S' N9 U, A/ d5 E9 c5 B它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层; ]* n* W+ P7 Q& D5 J$ ?3 A
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。4 {3 }( `4 f9 O& g+ h1 a* m$ m
/ D* C. e4 H* R
If lay0.Name = "新建图层" Then- ~0 L8 h( ? M
lay0.name代表这处图层的图层名
/ C" r- H( e$ [- r7 |, @
- j. Q. f( r# }8 j2 bIIf(lay0.LayerOn = True, "打开", "关闭"): X5 n# s9 R P3 O
这是一个简单判断语句,语法如下:
0 h% n9 \9 k4 d' i& l& viif(判断表达式,返回值1,返回值2). n5 K. k5 x- E
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=21 |9 p" ^9 O( f# V
# F2 ^4 A1 o: h) ^" O$ T
MsgBox(msgstr, 1)
" V6 C8 b" G. ?3 h2 g! A. C- A$ PMgbox显示一个对话框,第一个参数是对话框显示的内容8 x$ A' T9 R( v' i
第二个参数可以控制对话框上的按钮。 i* h1 [' [& K3 }0 i) G$ b
0 只有确认按钮
; j& p h% U' T# V1 f3 ?1 确认、取消
. |6 c; L8 J; l, r7 P2 终止、重试、忽略
; `1 J: m& }" \2 n3 是、否、取消
3 c i6 {0 x+ v4 是、否% x+ w# q, Y6 y. ?( B! A' A9 U
MsgBox获得值如下:0 F' C6 @' [9 ^6 Y( e, l5 v# Y
确认:1- f3 n7 h: P" y! {" z1 _
取消:20 @$ u8 U9 ^% Q7 M# n5 M0 I
终止:3. M& W2 A5 r3 N9 I% I
重试:4
" m& i- p5 D9 L: @6 a3 i* K忽略:54 `- x. G& }8 E" m) j
是:6
/ P1 Q0 q6 Y% z2 a2 o _8 P否7( w' l, _1 ?5 l8 T/ o
初学者不需要死记硬背,能有所了解就行了& b0 S* {9 e' |% A2 }
* I% H7 _7 b$ a# fACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:+ [: N8 H! i- c1 O' j3 l
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
9 K0 F* c# u* [8 t: mThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |