先简单介绍两条命令:0 z% Z8 c; ~6 X% {* `
$ y& _* y V7 }+ ^8 E5 j9 [1、这条语句可以建立图层:
4 R' v5 z1 \6 Z6 E/ Y( WThisDrawing.Layers.Add("新建图层")3 }' N4 C6 g, ]1 z; d3 }
在括号中填写图层的名称。4 P' C4 p) Y. d% v% _; f k& F8 \
. A- z/ I9 f( _, k
2、设置为当前的图层5 z* a. u( o1 x; R
ThisDrawing.ActiveLayer=图层对象
9 s/ R/ J/ b% F5 F) _( t注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量3 e# C/ o: ]5 G. C, z! k
9 R2 G/ i, ~5 Q- v: x5 A" O
以下一些属性在图层比较常用:
" s" t# R `! v1 ^5 hLayerOn 打开关闭
7 n7 v' S2 {" t9 g5 I) Y$ {" ]; QFreeze 冻结2 P- O `7 ?5 ?9 G+ B0 @$ ~& P0 _' B9 ]2 H
Lock锁定
$ h( Y5 G& }+ A4 [- M+ m+ @, {Color 颜色- Y! ?+ a8 g8 y& E, h: x' @
Linetype 线型
% \# I1 D M& k. C! g7 v! T
9 d: p" v" s5 O$ k* y
- D# T' {* m: A5 D6 r" X4 D看一个例题:6 i0 e i! l, w7 V/ M6 ~
1、先在已有的图层中寻找一个名为“新建图层”的图层
' D" |, j5 V7 Z' c2 {2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
3 b$ O R) f) N0 J, r R3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
! \$ u r5 l a+ H
: C4 L# n1 M8 C! vSub mylay()
5 g$ O" s+ {8 z% H6 g* P' r3 J: t$ _, e# c
Dim lay0 As AcadLayer '定义作为图层的变量
" `/ \% [- ]5 KDim lay1 As AcadLayer
* W! R3 M# X V$ L" a: i. |2 d$ p+ q" M& @
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
3 b, C* V* I+ v2 U- j M$ |/ ~* M B0 y' s% O
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环 j) K: u+ Q+ ?* H' k
) k- Z) A1 D2 n L; w: k
If lay0.Name = "新建图层" Then '如果找到图层名* j5 }8 i5 j5 W/ o7 _
findlay = 1 '把变量改为1标志着图层已经找到2 J0 \- Z0 G2 h. A; R" Q4 M
msgstr = lay0.Name + "已经存在" + vbCrLf- A' `1 d) o2 O% ]3 y
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf) O2 A3 ?1 t8 r1 K5 K- p
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf, }& i$ w0 H4 ?! L
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf; @6 r0 [1 l0 F# p, u. ~( J( Y
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf$ p4 c: q' |$ R& x
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
0 [8 t4 b8 c( U9 m msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
0 z5 i, j8 D$ ^. m% y msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf( `. V2 @$ L. x$ d' h$ _- z7 Y
msgstr = msgstr + "是否设置为当前图层?"
( H8 d. P( v4 ^6 a: I, G If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定 S0 z/ J: I* |+ G* t& L/ Y
If Not lay0.LayerOn Then lay0.LayerOn = True '打开; W- Q, E- q; w4 O w5 [7 d& W1 g
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层/ D8 M0 W) _# d+ P9 b5 u
End If( O! A0 h( o& i( M2 Y4 G6 f
Exit For '结束寻找
; d9 l: |( B9 } End If
# T! P& i! x) q1 v4 aNext lay0/ w/ Q/ k: I5 O
3 Y9 j9 U5 O3 K1 [, rIf findlay = 0 Then '没有找到图层# A3 T1 }- }# ?& O
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
% `5 u6 z# s! @( g' N0 a" U; \ lay1.Color = 2 '图层设置为黄色; I6 {3 ^* e! b2 Q- q
4 r0 Z/ A$ X) \# n- w J
ltfind = 0 '找到线型的标志,0没有找到,1找到! _" _( U7 A* h
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环7 o+ C- U/ T' D5 J& s) \
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
% \6 R6 Z3 @/ D7 h& L2 K; x ltfind = 1 '标志为已找到线型2 x9 F$ j0 G' G/ N8 @
Exit For '退出循环
0 ]4 K& w; F% R; d' @' a8 c; _3 L' d End If
4 k0 \- H6 I: w( W( H Next entry '结束循环
! B, \: j# d& |7 A e- ^
6 i( y; L0 {" ~* \ If ltfind = 0 Then '没有找到线型0 R% \5 x" q- U* P# k
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
/ ?1 j3 ^( m! O' X End If! Z+ K' n6 L2 d
lay1.Linetype = "HIDDEN" '设置线型
* g4 Z2 ~# b1 O) k2 X- [
! t, R; Q5 P/ E' X# F% T W ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
; ?0 e5 N4 y' k1 q: }% G2 Y: E) o7 u" zEnd If( _/ [3 q' B! |8 i& u' J, b
. c% M$ N" H8 @
End Sub$ C+ N: T) C" H7 ~- y5 R7 R% @
0 c$ p1 T: }3 d' {* |0 t在寻找图时时我们用到for each……next 语句
- X0 ]9 Z @6 B: m" L' B& ]0 |; q它的语法是这样的:' Z; `* S) o# h2 d
For Each 变量 In 数组或集合对象
9 ], r# k+ [; C. H……& v4 U ^" ^, ?8 R4 d
exit for
M$ e! \5 C" `$ P ^7 @9 u b……
# x! [- I) m- `1 x% l: F2 hnext 变量7 h- P; v7 X+ `; s
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
' h/ @$ H% S- r. Y2 l在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。# [6 Q, N1 |: Q ]
3 r( }1 m/ z; N4 @0 m1 v( p" f
If lay0.Name = "新建图层" Then
+ n( N, A2 O- C. x% zlay0.name代表这处图层的图层名
% H1 ^0 C- `$ c8 t% t% d( q
7 v9 k6 ~" y9 E9 o+ }6 wIIf(lay0.LayerOn = True, "打开", "关闭")9 c( R6 a3 n3 z" f, C
这是一个简单判断语句,语法如下:$ {5 j# ~- A$ U
iif(判断表达式,返回值1,返回值2)4 E; H7 x% M- e, Q( X; f' m
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2; N& u2 m) D5 b1 U: d3 L; q; j
+ g- h, g0 b6 a. m+ G9 sMsgBox(msgstr, 1) ; B2 U8 N8 z+ A6 S* F- ?
Mgbox显示一个对话框,第一个参数是对话框显示的内容
* s, h& i: i1 `& m第二个参数可以控制对话框上的按钮。
, W. U8 T9 q# h0 g5 w% Y0 只有确认按钮9 T0 [5 W1 T+ L% p" F. J: ~$ C
1 确认、取消
( q' W; y7 i1 b4 P6 p2 i @! h5 c) I2 终止、重试、忽略1 r) M; n: z/ e
3 是、否、取消
+ Y1 W# w; ]. h" t7 {: S4 是、否
8 N# t, j1 ~. \7 JMsgBox获得值如下:6 F( `8 _8 f/ a% q, `7 V
确认:1
; R6 z t- i0 K取消:2
5 Z/ A: h% |# o- y9 B- Q6 R, A终止:3
9 K$ f0 |9 Z5 R6 Z, z3 w2 {重试:4
6 F5 j0 T. U9 @1 |5 V& C8 T忽略:5
5 M/ g5 a" x' m) e- U( K/ i是:6
6 O2 q6 N' S. ?% |" f否73 u) B1 O, D3 m8 o1 ~2 u
初学者不需要死记硬背,能有所了解就行了
/ ?/ T. C& ^2 [
( A9 D0 Y# ~ P) T4 T. t6 k6 eACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
- g# t( U. k( I8 k+ z& IThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
- n7 Q2 G [' [9 a3 p! DThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |