先简单介绍两条命令:8 j! J% G3 G! X4 W0 J2 b
3 x5 b8 ^ ?; J/ ?3 J4 K+ d
1、这条语句可以建立图层:
, a/ j0 j2 @5 B( kThisDrawing.Layers.Add("新建图层")2 t( O# n& l$ T! D+ N) V
在括号中填写图层的名称。 O6 T* n* \6 t
9 ]& |/ u4 R! f7 Z
2、设置为当前的图层
2 h- \6 j. Q" ^% G/ p3 D# Z# VThisDrawing.ActiveLayer=图层对象" ?: _' S7 \4 X9 v) I
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
0 Y# }& ^9 L7 ~; ^- @8 Q* G) W) }4 N0 s: W& u6 W- f$ s
以下一些属性在图层比较常用:
( s4 N! Z4 [; w4 qLayerOn 打开关闭
" |) T) Z/ o$ w5 \, t4 mFreeze 冻结3 {8 P4 k$ K9 E3 O- T3 M: u
Lock锁定8 E- [% }; a& D: Y! `- ^( L/ @
Color 颜色
; ~- V }. m$ g" [/ t, bLinetype 线型
6 Z" y8 H2 _7 }( ~& f8 w5 v) K. P% e% M7 _: P
! i% M8 J# T9 O$ J+ R' e. U. A- q- ^
看一个例题:1 k3 y* i) i+ A. R6 D, h$ g8 _
1、先在已有的图层中寻找一个名为“新建图层”的图层3 K( s- a1 r3 ?9 x; _4 s
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。- q/ Z1 w& Y+ n
3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层0 ]3 p" e, \0 K
& B% m u8 S7 |$ Q( Y0 N# G2 j) f/ ]' J
Sub mylay()" y$ u3 S3 h$ V! x, ?0 J5 x
, u! q: J7 M* ?
Dim lay0 As AcadLayer '定义作为图层的变量- ?( C4 t' ?3 F2 G# i
Dim lay1 As AcadLayer0 y0 z7 f! l1 g& B5 }( J, u1 \: Y
" X5 S: H+ ~: t! o
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到
3 u3 A# M8 V! w* x4 q5 w! [2 x1 d/ k4 u/ N4 @
For Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
/ U C& l+ X2 Y2 _6 X, f s; h. ^/ Y& x3 k: ~: n
If lay0.Name = "新建图层" Then '如果找到图层名
) Y8 X' o. u a" t8 ]7 P, ]3 H) M findlay = 1 '把变量改为1标志着图层已经找到. v( A: j9 j) F2 J% i
msgstr = lay0.Name + "已经存在" + vbCrLf
* w* a1 c) ~0 N, E2 u msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf( r' p: Y) l$ _6 ~; [
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf
- k/ V3 E* W( C4 A# R msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
6 O6 |4 g8 Y+ \* E g msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
$ _9 r- v) \" F4 n& ^9 W% K msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf# G n9 `/ Q" G" \( T/ l0 H
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
0 N2 Z% M' f* {* Y msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
) R0 F6 h& S5 Q msgstr = msgstr + "是否设置为当前图层?"
8 X/ d6 ?8 b% K/ M- S If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
I) g# }/ H% d' G( ?: }9 ~, E If Not lay0.LayerOn Then lay0.LayerOn = True '打开3 p$ d- |' x: \/ u, m0 p2 [9 T
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层- f) z' A; [( N/ E
End If1 r, p) Y7 d" p6 M- p
Exit For '结束寻找
: \# X+ |! [5 V$ }# U End If
; Z3 t. F4 n. p3 xNext lay0
; G# N' C. V$ u) r* P+ _1 Q1 f- y; w9 D R( e3 h
If findlay = 0 Then '没有找到图层
1 E1 R6 J/ b( R' o9 E6 n, J Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层4 G0 t- z+ L0 Z% X9 N
lay1.Color = 2 '图层设置为黄色* @) l7 `- m. p; f6 q/ L: N) o
( G1 `2 M# S( F" x# B ltfind = 0 '找到线型的标志,0没有找到,1找到
3 P$ ]* O" V' T5 z" _- Z For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环2 t) @# y' b( Z$ G R
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"+ H! V3 b. R' y4 s
ltfind = 1 '标志为已找到线型
2 j9 I7 K3 y( S$ f- ] Exit For '退出循环- X+ C" e" K$ ?8 b
End If# M# V1 R) ^# v+ o9 ?6 y
Next entry '结束循环$ X$ L# r+ N) U! o: b" Y0 i
4 s$ X4 \8 y# {) h) m! s If ltfind = 0 Then '没有找到线型
5 `3 k9 d% `# v ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
, ~6 ^6 v; z2 n( w End If) `2 v8 u K e7 O
lay1.Linetype = "HIDDEN" '设置线型: v5 h. m( v) T) E
8 b! D! L5 S$ z9 V1 d& |+ p N
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层$ X9 t; U/ Y5 t+ u! B2 u% j# @) g; [
End If0 p: s8 D2 s" t+ {( Y$ W# q: [
* e" S ^0 R1 Y, CEnd Sub
! j7 v; g4 h9 J8 D; N0 x& v1 {4 X# c5 ?- ?& W3 }
在寻找图时时我们用到for each……next 语句! s. |$ E5 c4 @
它的语法是这样的:' Z& @9 K9 w9 z- ^2 |8 ]8 x& ~
For Each 变量 In 数组或集合对象
! C% X2 G, ^+ N6 g2 i% i……
9 v& ~, \) l0 ]8 ^: cexit for ) x( w/ U$ _9 n
……
: O2 v8 V! H; N) C/ }8 u- O3 ynext 变量, G3 g2 k5 C' }: l( h3 ?8 v
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层" U& A1 T& r! A
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。2 Y$ o2 @+ d$ ~7 d6 {9 C& z8 b
6 J: G# y. l+ HIf lay0.Name = "新建图层" Then/ w, ] M7 V2 v. g7 K/ u! Y
lay0.name代表这处图层的图层名
7 `' d+ S5 d9 ~: e/ F; z) @) q) r$ G- k' P1 c
IIf(lay0.LayerOn = True, "打开", "关闭")& Y' I" R+ C6 N+ L5 m
这是一个简单判断语句,语法如下:
, R, [6 F" t% H, z, Aiif(判断表达式,返回值1,返回值2)
4 P. A% P4 D8 T5 C当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
3 j; v5 L! v2 g2 a
p: r4 Z, T/ N2 \4 C$ `MsgBox(msgstr, 1)
8 R' w0 Q# Y9 @: B3 S1 T# iMgbox显示一个对话框,第一个参数是对话框显示的内容' C5 I( g* \3 q3 ?9 h" E* J
第二个参数可以控制对话框上的按钮。
: R7 s* j: x. S" n4 b- d0 只有确认按钮
& J+ r$ N7 ]- h3 d4 Z( s; S- ?1 确认、取消
0 {% _' n% M8 r$ t, n2 终止、重试、忽略5 d7 @9 M# r8 e- _' M
3 是、否、取消8 X, F4 t. X! N4 j3 v
4 是、否" E5 M+ N+ ?1 J( t1 i% a6 E
MsgBox获得值如下:
# d j2 R, R- }3 R5 r. g$ q: c确认:14 \! y2 J$ ^) H
取消:2
2 q" ~" S5 J/ ?: u1 v: U终止:34 O% I; Y& D5 Z6 H0 n# k& J
重试:4
% [- H% \# |2 ?" [( N忽略:5
- Z4 Q0 x2 }$ e2 j8 \: U/ H是:6
3 U4 z/ ]4 _3 B& {3 k! \否79 s; m2 ]3 A$ A2 F6 V$ t
初学者不需要死记硬背,能有所了解就行了
, B$ r' C1 z) d0 F6 Y7 D4 f0 Z, k( |" }9 X
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:
% f5 ]4 T7 B3 Z- `/ dThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" / e/ U1 J' r# Z
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |