先简单介绍两条命令:
) m2 c/ g# k3 `8 G
) m- S' }9 k$ N9 T0 F3 P$ w1 }1、这条语句可以建立图层:/ a0 p s: D6 |% Z/ e0 _, g
ThisDrawing.Layers.Add("新建图层"). u8 G' `) N" ]+ S) q s
在括号中填写图层的名称。5 c% Q9 D& \7 A+ m: c4 d. [
2 k1 P/ r. J, }( S$ o8 d# f$ C
2、设置为当前的图层
! ]: j" Q' }# ]7 w u* d/ |ThisDrawing.ActiveLayer=图层对象
3 D @( V& }4 s" Z( ?5 P% W注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量0 D$ r4 M" j: \2 \/ H* a1 q4 ?. j" U
# ^" I" ~5 Y3 W
以下一些属性在图层比较常用:8 p& t4 O: ^! V
LayerOn 打开关闭
1 x d+ U8 ^, O# LFreeze 冻结
+ g6 W3 h- D6 Y; a' xLock锁定8 Z9 p* W: {# e! ]& ?
Color 颜色 l4 B6 _6 j# h2 b% q* Q7 |
Linetype 线型
' N9 m6 X* Q/ E" g# ~! E4 j# c9 F. b+ R+ i$ }8 {7 p! Y4 g) H$ c
, w$ q$ _5 d+ w. X; o
看一个例题: _( k z6 _1 d) J$ x. m( f; C8 Q* A
1、先在已有的图层中寻找一个名为“新建图层”的图层2 N) e6 i/ y$ q8 Q2 `
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。& W) k! C+ c2 J% |+ a3 d2 v3 h) N
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层9 C& R) X, f% Z, o$ R
) N% k' R# K( { {7 N5 j/ J) d6 lSub mylay()# V, X# S% e- F7 w; [( e% e
' \ q4 l1 S* i* N# hDim lay0 As AcadLayer '定义作为图层的变量& r7 {" Y5 r6 X
Dim lay1 As AcadLayer7 |! i& ]+ }4 M/ [. f
# w2 y% b+ T, x& [, A3 jfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到. k" i) ?1 f) t6 b ~5 x' l
8 R4 w( L% `$ Z5 N9 N" U- |
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环5 O6 T7 q1 I# b5 `* ^: r# u9 P# R
- ?$ w2 J& h! W7 x. Y If lay0.Name = "新建图层" Then '如果找到图层名
& [, F. P' h. ?; w ] findlay = 1 '把变量改为1标志着图层已经找到. ?7 l* R. i, f0 j C
msgstr = lay0.Name + "已经存在" + vbCrLf6 G- O- N2 A8 m. x9 n _9 o- @
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
! j3 D2 m1 t. G# e+ ], P msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf! F j$ F# z' ^" e7 F4 l
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf- I4 Y- f+ K! M: H* F
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf. X* t( S7 Z: [( j) a! J
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
% E: W$ Z+ a! a# ]' e5 }4 n msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
$ j; H% V6 u/ u msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
+ |6 e- \7 @- i2 H! E- v& S# Y7 [ msgstr = msgstr + "是否设置为当前图层?"
# z) b/ D* `3 N. B7 l, M% {: d If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
* w6 z( | O3 x6 ^ O @* v/ s2 O If Not lay0.LayerOn Then lay0.LayerOn = True '打开
! _# c6 {0 k/ g( X ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层& x# U- b6 @) O6 z, Q3 P* g
End If) P' p' l# e, [6 q) z l0 H
Exit For '结束寻找% I2 C# ]9 y, J4 B
End If
! z9 L/ J5 B" s' |4 n2 YNext lay0! Y1 l1 |" k9 Z- s5 b
( w0 t' j5 n1 P' n) y
If findlay = 0 Then '没有找到图层6 J: \) w% X9 P
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
9 `: k7 y" |1 V& _ lay1.Color = 2 '图层设置为黄色
6 A5 N; F4 n: H8 o; h9 Q$ E6 N; ~
/ N$ v0 T3 P" P ltfind = 0 '找到线型的标志,0没有找到,1找到9 z$ u1 y. L3 J4 H+ |/ D
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
& k( u( c* |. X' A If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
4 g' f) K! p- @8 H5 m% g1 c ltfind = 1 '标志为已找到线型
* Q0 b, ?, l! k a8 V Exit For '退出循环
$ D: X) y1 P4 a- G$ x End If6 V- Z" m' u- |# @- @; G) L
Next entry '结束循环
9 w" {. I% f( b1 N* h' f
5 F# N" {+ |8 `1 x( B If ltfind = 0 Then '没有找到线型+ |" R0 ]+ [9 K9 t# V
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型! o4 Z S; ~' G& _/ G, U
End If
$ l; c4 _. d& g" m; o* d lay1.Linetype = "HIDDEN" '设置线型; S7 K+ F8 K& [
9 F# v. y8 X/ E# E4 z7 K8 X" t
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
* T) p2 R+ i, t% k H- eEnd If
, p2 Q& Y; J6 Y8 @$ t i& z2 E% y
End Sub
. O, S% I& M1 j' N
$ F$ {2 a3 F* k: P% n& C在寻找图时时我们用到for each……next 语句
- m' x) n' y9 I; q' S它的语法是这样的:& t( e* t/ E: C( D% Q# C
For Each 变量 In 数组或集合对象
1 D! p& b7 j8 R0 K, ]! k8 \8 m( J……
! r2 P8 Q" n# o4 s8 dexit for 0 V) V j3 A) T3 x, t6 V( W
……
+ ?1 F7 q* P7 q5 G3 dnext 变量 F. T. A. m! e( u
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
( r- K/ G) m0 @" {3 u8 g) Y9 I( t在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。4 |3 B3 X' m( G, q
u5 k; c o* K- ^! t8 d7 v/ |0 q1 JIf lay0.Name = "新建图层" Then5 d5 [- T4 R# d8 n, g y2 x7 c- O
lay0.name代表这处图层的图层名
' r3 ~2 v, a, z: ~ \ T
" }3 Q) y, W" \IIf(lay0.LayerOn = True, "打开", "关闭")
q6 t' b/ O- C% n6 g( i& l这是一个简单判断语句,语法如下:
# i9 Z( ?% i9 Y) @' F' M/ C! h' ]5 ciif(判断表达式,返回值1,返回值2)# p& f/ P* u$ Q. O
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=22 ]* v5 u2 \( A, X2 Q$ s1 `4 p
0 r6 T8 g( ^" v' s
MsgBox(msgstr, 1) % p+ j9 R( B9 i! P: x0 n
Mgbox显示一个对话框,第一个参数是对话框显示的内容0 I4 R( l0 _$ H. k7 z
第二个参数可以控制对话框上的按钮。, a9 r: J8 U2 g4 r+ m; P4 S
0 只有确认按钮
' J5 g7 h* R5 t6 Q1 确认、取消: V: H/ u$ [1 T. G8 W/ @
2 终止、重试、忽略' t9 D! f3 Z5 ~1 K- l' S0 w
3 是、否、取消
% ?/ w; r. Y0 `( ~ l B' b4 是、否7 L5 Q9 J9 G$ z$ T
MsgBox获得值如下:
, Z; Y3 p) @5 t G; \; ^7 E/ q确认:1
+ A. C( I% J: P, m% ]% r取消:2
5 `$ C$ L2 Z8 \# d( d1 [0 F终止:3
" y6 z N: E1 e( O8 `+ {% f重试:4# D# t: ~ @" E$ z2 a- A
忽略:5
$ c; Z4 J+ D" R8 }2 ~) Z$ @* M4 s1 O是:6: j/ w4 Y( o7 D0 m! @; F5 i9 {
否7
7 x$ d6 D a5 l- \; Q% L初学者不需要死记硬背,能有所了解就行了7 X j8 ^9 T* A1 O& i. m/ m) M
3 [# T$ }1 L) O% mACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
5 J, o1 Y& }, G" _6 G9 J5 s' T& CThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
! G' i6 M( _2 s/ xThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |