先简单介绍两条命令:
8 K7 f D6 V# U8 y* b6 Q/ I
" e# x8 k% E" ?) x: O/ w+ d Y1、这条语句可以建立图层:
3 N: W8 y, v) O/ NThisDrawing.Layers.Add("新建图层")
6 O/ h3 _, U% {6 B7 v: l4 D. a在括号中填写图层的名称。$ l7 p, g, j3 @5 P6 u* y5 y
6 J3 x' G1 p2 Q8 R9 F0 X% m) _
2、设置为当前的图层
; n5 t" p9 S: P1 b9 fThisDrawing.ActiveLayer=图层对象; Y* P/ @. o4 |
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
/ [/ m, X5 h( q1 U* e3 V2 y V7 `. P1 `
以下一些属性在图层比较常用:/ p+ ~2 J1 e- j7 B+ s& ?9 b
LayerOn 打开关闭
: W I2 B: p4 u: [( y" nFreeze 冻结
$ Q- n5 B: x2 @* A5 ^1 A' r0 mLock锁定3 q6 C1 W1 u: Q Z8 {
Color 颜色
6 I2 U0 _) K+ xLinetype 线型& g% u( S( a( S( r! t' c
n, f9 Y( H) T5 F
c t2 Z2 G! F- E; S0 A看一个例题:
% c# j) B8 c' f- V% k1、先在已有的图层中寻找一个名为“新建图层”的图层
- }: [6 a- O6 \2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。- E( N; `1 E/ ]. \( G0 v3 { i
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层: f$ P. T4 U! f; X% K* |" B/ ?
0 D# C0 |' J! s MSub mylay()7 J1 K+ d& i4 @& r* Y* Z4 P
8 k/ e( D: Y+ \4 d- x# ^6 w, o( s. IDim lay0 As AcadLayer '定义作为图层的变量; V* w) K" ~+ a" z+ Y5 V
Dim lay1 As AcadLayer) l7 i2 J- M1 Z( j; D' ]
' h4 z1 v8 i; _7 |1 Y3 M/ [# ~/ k
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到6 \8 P! X5 S! w$ v' N
- f' V+ U* m) P/ F; g8 OFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
- w" N& x2 K3 W) w5 M
+ n, m2 p, d6 H- @* X9 W If lay0.Name = "新建图层" Then '如果找到图层名+ j* M& S# C4 {7 k
findlay = 1 '把变量改为1标志着图层已经找到
: ?2 w' { y: \, V1 ]1 W, h msgstr = lay0.Name + "已经存在" + vbCrLf
1 q& J" N! `; s0 i4 d+ o- v msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
7 _3 d/ X' J! w3 y# D k msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf$ M2 {/ l- j& Z: [# z9 k
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf9 U/ C3 _6 @. j* x1 c
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
$ ~& ]: s2 ^' N- o5 w1 V5 H$ @ msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
0 |' n) H4 I% c msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf( A0 p f0 G/ ^2 ] ?
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf5 a K0 Z1 B1 A4 f& f( F
msgstr = msgstr + "是否设置为当前图层?"$ W; V* e! T1 E6 H3 G
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
: _0 x# {: W/ `; |: O If Not lay0.LayerOn Then lay0.LayerOn = True '打开
. \9 D2 q( ~+ \6 b7 J( e6 ~ ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
# K# A: K1 V5 J; ]- X$ V End If; o% x3 `0 q4 z
Exit For '结束寻找
# m, L& p0 ^# ?. F& t$ y! j' H5 n; w1 [ End If
3 w4 U' k U4 n% wNext lay0- M/ C) o5 n% e* r" y I
9 O- Y& p8 q4 a$ \; [, HIf findlay = 0 Then '没有找到图层" Z8 k& V2 x+ M7 M X
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
D. P! M# ]" U3 d+ {9 n) p lay1.Color = 2 '图层设置为黄色
0 e/ I. ]8 M( ?, H! N: f ) [+ c& G1 t. n, I8 G$ q
ltfind = 0 '找到线型的标志,0没有找到,1找到
' D/ H4 V% m, a, ] u; p For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环* \4 `' B0 _: J" F. T z; A
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
9 X' w2 b8 l ]# m F$ ^( Y ltfind = 1 '标志为已找到线型. D3 r: f; E: D0 C3 y9 k: K
Exit For '退出循环8 v8 q5 Z5 Y* L. \+ |
End If
6 B: B8 ^) ~7 J) U: _. b Next entry '结束循环+ d0 H5 R: x* y- z" r3 r
% B% X0 E+ B0 c4 r2 X
If ltfind = 0 Then '没有找到线型8 [$ D0 T( x% E. d6 U8 d
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
9 B. p' M# b9 }5 P- `2 J& ]( Q End If
- C( b+ c5 q v" S0 m7 n# @ lay1.Linetype = "HIDDEN" '设置线型
$ P5 `7 B t( Y
% B8 P; r- t. b; Q) l4 w ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
3 a7 O, ]+ U' `4 jEnd If5 ^% d2 R3 D c+ z; t2 t1 s
- G6 E+ |) S L/ c3 @1 B1 E& KEnd Sub
# |5 D9 o1 X# k& t- r
! M `. s7 ], y在寻找图时时我们用到for each……next 语句
+ B. }9 {( a. \( k% Z# u0 R! @它的语法是这样的:
+ b8 W ^/ K9 h8 `% GFor Each 变量 In 数组或集合对象' b' o8 r) Y/ t: ?% [8 S' g" ?) a
……
5 R* v. h5 T" e! m$ _# oexit for
& U* Y# v% j# Q4 A* T3 R9 E……( }, h( x2 ?4 ^# v* Z! r7 V
next 变量
9 {0 w ? Z/ x/ q它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
" w# ~/ k: a+ @2 O: X* o( o在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。" _; _0 ^) y) }# A8 C- g
2 H3 i: @$ R; x" X0 G+ KIf lay0.Name = "新建图层" Then' G4 C" r* ~, h" u; A
lay0.name代表这处图层的图层名& [' Z- I( C7 W" S7 \1 \# I7 r; j
& b) v& J) a* o0 H2 c6 ~! L
IIf(lay0.LayerOn = True, "打开", "关闭")
$ C1 A# F. `$ [! Z2 o这是一个简单判断语句,语法如下:
" |. U. B; f, `. D! Y4 Piif(判断表达式,返回值1,返回值2)
# h+ i+ g( ]8 c, t当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2/ w8 t& k# z& R# F& J( N
6 L: c; C( L% q5 o' R( t) W u; W' z! M
MsgBox(msgstr, 1) ( v; ?$ }) ~: E- S
Mgbox显示一个对话框,第一个参数是对话框显示的内容
/ w/ I& `" Z! F第二个参数可以控制对话框上的按钮。
/ K6 Y _" F' x* L6 s7 {+ w0 只有确认按钮
1 Z) l" u3 O1 `, M2 n( {6 F1 确认、取消
! I9 l8 O6 B/ [2 终止、重试、忽略7 Q& c) V% `; \9 g9 t. k
3 是、否、取消. @9 q9 @$ [: Z: \7 ?
4 是、否0 f4 l% Q5 s4 L1 R
MsgBox获得值如下:
5 b: R# P" B% q! k- d& p确认:1
7 B! j- a6 w- E5 b1 |取消:2+ \, R. G/ i$ }. g+ _7 y
终止:3
$ X% M6 R9 p1 B i! V重试:44 P" ~- Y$ y2 {$ V
忽略:5
0 ~- B+ _4 Q/ P是:6
& L }# C* e5 |5 w o" g5 s否7
) `5 X3 W: P$ N+ f9 i( `. y初学者不需要死记硬背,能有所了解就行了
4 _3 f4 }- N w0 B- |) O# e. H8 f c
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
4 M# w2 G% |: |! HThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" # C. ^: q3 Y! K: _7 {8 g
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |