先简单介绍两条命令:
* X" J, j! x$ x5 k3 Z! Q7 Z! M+ v
/ K D* v/ u: H7 Z, g5 l1、这条语句可以建立图层:& `4 z! d& ^& f) K. F# A/ F0 }- b
ThisDrawing.Layers.Add("新建图层")
& s3 H& }7 D. c在括号中填写图层的名称。+ ^9 g9 y! y1 \- j3 m
8 e5 {$ M1 s D7 H" J
2、设置为当前的图层9 \# K8 e- _; F1 H- X* s
ThisDrawing.ActiveLayer=图层对象
9 y& E! b n1 ?# r" u) }4 t注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
$ B, j/ K6 g' s n5 Y/ _, N1 O+ s1 c$ y* d1 @8 X E5 w& ]
以下一些属性在图层比较常用:' q7 z$ s* k/ I9 E) @8 W( Y
LayerOn 打开关闭
: O$ Y) D8 D7 ZFreeze 冻结' h6 ^6 I& |$ V; ?. l
Lock锁定$ M2 ^" I( y8 M; N) w% T: o5 m
Color 颜色
. h& g. b, z5 J2 L! [* @Linetype 线型
, I! K4 f- E) d4 ^& Y
Q2 y) \; g) [$ k5 w$ n* M( D2 ]
看一个例题:5 O' d1 k+ A/ h4 f/ D+ f& w
1、先在已有的图层中寻找一个名为“新建图层”的图层
1 W! y7 s$ @, T% v) m7 m' K2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。* x4 W R2 m7 q8 E
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
' ]. U$ K7 ^4 p I) f
. S5 C+ B/ h: v Y, {0 CSub mylay()) O" C/ u( m9 k2 p5 Y# ^; J1 M
; F* r! F3 m5 I- W% d) W
Dim lay0 As AcadLayer '定义作为图层的变量. C7 N j6 Y( ?& q* z8 {3 J8 N
Dim lay1 As AcadLayer" Q& M9 \0 h1 R
8 k! `' m. a: t0 U; O- Jfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到
1 L5 g: H0 ?' M$ A- B& o4 c3 |( M g b* H
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环+ I+ |+ L- n5 z, @9 m, z" {) h6 k
9 A5 s) Z( a& h; q5 C
If lay0.Name = "新建图层" Then '如果找到图层名5 M8 T+ j4 o M6 c
findlay = 1 '把变量改为1标志着图层已经找到- i( N3 }, w: n# u \. u* F+ Z6 |( \8 J
msgstr = lay0.Name + "已经存在" + vbCrLf! c, l" R2 Z7 x- d2 P$ n4 r) U
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
- u- t- S! e# [: |+ Q msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
9 \' J1 }8 G" \ msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf6 ^' X" D( o$ [" P* x
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
$ B+ E# V: Q9 K: R( J. U msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
* |& P& R" `! J6 ]' } msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf! ~* C1 ?) K0 J# J/ |# f7 O$ C
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf4 D5 M; n% Y/ R& m) C; V; ]- X
msgstr = msgstr + "是否设置为当前图层?"
1 d9 z) `2 Z5 c& V) W' a+ ] If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
" Y" ]9 n& t. L; Y3 Y+ g, i If Not lay0.LayerOn Then lay0.LayerOn = True '打开$ Y4 z$ _' N! h
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
0 v6 F+ G3 M% E$ ]# O8 o, o End If
& K+ H( J* t. ?; `8 h% o Exit For '结束寻找$ c& a1 C4 f X1 d7 Z# D: `
End If D( Q, }& d3 _: w% L6 u
Next lay0
& V' v' Q9 s% b+ w0 Q! Q# u0 @
; R) N+ X/ n4 x3 j' cIf findlay = 0 Then '没有找到图层$ V# o! G% U0 M9 m' `
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层: U" @# m" C/ H2 U% M! h& K9 }
lay1.Color = 2 '图层设置为黄色) \: Q0 ?) ^1 x _4 Y
3 q. B/ W# _* l5 o0 k7 s ltfind = 0 '找到线型的标志,0没有找到,1找到
- k# C$ e# v- j2 a" C W; z3 g+ R& j For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
$ M& z" q5 k' P& U5 N2 j1 S If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
0 g2 V5 w% T. v ltfind = 1 '标志为已找到线型+ S G. B) Y4 R6 h: k" O- D
Exit For '退出循环8 a: D; _- x* Y- W* Q: P& _7 L+ u
End If* F c+ E+ x2 m0 U1 o
Next entry '结束循环
% h3 X ^- u8 [ r4 W6 o- p* @. }2 U6 C% x' [$ T, h: a
If ltfind = 0 Then '没有找到线型
$ ~' s8 n$ q, y0 I9 \! Q ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型9 g2 X) E$ A$ n* Y& ]$ R
End If
* |7 E* i9 \/ I2 O; s lay1.Linetype = "HIDDEN" '设置线型
. o6 W4 E* o) G1 S( r9 D
# m9 p, C' O" ?" q8 { ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层1 s. j* E! G' s8 o8 D
End If& b a" R' t9 l! n
! ~3 A7 H) ~/ P' `. g8 x) M
End Sub
9 S# F# E2 X& h8 n7 A; A- Y. V, T7 ?( z( _. n
在寻找图时时我们用到for each……next 语句( G- ]! f- }, I! j
它的语法是这样的:1 d5 X) V' U0 `7 V0 B9 o+ S
For Each 变量 In 数组或集合对象
, b2 G& e2 N7 c) \" S( v$ K5 B& z( J……; N e% W+ {4 }' ^7 W" r
exit for
2 h7 h5 j/ ^- y……
4 I4 c5 @8 r4 D( k) [7 m3 lnext 变量
- C0 P6 ?( a/ ?( k3 O5 P它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层' W/ p# y9 G& L' o9 s
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。& u& ^" j2 R8 F; [1 H8 d9 I
, M% {) Q5 n3 l9 D9 \1 J, M3 xIf lay0.Name = "新建图层" Then7 `0 v" _7 f9 ]9 o
lay0.name代表这处图层的图层名* _- y; Q' p( o( s8 k! n) C7 u7 ^* D
) p: u h# z- \; d
IIf(lay0.LayerOn = True, "打开", "关闭")8 V1 e3 S4 h0 P2 ^$ c+ B
这是一个简单判断语句,语法如下:" a3 n6 A# N; p. H+ X3 Y3 @
iif(判断表达式,返回值1,返回值2)% k! J! ] |3 Y( N# j6 Z
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
" k; O; f' y3 J/ c, }* w3 h0 P) S4 [* {2 ~
MsgBox(msgstr, 1) 0 ^7 Y" v; N% j5 `8 h( I! G
Mgbox显示一个对话框,第一个参数是对话框显示的内容. W) \. _; J u9 K
第二个参数可以控制对话框上的按钮。- M+ x1 ^( z) K! R" Q
0 只有确认按钮
: [2 g% Z) |$ E8 l8 C! J1 确认、取消' x& R( e$ k: U: W9 r, M' J
2 终止、重试、忽略3 _6 [: V6 R8 Z6 b9 T0 i
3 是、否、取消
0 h1 ]' W; T2 A( t6 |4 是、否( B/ i; }( S* }, a# S$ g
MsgBox获得值如下:
# s# E: B; H9 ?, r+ o" K确认:1) ~* v: y5 t5 a3 s. @9 b+ I
取消:2" ]- ^+ t `4 Q! r8 `
终止:3- O8 \, y& K& |/ `4 L1 k3 S
重试:4: _" Q( N8 J5 ?' _7 H
忽略:56 L4 b% a" s; _7 }8 P1 d4 O
是:6- u/ t; R, U3 E1 A
否7 f, B; ]( W& v! }) R) r
初学者不需要死记硬背,能有所了解就行了
4 d2 n5 o/ d( j2 J4 p9 ]) ^$ x8 o7 P6 _# x4 h
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:8 x( @" @8 {( n2 Q: o7 w9 v# [7 y
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" ) E* Y8 Z8 c( q5 G/ u0 F7 ]8 ?
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |