先简单介绍两条命令:
) B+ I. m( ~2 o9 c# p# I( E' V' m: @4 @; h# x$ c O
1、这条语句可以建立图层:8 @0 r4 ~+ M$ p9 X' w0 X1 F1 o( p+ q
ThisDrawing.Layers.Add("新建图层")! r |( c; o( _7 e* v
在括号中填写图层的名称。
: {* d7 o5 c5 }% q' J
7 N, ]/ C$ o* D- e2、设置为当前的图层* k' _; a5 U' A& E( u n) X
ThisDrawing.ActiveLayer=图层对象* S; B) e2 A' f' e
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
& o" Z* g& }. h# b
( m' u* h( ~/ a ~以下一些属性在图层比较常用:4 q8 o8 T" X3 f' ], U/ Q
LayerOn 打开关闭
, B# t. Y* v. W" `- z4 A; ?; B: F/ YFreeze 冻结
! _' k5 [5 p1 @" E: Z3 _0 DLock锁定
8 O# L1 {2 J2 y k5 Z O* o+ I EColor 颜色
0 |" n0 Z- _# s( _Linetype 线型' X4 R6 e6 U* v* j5 z0 m4 G
7 @2 H0 @5 V' I q& f( U% Z. s
9 U; o8 v0 A. E. M3 Z8 t看一个例题:
+ s$ Y4 `+ W" K( y1 J1、先在已有的图层中寻找一个名为“新建图层”的图层
; S( g$ w' r4 p& W/ I/ ]2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
) u/ Y4 V, l& ~5 F# A3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
4 S/ c: V/ `3 R
, s3 Q: H" [4 B H# S G/ B |Sub mylay()0 y/ b5 o! U6 g z9 u& e
' S4 v" G% J2 g7 S' F* @+ H, ?
Dim lay0 As AcadLayer '定义作为图层的变量
7 P: g, ^' @% K7 ^! B/ }. Y4 Z: _Dim lay1 As AcadLayer
4 }; @; s! R$ E+ Q" k
0 u; L5 [0 d* }0 pfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到1 q& I1 d2 V) F( C8 X
$ ?- \: N7 N% [: _3 s8 PFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环- E4 w- e( o0 c+ [ s- [
0 ?9 @1 l) D& m* I; \! r If lay0.Name = "新建图层" Then '如果找到图层名! h$ d- U! n0 O l7 ^* q
findlay = 1 '把变量改为1标志着图层已经找到4 e4 {. g+ X3 w5 X
msgstr = lay0.Name + "已经存在" + vbCrLf
7 l3 o" s- z8 K msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf; l( }6 I" n9 ~" S! z+ w$ O
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf( P/ W; k0 F6 D( x" [
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
4 N2 Q% \! P8 P/ L1 h5 d, J) u msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf& B! v1 D( V$ m: Q: U
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
. u8 a& I- q% a7 x5 `. a msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf& z" |; z* C; q5 P. d
msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
* |/ z" S! c' a msgstr = msgstr + "是否设置为当前图层?"
7 Z/ |- O) f2 w! v( H5 b- x9 s If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定
& ]: R4 w3 n, B0 l3 k4 b- l7 N* f, b If Not lay0.LayerOn Then lay0.LayerOn = True '打开
0 Z( E/ }3 O& B: M# N9 ^/ t ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层; I. c( M2 Q- Z( o
End If2 S2 B4 x/ ?% {, @1 a7 ^* c
Exit For '结束寻找% _5 \0 n; ~# B) Q2 S6 s
End If- t9 O8 i: ?0 b6 v6 s, W9 c# p
Next lay0
" \+ V& K+ |+ i7 v$ X) S% x7 C% ~1 T5 m& G. t: |* J& `5 E1 Z0 j5 F
If findlay = 0 Then '没有找到图层
7 Z5 G0 Q3 C3 _9 G. _0 o Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
% @0 b* o/ q4 S) n9 ^- p# v lay1.Color = 2 '图层设置为黄色
, V7 p/ A0 e( j' U- ? / Y+ S* O+ w" P5 W8 G1 ]3 x9 N
ltfind = 0 '找到线型的标志,0没有找到,1找到9 @! t( _$ J% S# L+ e5 A; a: @; R
For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环9 {: w( P, d6 B, u: i
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"
. c# n+ a/ u" o8 i3 |4 S ltfind = 1 '标志为已找到线型
& r& v* k& ?3 c' A+ [3 t5 ` Exit For '退出循环% L2 l! F! k5 g: g* J3 v
End If
4 o& l/ F U$ I- J9 p3 r6 B Next entry '结束循环# Y+ g: t# ?& z1 U6 U; _
; ]) l; j. L0 G0 a
If ltfind = 0 Then '没有找到线型# R, {- ^7 l* k, \, L: S& p8 B0 W
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
$ K" B1 N$ [& s! q0 E( G End If
2 M3 [5 y: b8 [/ x6 F* T lay1.Linetype = "HIDDEN" '设置线型
& b& [$ V$ m" q- `$ M. s/ |" B/ k. I# j' l
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层
. o5 m" Y+ o2 n- BEnd If
. L1 }. W7 J: r, D8 L+ x( z- E4 D( F0 f
End Sub
# d/ o7 @$ f4 a0 C4 M- y9 M
7 G6 S4 c5 E" l f# p在寻找图时时我们用到for each……next 语句
. G" J5 B" ^+ [$ I$ _7 D" @0 ?. U( G它的语法是这样的:1 x2 t% v# V, b( C R7 O) I
For Each 变量 In 数组或集合对象
_0 j. h# \4 z/ V+ ?7 z# K……2 r) x+ w* X8 S9 h
exit for 3 p5 s* E! M1 M6 s
……
2 {( r3 y! p8 e$ W+ v. vnext 变量4 c% g6 o% @8 E# m" {
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
: z. l( q$ w' f! o& V+ @/ K) {6 d- V6 j在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
# K6 Y5 I2 u7 w v" a% m5 [# @+ O/ |9 ~/ T/ E3 _# W& L
If lay0.Name = "新建图层" Then/ x+ s5 J3 g" M
lay0.name代表这处图层的图层名
/ ?% S3 X1 w; j! o5 I' z
; A3 x( }0 Y& hIIf(lay0.LayerOn = True, "打开", "关闭")" x% s; e) a) L8 N% M! a; X
这是一个简单判断语句,语法如下:
# o; |" R! R. F/ O/ j1 niif(判断表达式,返回值1,返回值2)
" x& w) r6 o( j b, F$ X9 u2 r当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
4 T7 B2 u' Z7 u9 N8 i" [! j
' p, `, Z4 ^! A1 ZMsgBox(msgstr, 1)
% @: N2 C9 y/ ~- [* y: JMgbox显示一个对话框,第一个参数是对话框显示的内容0 E Z* }* I+ ?( @5 P) K9 z
第二个参数可以控制对话框上的按钮。& R; g2 F$ m8 u* I
0 只有确认按钮9 z2 K, P( x$ G3 P; ~+ u' {" F7 z
1 确认、取消
% s9 }; Y% p& _% T0 I2 终止、重试、忽略
: F% U8 y" x" B2 h, B; V3 是、否、取消! |' s* Z' T! p; ?" Y
4 是、否9 K6 p2 {5 ^0 c. S1 |# V& r) |
MsgBox获得值如下:0 ~) x6 d9 N4 P3 b, }6 S6 A7 E
确认:1
. V& q- \* G+ _9 Z2 C取消:2
6 f: w' G; h4 P- h) `3 S4 Q$ G终止:3
- T6 O: P" U5 `, Z% ^0 K K重试:4
" q1 |+ a7 H. `; J" y; e忽略:52 ]: b2 ~7 T7 k7 q& f
是:6
/ s9 g& l- K* V5 z" _7 j否7
) F6 m& R4 u3 @, D! D初学者不需要死记硬背,能有所了解就行了; d! |2 e+ ?" X) g3 X% j# i
, L. d# g- l7 I0 z; |7 ]
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:8 \, N! Y: r4 ~/ |
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
% ~5 _8 Z8 v+ d' MThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |