先简单介绍两条命令:' s# W& Y! _% ^4 c+ d8 r
g+ }# x9 g+ b1 w5 ~$ j+ E Y. I1、这条语句可以建立图层:
; ]5 q1 R) p; |3 L% G" VThisDrawing.Layers.Add("新建图层")' s9 F* i2 W. O4 M: }. U; L: Q1 M
在括号中填写图层的名称。' W2 V7 O1 T" I' w' {
& q5 T; A1 h6 X2 m2 L$ v) R2、设置为当前的图层
3 \3 f. C; p& U% YThisDrawing.ActiveLayer=图层对象; E+ Q: S1 d% J0 b: E# a
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
, S' l' B- h+ X4 K. G; L! Y5 v- Z! S( p3 G+ A. A0 m S. G
以下一些属性在图层比较常用:" ? f( @8 r: S
LayerOn 打开关闭
4 R. U7 I! T. q1 u7 I: kFreeze 冻结5 H9 h2 [' m3 q$ y- E
Lock锁定. n0 G( p, Y8 Y$ l
Color 颜色5 V9 K7 b, A# n( ~
Linetype 线型6 E8 J4 r, m- |) _+ b9 h
5 C! }5 I5 C5 G! p8 A, B
# Y d+ _3 S) S看一个例题:
- B; I0 D; n- b! b+ C- ^1、先在已有的图层中寻找一个名为“新建图层”的图层8 ]. x2 b8 X3 l: X
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。7 _. @+ k. c+ h& t$ L3 v# o g
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
& Y: u) K) w& A1 C
! `4 Q4 e0 _+ ySub mylay()0 o$ N/ P2 c! w3 ], V4 p \. ?
1 y4 M6 ?6 x; x Z" C# @& TDim lay0 As AcadLayer '定义作为图层的变量
5 Y3 w" R: R c4 \Dim lay1 As AcadLayer
6 R( h6 J0 o- M: }' d9 ^$ M) c- o; Z3 n; D6 R
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到" H2 X6 p' n1 d6 G3 A( S" @
2 o5 @+ u. D7 g0 k( n2 P ~For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
8 e' t! V' A) b6 U0 }7 G/ a& B. H8 m0 s n4 f5 Q
If lay0.Name = "新建图层" Then '如果找到图层名2 a1 H& c/ ^8 o. ~1 p! o% m
findlay = 1 '把变量改为1标志着图层已经找到/ y5 ]) R ?& `+ W3 p2 S$ u. C
msgstr = lay0.Name + "已经存在" + vbCrLf3 c# @$ i3 c/ h8 x4 G& C
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf8 Y7 \* V# p( M. q7 G; K
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf% q" C- O r1 q
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
1 U' [) u2 o+ J9 o Y msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf1 Q0 H$ |; O' s7 D' {& z! f; l
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
8 \1 [! j) ]9 n" K3 N msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf* f- ~, Q: U9 l) C
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf4 e1 T( L! u1 Q, f6 k0 M1 f
msgstr = msgstr + "是否设置为当前图层?"4 p3 T* h. L. j# V
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定" s. @, h: [; ?; X& {% |
If Not lay0.LayerOn Then lay0.LayerOn = True '打开- {, X c6 N x
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层3 `7 j8 x; a ~" J
End If
7 c/ X' I. N1 u) N; M5 g8 } Exit For '结束寻找
6 H+ y4 [# D" \1 o# j End If
9 T$ r! a8 b, v. G! U7 M3 ZNext lay0
3 I* Z+ D* q/ S) f) }6 I8 o- i9 d- @% L- Y" v& v+ [ |. p; |- c
If findlay = 0 Then '没有找到图层3 R- s8 C% Q I' \" ~0 {# k
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层9 A1 [+ [1 x/ c: J6 h* F( i
lay1.Color = 2 '图层设置为黄色
7 x: m# u7 A" U$ _- M. n4 I1 _, {( T
! i1 `# }4 R7 x9 F5 J ltfind = 0 '找到线型的标志,0没有找到,1找到
! I# G2 _/ F+ ], Y5 H For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环: J3 U4 ?/ o5 b) ^" c5 f) h
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
/ g1 C6 K5 W! M ltfind = 1 '标志为已找到线型6 Y) `3 p& \8 _9 O- ?$ D. g8 o
Exit For '退出循环
! ~* `; f8 u. x5 z' h% Z: X End If* k/ s! z, S4 V# j3 A
Next entry '结束循环
" ^9 G# e7 {: k3 L7 {. @# a! A' @; ?) P- y& Q5 X
If ltfind = 0 Then '没有找到线型
8 S$ [9 z$ `% K( U) c* o T# _- r ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型, w7 R" Q. S! }5 \6 ?) J
End If
( m5 U! o4 D+ p1 ~0 K lay1.Linetype = "HIDDEN" '设置线型
: D" x3 g7 a& F) w) \( c' G% j- w Q) S, o) S
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层' w3 Q4 e9 N {) `
End If$ E% M# p$ b/ M# E( E
\. ~1 c/ {5 e W! ^End Sub
0 @4 k. w( u7 `) t" K) ?; n" g4 x5 W
在寻找图时时我们用到for each……next 语句+ a" `0 Z8 h, W
它的语法是这样的:
" @. p2 f" s m* h( |( ~For Each 变量 In 数组或集合对象
$ S3 _* e& P. s! D* v…… a$ b7 h+ Z) d
exit for
- U& `% M& a6 ^* ]4 o; R……& e" K$ b& X: H' V/ K
next 变量& t( r) z. N# F/ ?8 b
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
7 u3 I3 g2 g2 F7 Q/ s; ~1 ?* n! [在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
* L9 H: R; N4 e0 [$ S9 b& ?' L) y/ H s8 s3 s
If lay0.Name = "新建图层" Then
+ b7 J4 z( v+ q+ Zlay0.name代表这处图层的图层名
9 ?$ e( ^( S+ U3 ?2 r5 _
1 S g: H. p* u. H+ S$ jIIf(lay0.LayerOn = True, "打开", "关闭")2 R! ?/ l& r' J) [5 y- n( C
这是一个简单判断语句,语法如下:, r+ K5 u2 o% V; ?" S$ V
iif(判断表达式,返回值1,返回值2)
7 }: K: I F1 |" y' q2 c* K当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2. ], ?# f" }/ D8 H0 M d
+ F/ F$ q5 ]/ F, V7 ~5 R
MsgBox(msgstr, 1)
9 p5 \0 O! W" U1 ~" sMgbox显示一个对话框,第一个参数是对话框显示的内容) d0 i4 `, g/ N5 R; p; k
第二个参数可以控制对话框上的按钮。! J9 U. K' m3 X1 }2 ?/ A
0 只有确认按钮, }- q k8 N6 J
1 确认、取消
' n8 i$ Q$ {0 E1 V' `2 终止、重试、忽略
: G6 Q% @. e; H7 y* Y8 F/ w& z# y% a) l3 是、否、取消& Y1 J6 ^# K9 @4 B
4 是、否
- g9 F4 |4 H4 t2 E9 O) Y3 \- V1 _MsgBox获得值如下:
j! v2 P- x, C3 w8 o确认:1
( Z4 F' I. P0 a6 w6 p9 h3 G取消:2
% R- [1 V F1 n. e) t R终止:36 x( P5 |. c ~8 I' T, q% V
重试:4* L$ ?/ U* |( R" g/ ]
忽略:5* U( m! |, ` K; J8 L
是:6
8 o6 F& r, Q- d% [否7: A N9 ~; R( Z; w
初学者不需要死记硬背,能有所了解就行了
4 K% l- K# u& L: I) r
# `; q0 }1 I$ u- GACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:/ C8 w+ f+ Y0 U$ P
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 7 b, I. n1 B. x* w9 F! B4 |
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |