先简单介绍两条命令:
, C+ _# V( E3 J! V/ n7 P+ ~2 O- N* W6 S4 F9 u2 G
1、这条语句可以建立图层:) w% g: t. x4 J- _
ThisDrawing.Layers.Add("新建图层")
/ n- L6 K9 z) C2 Q% a+ N, \. e7 a在括号中填写图层的名称。
) I& R( v* g' G& `# R: D
9 Q0 Y+ u/ _7 f: k7 M4 R, D8 J6 b2、设置为当前的图层8 V; U8 w; u7 J: d
ThisDrawing.ActiveLayer=图层对象
: k& ~# V* @3 X0 o" l注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
4 r' y Z/ B' M; N* A% H% a% Y' n* `: K. R* Z/ s+ O% f. [
以下一些属性在图层比较常用:
0 T9 \& j7 }3 W$ h! f; P8 ?LayerOn 打开关闭
6 ^5 x" ]( Z1 p$ L# u/ xFreeze 冻结
) w; \6 i. U, K1 jLock锁定* c2 D; e" Q# q& ?6 X8 j, W
Color 颜色
/ H1 f2 u$ U- `; f# bLinetype 线型
9 }9 t$ [# y( @- }% K u9 ?/ l8 T+ Q
; {3 w6 e- O' m a5 o. }. R
看一个例题:
$ L0 v9 r3 Q/ R5 o3 O1、先在已有的图层中寻找一个名为“新建图层”的图层
4 s M% T+ G1 n/ B' l( \2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。' z8 b3 H8 G: t( L7 O- J( L
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层" I0 }8 [3 \# _: q& K- z
# v n, y- y" @' w4 w# A7 s
Sub mylay()
8 n! [6 H( }5 w' A& G3 s( F9 i: B% Q. S6 |$ w. a/ }
Dim lay0 As AcadLayer '定义作为图层的变量
4 p+ B5 K; D9 S3 nDim lay1 As AcadLayer# P Q- {- o% X" z5 Y& M
) C7 Z2 O0 f9 @' A* ~findlay = 0 '寻找图层的结果的变量,0没有找到,1找到% B6 ~ D8 z: U `9 F: \
+ \ L: Q# f0 i: M# \
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
5 r( }% b1 ^: @7 V4 U$ d; D( Q! U* f
/ X$ I& Z' U+ o; D: C2 y5 ~3 H If lay0.Name = "新建图层" Then '如果找到图层名
: I8 f* e1 J" X findlay = 1 '把变量改为1标志着图层已经找到! \# h7 |0 f, ^. j6 i j
msgstr = lay0.Name + "已经存在" + vbCrLf' D: B6 S8 v2 C" J
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf. Z F/ D& t8 l
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
, m' M# w# x) T E" y, ]( i8 |9 p4 T+ t msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
# x$ s: Y& D" w7 ]7 K% U msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf9 O- X3 N3 A9 U/ T
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf. N/ j; t; H* w
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
# z7 |7 h5 U; D8 O" ?; y msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf; r- R( Z5 j9 \
msgstr = msgstr + "是否设置为当前图层?"
1 ^5 V( @9 G3 e" C If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定! l( `! K/ @9 y6 U+ @7 W
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
. [! ]0 K, U- l3 N' D ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
; w) {+ G/ v1 t) Y u End If
( g( `1 a+ X% O' Z* l- G8 m* f Exit For '结束寻找
! n9 t1 J, H! p+ i& X Z End If
6 W: }& ?, Q0 N0 @! s! PNext lay0# B9 z$ w, c0 {
5 y' D3 \ n3 W! U5 N$ \, I+ \
If findlay = 0 Then '没有找到图层
/ Y8 O' n! T$ G' {# D Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层0 s$ S0 P: I) r( f7 |& }
lay1.Color = 2 '图层设置为黄色, P; N1 k+ C: ^- b( e
+ G( I# h" V8 {0 a3 a
ltfind = 0 '找到线型的标志,0没有找到,1找到0 F! r- a1 r* D' C
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环, Z3 _3 g. v7 P, g, X8 r
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
" M) X; Q0 o1 m ltfind = 1 '标志为已找到线型
0 p- M0 L2 O- }1 e* l( y% { Exit For '退出循环 d7 }$ ^ s* ]; {0 r
End If
* [/ [- K2 v- w Next entry '结束循环( z2 j. O8 z% O3 X& t7 Z
v' T0 f: r' n/ Q- m1 {4 ]' j0 A If ltfind = 0 Then '没有找到线型, {: W5 d5 B" t, s$ N. [9 L
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型6 J5 y# r0 U0 Y
End If% ]5 k7 b* U& k* u
lay1.Linetype = "HIDDEN" '设置线型
% f/ R$ D& V. v! r: n6 |8 M( ]7 k7 J: n2 ] o
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
$ J5 ~, r+ x8 kEnd If% a: V i3 Y/ I8 ~; D L
: V1 `( J) t' |2 q0 Y! N( c- cEnd Sub
4 U @" ]! |3 W# s
* c1 {+ J* {* j) t7 H在寻找图时时我们用到for each……next 语句0 p! [ O6 t, Y. T [
它的语法是这样的:
5 ?; t. i$ W+ Z' a% \% M, j( eFor Each 变量 In 数组或集合对象
) p' p7 E3 e# f8 \……/ k1 G% i1 K! X
exit for 8 _2 R- M5 V' c( O, z1 L5 ], a
……
; d* E" l& G: @ Vnext 变量2 _& k; Z3 ] A: e# N* F
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层4 I; n& @7 J% y, t3 @: I
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
: W3 \4 X" K) h l- h- O5 a/ G7 W3 ]" r% o2 |- G- k
If lay0.Name = "新建图层" Then
" u( a* \ v% d6 w7 L" zlay0.name代表这处图层的图层名
1 @4 F) |1 _- `* W V
( A8 w$ u0 ]' z" ^. DIIf(lay0.LayerOn = True, "打开", "关闭")
: _. a' S+ h: E$ S这是一个简单判断语句,语法如下:
+ B" N5 G0 a$ C8 H$ giif(判断表达式,返回值1,返回值2)4 W' I# n9 C% f) C: E+ G6 O
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2) N3 t D7 n1 Y8 D8 k0 ?! p
7 o& e6 P) o4 e; |* r, d8 \MsgBox(msgstr, 1) " k. g9 z/ B$ R, K7 Y; d
Mgbox显示一个对话框,第一个参数是对话框显示的内容
( G4 Q% _2 q8 F2 D第二个参数可以控制对话框上的按钮。7 p0 ]' B9 P6 t; Z
0 只有确认按钮
7 Y ~9 g, ^8 [4 J5 A1 {; ^9 h& X$ X1 确认、取消
7 O- @1 k# v% n2 终止、重试、忽略& _. g! C! i, i. j2 b3 l' |7 k: r0 Y
3 是、否、取消0 f9 e, P R" ^: A
4 是、否' |4 }# _6 `6 @) f7 d1 F
MsgBox获得值如下:3 r2 ?% B) M" o. C
确认:1
" P# ^& n& T" G) A) X B取消:2
7 |' v; y& ?6 n D( U终止:34 a7 Q1 S0 h! N4 Y+ L1 n
重试:4
6 ~ C% _1 d7 M g1 o, F ?忽略:5, ?% G7 g/ S9 |8 h+ V! }
是:6
6 i: d0 I6 q+ f, }否78 ~4 G& _; ?2 w6 D; a
初学者不需要死记硬背,能有所了解就行了5 x. q6 U8 h- ]4 f S, o
8 P" S1 Y5 x3 e+ \. M$ cACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
' I3 D3 w9 @. i& k4 \; v/ Y; z( [ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" ! F+ y) G& n& |' e" }" Q2 O8 o
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |