先简单介绍两条命令:
2 @% k8 \# q- X/ t5 \& G2 t8 L* b' n; f5 e3 T; v9 J; d
1、这条语句可以建立图层:
t# y: P& @; ^5 e+ }: XThisDrawing.Layers.Add("新建图层")
* a( L+ P. Z, ^" y在括号中填写图层的名称。. F7 \0 ~ t4 Q6 P
/ V# Y) o# L' i$ @$ u6 ^$ Y
2、设置为当前的图层* q9 Q: J) W, k5 D% ]' F8 {. U
ThisDrawing.ActiveLayer=图层对象
; H( h4 e' l! L) t注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量0 L, C7 Q! w* v5 `3 p0 U
8 b0 R. O4 v9 f- m8 I4 G2 c/ C+ _
以下一些属性在图层比较常用:: c$ M4 F# I" h5 w1 _8 B; i
LayerOn 打开关闭' Y4 J; u, k* X5 M
Freeze 冻结
- D! l' ~: H) |' ^Lock锁定: D9 Y0 H$ s, A! g3 n- s
Color 颜色) k4 a- j4 p; E% K, {& o* N& R
Linetype 线型$ {) q. E0 `, @ x" B3 I* r3 w
) @% i8 S) e% k/ {, U: `. S+ k
- m/ t4 v/ a7 B* X5 b$ w4 ?2 s看一个例题:
; p5 t$ U: O/ y$ i' ^* \1、先在已有的图层中寻找一个名为“新建图层”的图层" m# S3 @0 @% o
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
* r: D9 Q u" k% ]6 I3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层* i% [. b* U% h9 e% H
6 }+ Z! B, Z# b* m* J
Sub mylay()
& U4 z9 i' D6 w }( ?% t8 k' T# y/ ~# E3 Z4 l9 E
Dim lay0 As AcadLayer '定义作为图层的变量
% a+ q1 Q9 Z1 o7 q: r" sDim lay1 As AcadLayer& d: n7 ^( ]8 ]$ u x2 J; e/ W5 F
- J& y, {4 r1 X, J5 x6 S. d0 i
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到' |4 Q; D q- o j& z
% q, F) |% T5 s8 n: t5 sFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环. ?$ |$ i2 V( D+ M- D
! y) ^5 y; Q2 v |/ h, u- r! M. B- g5 g* k
If lay0.Name = "新建图层" Then '如果找到图层名 g+ P1 w: ?+ w$ k- E. G! o' W
findlay = 1 '把变量改为1标志着图层已经找到% F# S4 R3 P( p( C8 q
msgstr = lay0.Name + "已经存在" + vbCrLf
+ s) F+ q( W7 E7 e A msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf+ @, y+ z3 w# i! m2 [7 K
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf9 i3 ^2 t9 P F/ l
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf3 R" L1 l& ?3 g% {+ g; O
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
! X% g4 r8 A3 |' c# A msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
$ D8 S4 V4 N J1 U, n+ W msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
2 H" d4 k. F) d6 T, c4 ]# x4 f; H msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
4 n0 I2 X8 r: [ msgstr = msgstr + "是否设置为当前图层?"
- C# g* L6 L/ W7 t: w+ t" x1 }( k If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
" c4 w6 y( g6 z5 k" n, z' y$ u If Not lay0.LayerOn Then lay0.LayerOn = True '打开1 R6 n, C2 \- L+ W7 w% I
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
! H, b* a" X* D; c' A" | End If3 F. G* L" E8 O; ]7 A, H& |+ I
Exit For '结束寻找8 j: b* m% }) \% s4 o( t' I. G
End If
6 c) c+ i2 a* x* ?Next lay0, e3 p* F4 l/ B
, h: E2 Y# g9 h$ J4 C, m
If findlay = 0 Then '没有找到图层4 T, c$ Y8 n% t% n9 K8 s; V
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层. ~$ C5 C. y% N/ F, i5 P
lay1.Color = 2 '图层设置为黄色
& Z' F( q6 [' d! A2 w/ [ ( h& x6 e, R$ C/ G7 H
ltfind = 0 '找到线型的标志,0没有找到,1找到
% D5 x- e# b% A( \ For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环2 W2 e5 h/ e* R2 s: n4 S
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN", W" U. q* @1 @& @" E9 K
ltfind = 1 '标志为已找到线型
5 T! Q- [/ h% e: c Exit For '退出循环4 J& U+ Z6 [/ O2 J- j$ {
End If! [( d r1 x. T7 v# `
Next entry '结束循环
9 x3 `" P. p* d+ [ p d! w: z! t6 c3 w( b- v) m
If ltfind = 0 Then '没有找到线型; e- O1 X% D$ E* u
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
6 ]3 L' @+ s: _- s. O End If
2 H! X+ t. M) ^# h% ^2 V- k1 p( Z lay1.Linetype = "HIDDEN" '设置线型
; v7 P1 m( @9 x' C) w% O8 t" H+ H( ^$ k
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
3 R' ~: ]7 Q) N- j+ V9 S0 a7 _End If' c1 ^6 q- h+ O( m
4 G4 T# q7 Y! nEnd Sub) n; s7 N# g$ B( H5 F" E' {' Q I( u
6 w; m' z8 C0 O' T' W H( W! E% ]在寻找图时时我们用到for each……next 语句- f$ {) H+ B4 |& O7 j) S) U
它的语法是这样的:
6 Y. H/ @! H+ \8 c) OFor Each 变量 In 数组或集合对象
" a, J- P/ k! ~, l……2 Z9 G7 o8 g$ T; G% i
exit for ; w2 Z9 b, f8 X4 A+ [
……% K! ]! u# T# S/ y9 ?
next 变量& L9 [' c0 t. x
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
) l; [$ ~0 @# b( E c& i& ]在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
; o+ j1 k5 D, T
$ `' k; D7 y/ i# C. d8 W9 a; PIf lay0.Name = "新建图层" Then' G0 ~0 ~# i4 k. P4 I7 Q; w6 w( \
lay0.name代表这处图层的图层名2 N/ K% ]% F& \* S, _$ x
/ d9 e1 {2 r9 {% y% T4 CIIf(lay0.LayerOn = True, "打开", "关闭")/ ]( \: ~. x- U6 k+ G$ `& ]
这是一个简单判断语句,语法如下:7 ~: W( F& L* I
iif(判断表达式,返回值1,返回值2)
8 k$ r7 H! }0 @, H5 o ]' W当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
& N1 g$ Q3 f D8 o* e- h. K2 E* n1 k& y7 b2 f! K. R
MsgBox(msgstr, 1) 1 ^4 H2 c; W: q* a+ V9 w! i
Mgbox显示一个对话框,第一个参数是对话框显示的内容
- E- c+ k/ n9 `# P第二个参数可以控制对话框上的按钮。
( Q+ E) k/ ]$ ?5 e( M3 N I0 只有确认按钮1 D' ?4 H( k- \/ v* O
1 确认、取消
: ?% Z; x" i" u5 T' x2 终止、重试、忽略! N* r) h/ o- Q5 l3 p5 n
3 是、否、取消# G5 ^( x5 m x
4 是、否
2 ^1 b( }% w/ N1 E# \MsgBox获得值如下:
" v f% H% L6 f5 \/ }确认:1
1 G' D2 a0 B% k* R" T F取消:2
& U; n M1 }9 O" q终止:3% i9 M# y" Z# t% t7 m% U+ |
重试:4
: \" j( j# e0 g7 S忽略:5: O2 L9 G3 R) a1 x: y7 d! a9 F
是:6' K; q9 C$ \! `/ ^9 I; ^! d9 ^
否7 ~/ h2 Y, {! C5 ] j8 e# X% _
初学者不需要死记硬背,能有所了解就行了
& r, e( p+ g, J# `. f2 N" @# p
# q, p0 _ f% E/ d$ jACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
# g" E$ y* [5 t" {ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
/ c( a7 g2 t) q8 k1 q' WThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |