先简单介绍两条命令:
) x0 u, e5 N8 M3 H _$ m+ N
/ {) X! m$ o0 m+ m k# ^1、这条语句可以建立图层:
+ U% g2 E0 F- l& s8 x1 fThisDrawing.Layers.Add("新建图层")) r( v; n6 K& d# y( b
在括号中填写图层的名称。& D3 e: c6 K% t1 k( o; U
7 }6 m7 K9 \9 o; t5 F1 y2、设置为当前的图层
& x2 F! b B: L+ PThisDrawing.ActiveLayer=图层对象- {! \+ R) I: a
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量0 Y! U" H/ |1 n* Q/ M
1 L2 k# b" p1 \, s4 x; F
以下一些属性在图层比较常用:+ I C6 `4 @# B1 u" R
LayerOn 打开关闭
7 v, {* a6 l7 g4 D( e( pFreeze 冻结
! h1 {) K$ @% {: pLock锁定
) L: v8 Y) _% [7 Z0 Z% wColor 颜色
0 E/ A# |' |7 _) gLinetype 线型
, V1 T2 Y ~3 v: G" M1 m( a" p% P6 I: n% t1 R# ?
2 z- j0 L% k, a O' \* Z
看一个例题:
9 R ?4 _% }: u+ O$ v' X% k, b- c1、先在已有的图层中寻找一个名为“新建图层”的图层
& Q4 `% n* X. Z L# g& V4 | x2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。; G2 B/ [1 H( m5 S
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层+ O8 g+ s. _5 I7 ]; l( a6 K
/ }3 g5 ?' {' a7 s! T
Sub mylay()
- g! \! E7 P& i4 ~- P" ~! k1 E2 j* a0 |: q2 X- c
Dim lay0 As AcadLayer '定义作为图层的变量, U3 d, l. O3 O! a! _* N, q$ ]
Dim lay1 As AcadLayer2 }* Y+ n0 O& h0 `# x
6 `, b G; K% j3 l& Y
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到& G7 C& z0 V! J8 `
2 X3 F {! G' L' K; } O4 Q
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环& G/ |" _# V7 @ h& }
( ?$ C& A9 U$ e8 \* |2 Y3 R* o1 u
If lay0.Name = "新建图层" Then '如果找到图层名
! |# |& G# q5 R2 s* R# ~ findlay = 1 '把变量改为1标志着图层已经找到2 V9 X0 m4 z0 S r. o, J% m
msgstr = lay0.Name + "已经存在" + vbCrLf5 ]9 k9 J! D- E/ J2 M
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf- H ^: K4 _8 v
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf# m5 c/ C7 r( q6 o& a+ U) Y3 w
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf, m& b; n! V8 g; D, y/ C! n+ U
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf9 p7 y6 b# H5 Y% \" s3 B- t# u
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf z+ p$ {4 f- u" u7 c7 n
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
& o. s4 V% q5 b3 o4 u9 @7 Y1 j msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf: M$ M; a; W" e% G2 v- ~
msgstr = msgstr + "是否设置为当前图层?"
# ~5 L0 U( X0 { If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
8 N M4 n2 A9 L2 k+ J If Not lay0.LayerOn Then lay0.LayerOn = True '打开, y8 Q% g4 J9 k: b& Y" M
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
% j4 ]( [3 X3 g* Q/ Z End If
" J! P8 l2 _- }& k0 ^ Exit For '结束寻找
# E' K9 m- `4 [( Q5 Q m$ N% n U End If6 Y- ^+ @' H, v) ^. m
Next lay0! q2 S6 t" r: m2 ]" N
, X; O/ t5 e! {0 p0 h# S8 E) t1 p+ r cIf findlay = 0 Then '没有找到图层% ^. o- Z8 J+ A4 E4 V
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层1 Y& K, Q$ D1 z6 V
lay1.Color = 2 '图层设置为黄色8 G1 @7 h# x/ J
+ W$ e! c1 V- X0 L$ w1 X ltfind = 0 '找到线型的标志,0没有找到,1找到
/ U7 F& s: w/ W: i6 B& b6 S8 K1 ] For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环& a& J: E0 @: P1 F0 [, i5 i
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN") A, ]7 f, V0 p) u$ A: R1 W# u
ltfind = 1 '标志为已找到线型
& ?$ r: T3 t5 z- J# [$ a/ ~, J! c Exit For '退出循环
* [3 V: b2 l+ {; r+ {) y End If
1 \( U( B, d# D4 y: n9 @2 E X Next entry '结束循环' k$ B- g! f9 `. Y% `- w
* D2 Q2 W5 a; g$ S/ k
If ltfind = 0 Then '没有找到线型
! _( F5 \3 |: p$ w ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型& {+ N6 y( D) S! }) Y
End If/ h' |; P) p Y; a2 k8 K5 h
lay1.Linetype = "HIDDEN" '设置线型, w1 B% D- @; R8 _8 p
9 R( o, a4 e! y! e% d$ C+ }. N8 e b
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层# ?, Y4 y6 \- |
End If
( F+ q$ V' J* n- m7 K4 N: N! R* |/ B
End Sub& q& ?# _0 n" ^! k# \4 p% K
0 T8 v* \& H f9 @( s/ C9 ^* B$ a在寻找图时时我们用到for each……next 语句
/ L9 k1 b- v' a' L# g它的语法是这样的:6 P. Z! Y0 b: p ^% h
For Each 变量 In 数组或集合对象; o+ n: w8 i1 C& Q7 T9 e: J
……/ x# Z' I, [7 @- G9 S- C
exit for
( _; x# N p2 M+ j……! T9 f3 O0 h* q! M5 p; _2 |
next 变量
8 H- K9 \" G1 z5 d P它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层0 y. O! K* I4 U+ Q9 t5 ~. S
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。9 V& j2 t+ ?1 R$ @, W7 T4 r" g
9 {! z4 L; H; s) _; f
If lay0.Name = "新建图层" Then
# m4 W# n4 n) K+ H/ V l: \lay0.name代表这处图层的图层名+ ?' C( [; a: E
; r: B+ y( \! s t# X, PIIf(lay0.LayerOn = True, "打开", "关闭")
6 J2 u9 B& j' U+ | ] _这是一个简单判断语句,语法如下:
6 i" r1 \ i4 s2 T3 liif(判断表达式,返回值1,返回值2)% q$ W- e* s0 g! r& D
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
7 R/ y) n% [7 e9 P: }: s: F: v
+ C$ H' u1 H7 u& G/ @MsgBox(msgstr, 1) 7 ~1 P% y3 y+ ?* \, W% f7 B2 P
Mgbox显示一个对话框,第一个参数是对话框显示的内容
% m' l4 i4 Z; [$ i; \3 A第二个参数可以控制对话框上的按钮。
' Q: r; k Y( h0 只有确认按钮
: q" A- \' h7 R1 确认、取消' Y& k$ V3 B/ G
2 终止、重试、忽略
% D- A) M! ~* A" P. m7 S! s. }, I3 是、否、取消( x: Y: c! y/ X! p7 `: Q& c# q0 A" @3 d" Q
4 是、否
+ d& @5 o: G5 l2 @* c0 ^ nMsgBox获得值如下:
* C3 [, [& l s确认:1
* z9 E7 w! b$ c9 j& e; m# O* n取消:2
- j' _% l: n0 N$ j8 Q$ ]终止:3
: w7 _5 R; K2 J5 h! z3 d G5 p重试:4
: r. z5 @1 U9 B$ q忽略:5
9 b7 q$ Y5 w3 [, F/ R8 l是:6
: V* Q7 W* m m/ H: _否7
2 f4 R8 d4 X* A+ l. Z& v) f0 f3 U初学者不需要死记硬背,能有所了解就行了
h8 r5 e* l! M5 q+ q7 s- ^
3 }0 n9 k, Z; E V7 KACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
_! u0 ^# a0 r( ^ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
- E7 o: F7 G- F8 _ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |