先简单介绍两条命令:
7 E2 U8 A. B e% m7 n- P$ Z# j
) Y" I% r' K/ h* C1、这条语句可以建立图层:5 m U0 Z5 N, W2 t$ ?& m( }
ThisDrawing.Layers.Add("新建图层")# j& }' A1 n, L3 B( f+ V
在括号中填写图层的名称。
1 H/ K0 u a3 |! C3 ~2 m& X* t) t8 [5 k) Y; i
2、设置为当前的图层5 N3 i/ [7 z2 K7 q) X7 {
ThisDrawing.ActiveLayer=图层对象
4 {( } s& o5 s, B0 m注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量3 D) B' P& A# D1 Z0 P' D( \0 A
( f$ R) t$ z* h* k Q
以下一些属性在图层比较常用:* n, Q; T4 U2 `4 H$ ~
LayerOn 打开关闭
( _0 e: r3 G' Z- `Freeze 冻结
: W. { a7 n0 N1 W" O0 U9 F8 |Lock锁定
7 S. I! J5 v5 y* S4 N s/ eColor 颜色
: j8 I5 Z. `& o d+ \3 X/ M) ELinetype 线型! S6 j/ W" P2 p' z. W
+ e, M6 I* [ P0 c; ^: {, v" N
5 }1 X3 K. f) j8 a( g
看一个例题:$ [6 M* ?' M% O* ]& R% n* N/ _
1、先在已有的图层中寻找一个名为“新建图层”的图层
8 }6 b) G8 X* f2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。: U6 B9 Y7 [$ L# c
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层3 z% @, K( v' ^0 K' W, c
" R$ a+ Z# Q3 B6 n9 _% V$ S
Sub mylay()+ v/ n, I# u& [% _
4 \$ O. I- A9 Q" t2 c. Q S& G9 a
Dim lay0 As AcadLayer '定义作为图层的变量5 b- h0 [) h y
Dim lay1 As AcadLayer
8 t& ~2 [$ l+ y* H' T3 D
' F! o3 d, h' t# @ q* yfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到/ l8 O& Q2 Q9 ?: g) |
) X/ @, r& H3 u2 p% N3 AFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
' q) h+ b: Q9 p, E% c# F7 L% {& [- d: K/ C" x0 D- H' v! L$ F
If lay0.Name = "新建图层" Then '如果找到图层名
, |* P# H. h& B0 N' j findlay = 1 '把变量改为1标志着图层已经找到2 j3 _6 I5 q& d: s
msgstr = lay0.Name + "已经存在" + vbCrLf8 [$ n8 R, A* E* {5 i" h
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf: p7 `2 |6 F+ _! W
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
# [; @* ~( W' R }8 c msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf3 O3 V5 G7 d. w' S! U; H4 ~( H
msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf; y1 W+ d; Z, J
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf' a _% |# S+ e/ ?0 e. T' I
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf0 O. \9 _1 T$ d& o. u
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
. w) o' O5 f! p# d msgstr = msgstr + "是否设置为当前图层?"
5 z; F8 t+ Q- r4 Q0 P1 B If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定, W( A0 K: y8 e% Q4 P) H
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
Q1 H" H& G' j ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
; M2 ?2 E& _; v6 ] Y4 \ End If" [* ~ J( ]" J" \6 k% t
Exit For '结束寻找1 d9 n) N2 ^2 H. m$ r
End If
; Z. U6 x7 ~1 WNext lay0
% A. m3 d7 s; v8 t! O
9 T( o0 B# A1 s5 hIf findlay = 0 Then '没有找到图层5 {8 x4 j( F1 B( g2 {! f: C/ h; p! V
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层, e9 x: Q1 r+ P+ {7 V3 [- z
lay1.Color = 2 '图层设置为黄色6 {$ B+ I k+ D' k7 n4 S+ p
; U2 Y+ S6 a3 v; g
ltfind = 0 '找到线型的标志,0没有找到,1找到9 i+ p8 K% G* s; {. B
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
7 i: [% z: d% C! V$ m2 b If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"- c5 X8 w& ~. O- f E( o
ltfind = 1 '标志为已找到线型
" m, m6 |* t5 D! w4 p R Exit For '退出循环/ N( \; [ l- L0 S" L
End If7 ?' d, `5 x; ]. f: `% T' w2 E
Next entry '结束循环
6 k# f0 i7 G) D$ ^( w: P* {$ Y: p+ u ]: W; ?, K# _
If ltfind = 0 Then '没有找到线型) D) f7 @% W8 V/ i4 S- n! Z* @7 B
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型$ f& {3 z2 V: u) M8 l
End If
' W- V4 Y! l( q1 D5 B5 o9 D lay1.Linetype = "HIDDEN" '设置线型% h# P: O3 J9 o6 r B) E1 ]
% b7 I4 L" U [" K, ~
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层! u3 A a& S- n8 k/ H6 Y
End If. K" n* k; i7 U6 M/ w" e
; k8 a+ a( Z& z5 [/ P8 v
End Sub. @. _" H# d% ^. G _& j D! r
3 `2 V# l5 R: B2 n. I3 S3 W% G; ]
在寻找图时时我们用到for each……next 语句
/ H2 I1 z- r$ \它的语法是这样的:
4 l1 H6 I9 X' k G2 _% SFor Each 变量 In 数组或集合对象% s, R4 D c4 k# M, R ]
……
4 ^5 W& X. x- |/ Z9 Cexit for
$ x; e/ N( @. L) S……
- L% E# D4 K) N1 I! B; o$ onext 变量
. b- S. x# v1 y9 l% T它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层/ Y* X. c- ?+ H% ] G
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
3 P; w( b" t" a5 k
" X; Z+ Q8 z9 V0 y) j/ dIf lay0.Name = "新建图层" Then+ F# |# J y6 Q
lay0.name代表这处图层的图层名# h! e, `9 f E' p( z1 `! ^
& e" J+ b+ M' r" h, H* l
IIf(lay0.LayerOn = True, "打开", "关闭")
B0 ]# h. L' Q }6 k t5 i这是一个简单判断语句,语法如下:# k6 D. j8 k- e& q* A; T1 F
iif(判断表达式,返回值1,返回值2)7 V, \( I' O4 M. c( L* R
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=22 a' z; _( ~( L$ M3 u& s9 B& {: R
" {9 \0 e: N/ M# i6 b# J+ N' kMsgBox(msgstr, 1)
; {! k7 A3 g% J! N' `" LMgbox显示一个对话框,第一个参数是对话框显示的内容* @, N$ Y3 A0 [5 G
第二个参数可以控制对话框上的按钮。) [7 @0 V9 r- N
0 只有确认按钮/ Z" J1 C9 [2 ]2 k' o, O4 Y0 ?
1 确认、取消
" r, Q! H. x! n7 r) N2 终止、重试、忽略
6 Z9 A; p8 _6 D+ d0 R) Y& t3 是、否、取消5 z8 M* }3 ~* h
4 是、否* u! @, Q% ?* F9 B' n
MsgBox获得值如下:
* J1 e8 E: Q5 T9 N: t确认:1
, G K1 |" c, t6 \) r9 i3 U; d取消:2. T- n, O U: x9 v; Z' }
终止:3% s ^( T: _+ ^
重试:4* F& w `3 k H# d7 Z# `- Y/ O3 K
忽略:5
3 n$ V9 U, z* f7 K是:6" R% q- T$ f1 a6 c, U
否7
3 P: u) N. u" N- l$ q初学者不需要死记硬背,能有所了解就行了% ^4 ^1 }/ r, g* f* i" Y2 `
8 u; ?) N5 w" g- @' h8 A
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
- E4 [* d* Q A, W) KThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
4 b3 R) v- l# H3 EThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |