先简单介绍两条命令:5 G3 ` A% n4 I$ t
/ |, O. X3 E# h6 z8 A2 y6 ]1、这条语句可以建立图层:
! Y; y" h& |: F% \6 E1 ^% NThisDrawing.Layers.Add("新建图层")
) k! M/ w; c4 s# R( N在括号中填写图层的名称。- Z* {5 ~2 o, P/ K; b; d
- i3 c/ y8 s7 N* ?' `2、设置为当前的图层
% m1 R% u( E; s1 p/ w6 H, C3 L* pThisDrawing.ActiveLayer=图层对象1 Y# W7 P; H) A
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
( g; _7 p* ?' d6 M4 I
% y) x9 I" {" ]. j1 K以下一些属性在图层比较常用:
/ a Y& t' M$ j4 k# zLayerOn 打开关闭" M4 j( Z3 i$ L$ G
Freeze 冻结7 O! P$ N0 R F9 G/ U
Lock锁定
1 _2 p! X1 _9 e7 K, `& A% cColor 颜色/ z ]$ e% @5 J" g e4 S
Linetype 线型
4 P6 \: U* c: R
; f: U% M# X9 u' u6 j3 ?% }- S0 c! ~! H/ F- \" r8 J5 G
看一个例题:
9 V" W9 x/ y. x1、先在已有的图层中寻找一个名为“新建图层”的图层
& @# e( M# m0 Z G4 o2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
9 P y. r! A l3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
^$ ?1 _$ n, Z% P9 [1 h+ L
" }+ m+ i$ `% |, W. }+ k7 oSub mylay()4 \" r1 [, ]- w& Q; Q
) J# x9 e8 G$ u0 h9 h5 _( a
Dim lay0 As AcadLayer '定义作为图层的变量
7 F8 j, `, x* `! a) _Dim lay1 As AcadLayer/ d: `% Q' U$ K9 Z4 s% n4 N* w
9 j8 i+ Y4 z) X+ y; Ifindlay = 0 '寻找图层的结果的变量,0没有找到,1找到* q& M0 u2 Z5 a y$ w
# K# t5 n5 B& y& {) NFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
$ Q' U0 ?" v, T' X& r" s/ ?; M5 t
2 l+ u' X* {" U% G j5 o If lay0.Name = "新建图层" Then '如果找到图层名
+ i8 \) J* @1 @5 Y findlay = 1 '把变量改为1标志着图层已经找到
$ l# c9 l1 b1 W& U! h+ j7 R. h3 T msgstr = lay0.Name + "已经存在" + vbCrLf+ B8 \" @! l. w- a! ]) Q6 L1 s# i
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
0 Q. O$ O, B6 t' H5 r msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
/ k) ]8 M* g7 w& H4 y. w msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
) [: l6 B" B& K E2 Q; U% L msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
9 D: d- o' l& e( l) e I. g msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
5 Y5 u8 E# o9 y" p4 T8 v$ `$ h) M0 R msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf4 P/ O, t5 Z7 i) r
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf5 B- i5 L q0 k4 j) y2 @: q
msgstr = msgstr + "是否设置为当前图层?"
" X. t6 ?* H2 Z) u0 y If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
1 ]" |$ [) z# _' l+ K) r If Not lay0.LayerOn Then lay0.LayerOn = True '打开
5 G% ?8 ^* y- c. L5 w$ _7 n+ \ ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
5 v' H5 L8 u8 W6 `) R! V4 j8 U/ B End If
0 D7 w$ ?. \1 y" h) A3 G Exit For '结束寻找$ S7 E) D5 d) J Z% _5 P: ]% I
End If; g: D, N% Q$ X% [7 A2 O
Next lay0
2 E H* w3 a }
7 U! j& c" W8 l# ~ {If findlay = 0 Then '没有找到图层
) n) B. j/ m, r( v: `: m/ ^ Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
3 t$ F4 Q) A" V lay1.Color = 2 '图层设置为黄色
4 S) k& t5 q; W9 @& D6 g: R 1 x# X2 L5 n( K" w7 V
ltfind = 0 '找到线型的标志,0没有找到,1找到+ ]6 v2 b$ n( p3 h9 |
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
# K0 L A# u! W! \, J* I( r If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"+ y! Q4 k+ p* l, j) R
ltfind = 1 '标志为已找到线型3 C2 G: \' u( i V* p
Exit For '退出循环
0 G" v9 e# {4 f3 O0 m/ d7 [3 f End If, N' A& b; y! d+ J- S) V% P
Next entry '结束循环
. _) W0 x& Q. \" \$ O
* y9 E! i, X) |# I! L If ltfind = 0 Then '没有找到线型
. E8 I, n: `% C7 A7 W& a+ ?8 ]2 H& `" v ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型: l( C" m- P8 Z& M
End If
% H) p9 Y! z: O; K" a lay1.Linetype = "HIDDEN" '设置线型
9 F' v% A3 I a. Z6 q! Y" i7 g+ x: m% } ?: u( p
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
; t& [9 X: v, M9 z. T2 G' O, FEnd If
$ e- r" H1 S3 [7 g- k
. B( ?. g, z s# ]End Sub
' z; o. G% F6 H1 J0 F5 z5 V( U) @7 K/ W2 F' {0 q. m
在寻找图时时我们用到for each……next 语句6 `+ \5 ]9 }& W: R
它的语法是这样的:$ ]" S# t4 d4 |/ g3 x) t, S
For Each 变量 In 数组或集合对象) ~6 @! x* `' W, r7 C2 u
……
: S. c9 e& g, @' T) N; @exit for
0 T8 g! s3 t. Z( c……% B& F) {+ a# {+ l, j
next 变量
! }- h4 u; c8 u% J/ l, [它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层0 D9 D d- R& B! {3 C% t
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
" J0 B# ^* |3 z9 E- s4 B) D# s: H4 A/ g+ q# E! b9 @4 H- q5 d
If lay0.Name = "新建图层" Then
; W0 A4 T( x) J" d/ {lay0.name代表这处图层的图层名
: [# V5 x% v4 k) D( y. ^
6 u* j- I& @/ ~$ v4 w; P2 zIIf(lay0.LayerOn = True, "打开", "关闭")
$ a* J" J- b: n& M& T4 R, u这是一个简单判断语句,语法如下:
% G0 V- P7 S! m9 o8 @$ L) A; niif(判断表达式,返回值1,返回值2)
* [1 ~' G* m! a$ J当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2; I3 a2 w( _4 F& h. g5 w& R
+ v0 V9 Y5 r4 m9 r1 x s2 C
MsgBox(msgstr, 1) 8 z3 v; I2 l% b0 U, c# V$ n0 N
Mgbox显示一个对话框,第一个参数是对话框显示的内容5 O2 F2 q6 t0 f+ ~) V, L3 t
第二个参数可以控制对话框上的按钮。0 X- l% f! x4 c1 }6 V( r) N
0 只有确认按钮
3 ?# d' Y( T. Y1 z( x* o1 确认、取消" P- Y( |. B2 ]/ p5 h
2 终止、重试、忽略: N) T, u; p3 U
3 是、否、取消
% D8 O5 b3 r6 V0 d4 是、否
) d- `; F, R( ~1 l2 qMsgBox获得值如下:+ V" F9 @2 z+ ^( R( T- L
确认:1 w7 W. T0 x- L+ z
取消:2
8 V0 T; C; G1 C1 m, f$ v终止:3
# [# c7 v. I4 C: m重试:4" A* q4 N5 |7 s6 {0 e- y
忽略:5
' W0 J* F4 Q( v# Z4 i& K) K! ~是:68 g7 P) X( T `. n0 _1 `, c4 Z
否7
y9 u+ U1 l( U0 D9 ?$ z初学者不需要死记硬背,能有所了解就行了
7 N1 w$ I- N! O4 h3 q" b6 M, Q+ C v3 f% K1 e: E
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:" g7 a! `6 }/ K6 j$ C2 p
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 5 N) P$ j5 e: n9 b5 @
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |