先简单介绍两条命令:- Y) S0 Z7 L4 y, u4 w% |
$ J* n$ L! v5 n0 S1、这条语句可以建立图层:
% f! B a1 X Y# U; E0 ^ KThisDrawing.Layers.Add("新建图层")
5 W, p7 M5 I! s* L在括号中填写图层的名称。! s* a. F1 g j' m1 T _
: L. ?8 v- R7 O! K8 K7 e$ `3 `
2、设置为当前的图层
% ]" j6 B0 |2 l5 y1 dThisDrawing.ActiveLayer=图层对象; j* _0 a/ v/ N2 [( Y. _+ a
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
1 t1 L) A3 I& y7 U# `
, P" _# z# v0 }& Z; N以下一些属性在图层比较常用:
2 s$ ?% M* G! z7 f; s8 JLayerOn 打开关闭) G% ^8 S5 u- L
Freeze 冻结
" x. J3 W Z1 C4 zLock锁定
: F! H: s; W2 W; w SColor 颜色
e4 N |& S9 _$ ~% ?Linetype 线型
$ ?2 K" ~) `# V! L$ d( n! p1 q
d: ~! t9 [4 o, E% ^% J- U$ k& S/ }6 _. c v' I$ x- P
看一个例题:
! ~' O( V7 X* {+ o; |# M0 n1 O1、先在已有的图层中寻找一个名为“新建图层”的图层
5 F: x3 r9 ?' v2 c7 t- q+ y4 A& Y2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
+ `# c7 ` F$ \4 n3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
7 `* F# O; {% _# ^. W8 n! } m+ k
Sub mylay()
' C3 ^+ e2 C6 k4 f/ K
$ @, |9 ?- o: ]0 l& dDim lay0 As AcadLayer '定义作为图层的变量$ G3 c1 N+ c$ }! ~
Dim lay1 As AcadLayer
; z9 L$ s5 M6 X" d: K. d
* O# u- o+ \0 O- y+ j/ l6 u* ]findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
A- n7 U3 j0 ?! w9 R. n# Z* s
3 S% {) K4 ~. S% R1 G$ `For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环 e/ z! a6 D2 t- a& A8 C" G
5 B5 L* u( |# T" D7 c If lay0.Name = "新建图层" Then '如果找到图层名 b# A9 @9 L, B5 p
findlay = 1 '把变量改为1标志着图层已经找到
. w0 n) M8 ~9 H" t) q1 Z7 c msgstr = lay0.Name + "已经存在" + vbCrLf
& ^/ C, Y5 Q9 b6 y msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf5 M$ J( U$ F( B/ i
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
/ l* y+ \+ C4 l% X msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf, t( _$ y! v! Q* R2 h; Q
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
/ B% f5 m# i9 W/ A0 S msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf6 ?1 R7 e9 s/ W3 n; b# {- N
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf& c/ `9 ?. h; N$ h, G0 s
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
6 I6 s2 k- a5 \( |7 a msgstr = msgstr + "是否设置为当前图层?"
- E( [- {4 y3 U" _ If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定8 d9 v% C" n% i0 ?! d" |. P G% v
If Not lay0.LayerOn Then lay0.LayerOn = True '打开4 X+ a0 o9 ~5 `9 z' r) j+ T' Y+ A
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
& {$ ]$ [/ f+ C1 f7 U End If# Q, [. T$ C! h
Exit For '结束寻找
& V( M4 F; M8 c: M0 C( B# H End If+ q% H3 b! Z& |. A1 N X
Next lay0
K' T; y# m8 M& w$ X9 d8 C
& U9 s; T" b9 g1 w* W: Y' y# cIf findlay = 0 Then '没有找到图层; F: E8 l4 [& _2 k3 I
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层1 A: X# S3 D7 j i& s S& U8 k
lay1.Color = 2 '图层设置为黄色
2 h! R$ y0 ?% V) N: {% i3 z @- [1 G* W; c' s T7 ~7 d T j
ltfind = 0 '找到线型的标志,0没有找到,1找到
* r: P% K4 M8 \- m, f For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环, [! g/ s3 p: w+ S
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"/ ^0 c% {/ c X) O; M5 @" G
ltfind = 1 '标志为已找到线型
: J# g. r* R* y- l* _ Exit For '退出循环
- w# v2 Q% h3 H- I& c End If
6 }* k' m. r3 u8 e+ W( o9 g Next entry '结束循环
2 d6 V' P8 O. i/ p
$ f7 j$ A$ a3 y% |" Z; J4 C% Z8 R1 L0 { If ltfind = 0 Then '没有找到线型4 u' j6 l5 W4 L( Q( r6 K1 ?
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
9 Z/ _$ q) T! T9 j) e% z+ A. O End If
p; q, Y) u4 w! E9 V( \2 f) k* j lay1.Linetype = "HIDDEN" '设置线型 H8 a7 d9 }; ^( C- I* F# d
0 p! U6 X& u# m ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
; p: M& ~; y9 {End If( K/ H! u! z9 w ]
/ K2 X# @0 \# T/ |& z- ?; F) g3 C# kEnd Sub
5 b: r9 f$ ^) c1 C% M6 u6 o: H
1 ^1 T% o6 x8 z( p$ k' }3 D在寻找图时时我们用到for each……next 语句 }$ e0 w1 s" ]" d2 g0 d( w7 y
它的语法是这样的:0 G/ C: Z6 @! m! Q5 k! I
For Each 变量 In 数组或集合对象
% a( w$ j2 _, O1 m8 t: u3 w……& L7 {6 g+ n9 K
exit for , @ H" V- p4 T! a% ^. x
……4 P4 d( `" s3 u( q2 F6 m
next 变量( L2 H% |# u. h7 C* f+ U7 [$ h* C
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
F- o( Q( t1 s& ]! ]& z( T在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
/ s3 m3 y1 |5 \3 \& F" a
) s: X6 r+ P# y3 a+ ]4 k# UIf lay0.Name = "新建图层" Then
( E# i# S) g, [6 Rlay0.name代表这处图层的图层名
9 Y; n8 t P" q- l8 I
& Q) O$ M$ a# r9 E: o! hIIf(lay0.LayerOn = True, "打开", "关闭")
3 ], s0 w: L) c' p这是一个简单判断语句,语法如下:9 W" T J% k' `1 @8 c. G: h! g6 K
iif(判断表达式,返回值1,返回值2)
' Q7 h9 U0 L! ^0 A9 T* y当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
- f9 R; `' I, G; V5 e3 e: F/ |. I6 T/ n; [- g: J% I( C
MsgBox(msgstr, 1) ( B" m) l2 W# G+ y# R, C1 a
Mgbox显示一个对话框,第一个参数是对话框显示的内容
6 ^- W) A' w+ U2 n1 A- u! _3 E第二个参数可以控制对话框上的按钮。
7 z: J+ a# P: \) p" j: d0 只有确认按钮
( B, b4 P- e% F7 {2 F8 S& k) W1 确认、取消4 Y2 j; z4 y0 s& A' S, ^
2 终止、重试、忽略1 q p) R/ A$ P, m
3 是、否、取消
- ~1 d2 L$ k+ o4 是、否
+ K3 O/ z; K: R; `8 E- [5 |MsgBox获得值如下:9 z$ U: i! `) V# ^. q) b0 x
确认:1
* W2 V D% e. P) b( f n$ A取消:2
8 s7 z& Q) Y: Q: i+ W# @终止:3, y: P3 r# S) I* ?% C8 A
重试:4
0 o \" d( G8 d1 V u8 n" `+ @忽略:5
* E8 u6 P. L0 h1 |4 D* P9 |9 J是:6
3 @2 w( E. W& p2 e# U: z否7
, F4 V0 ?* W5 q$ r; ~初学者不需要死记硬背,能有所了解就行了
/ w: @1 l- k* f6 x' v5 l4 Z# x ]( M% ?* q
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
" o( y. c, R D$ k% v( y2 B. X; T9 R* y, yThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" % {1 w2 T |6 h1 G9 `
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |