先简单介绍两条命令:
. r5 s1 ~0 j$ G% m* M. j# {1 |, y' `0 ^; e* p# D- M7 f1 \
1、这条语句可以建立图层:2 O/ p. Y. W$ }5 ?9 p) \' a
ThisDrawing.Layers.Add("新建图层")4 B% R& E4 ~' o
在括号中填写图层的名称。
8 h4 n7 S7 a+ ?& g' {
1 d" L3 @: \+ _# q( Z2、设置为当前的图层
5 X/ |& E; O& c& @* V( V: oThisDrawing.ActiveLayer=图层对象$ y' k6 `' m' d8 ~9 a
注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量
3 C& X( J E* r- e
& b4 Z5 U5 n; i1 P以下一些属性在图层比较常用:; ~5 }+ R r% n8 o$ x3 B
LayerOn 打开关闭
0 M/ K* N9 \6 L' R1 q' _7 y$ wFreeze 冻结+ L% ]: R! {$ z2 N" v
Lock锁定
' [+ F# h& T: _$ i" }Color 颜色- i. `/ ~* h9 ^4 @
Linetype 线型
0 R: o8 u; h& X+ O9 f# {
8 j' e% L; ^2 U* b
, g( o2 e9 m2 k* h5 x看一个例题:
- S: j# E' H9 W/ q }1、先在已有的图层中寻找一个名为“新建图层”的图层) Z! w! t5 @) K% ~
2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
( j; w6 M3 B9 z( |4 e3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层
0 P' X* @, B9 J% \$ ^: L
8 A( A* }" g4 m" N8 P( ]Sub mylay()
7 h6 a- w+ d5 ^1 U9 { z4 D# N' s" y4 R' {/ q+ Z6 O; ?9 d) h+ W( o
Dim lay0 As AcadLayer '定义作为图层的变量" a6 d1 c* ?6 s: }
Dim lay1 As AcadLayer
0 b6 n" f( i1 m7 y1 L0 ~) r+ }) e5 n* r$ u" L: b) [
findlay = 0 '寻找图层的结果的变量,0没有找到,1找到! [1 `' l5 ^2 r9 ^' S
* j9 u* e8 O% T6 q( p* UFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环9 U6 g9 t0 p: r9 z1 ~3 W
* N% M: `( e( l T7 B. |$ n If lay0.Name = "新建图层" Then '如果找到图层名
( O( \4 R/ C) n* L$ O9 E findlay = 1 '把变量改为1标志着图层已经找到5 j. R, B! j/ J
msgstr = lay0.Name + "已经存在" + vbCrLf X K+ E: \- B6 S
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf2 P9 p/ n) Z0 d: z) f+ H
msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf8 q! I( L$ _9 U1 U0 I X
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
, M! [$ K4 v) f' I3 ^! q msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf
% X2 h4 o7 G+ D- `9 Z7 d3 ] msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf
" O& l) _' p5 w% D& e( Y8 X msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
# U1 f$ f; p2 h( T1 G7 o% F msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf
9 s+ P- F1 S3 |: M# ? msgstr = msgstr + "是否设置为当前图层?"* z0 v9 b8 h9 q/ ^5 s. @
If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定0 u& ]/ }: {/ m1 u& ]* r* ?
If Not lay0.LayerOn Then lay0.LayerOn = True '打开5 y" m: C) y. C: k- B! a+ F
ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层
' d- J+ E. t" V* E# z End If
. E7 i) v, h4 T# a0 P Exit For '结束寻找
: [- ~0 Z) y/ o2 D End If+ C! J" N* H( t: o1 v
Next lay0
- `& q# ~. m, L4 e4 N5 W
: U' C* a: Q3 O+ Y, i' S. E) MIf findlay = 0 Then '没有找到图层4 }( _1 ^ g% ?* C. A6 l
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层
; V9 g" g1 e: i2 R$ y/ w lay1.Color = 2 '图层设置为黄色 L' V) s: l/ S; Y; d. S: t: Y
9 z( x( c- X5 n i6 V- t. e7 C: P ltfind = 0 '找到线型的标志,0没有找到,1找到
% o0 n+ v0 Y: K s Q* J. d7 \ For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环; Y r" _% x2 f# u& Q" q1 y
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN"+ j2 W, f, d* x% m g4 o* }
ltfind = 1 '标志为已找到线型, e; P" r6 p* r, {0 c; N
Exit For '退出循环
& A" r+ R+ Q" w% I9 V: y End If, N) {' g9 O4 l, D4 S# p+ t' u
Next entry '结束循环/ c2 R. R% r" |# g8 Q
; L, R1 x4 N& T9 R( w2 Q9 r
If ltfind = 0 Then '没有找到线型
' c6 Z! Z2 |- b. a: L ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型; F7 |0 ?- |$ D8 k- Z; [, s
End If( A( e# r3 o. z; P' s( s. k" f! P
lay1.Linetype = "HIDDEN" '设置线型2 j! ~/ W Z* N2 l$ ~) `
$ H7 q* a0 W Y' u1 M" [/ h+ w& H. [
ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层, q) F! I- d( c
End If( B" S& @8 e4 a+ D3 h' b) i
" y4 L' |( W; t+ a# }6 }0 ^/ r
End Sub
; U* C0 O8 ~/ {0 ~. M' g1 P. D4 m. Z G& B
在寻找图时时我们用到for each……next 语句
) F% Q7 i# r4 S) B3 Y! |它的语法是这样的:. w5 K/ f: @; a/ L3 _) i" }& |
For Each 变量 In 数组或集合对象% O! l+ X" W. P/ i: N, @$ c
……, l% o! }9 t+ a& E- D
exit for " R( N4 m N# M1 X' ~, Y6 H! M: [
……% T7 ~2 }8 _& t: b( A/ |
next 变量! L ~2 [4 N6 F6 U/ }7 E$ B! U
它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层
8 _: J; s [9 j! F在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
- h7 T3 G" L) f) P3 c( C9 i* K2 m& {0 I' e) L
If lay0.Name = "新建图层" Then0 {. u: { R f$ f0 j+ }0 E
lay0.name代表这处图层的图层名
& F8 k) w/ \/ g8 @& ^
3 H& m/ ~3 R; L( b' A9 T: W: {IIf(lay0.LayerOn = True, "打开", "关闭")
2 t5 x9 N& k, p1 B# i) i这是一个简单判断语句,语法如下:
- ?& _# L; U2 yiif(判断表达式,返回值1,返回值2)
, ?. A5 @+ q+ k# @% H- x当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
$ n! q) ^: m' x+ ~# a9 C3 {
/ I, [3 r( w [" v2 yMsgBox(msgstr, 1)
- ^9 v9 @- i# [1 `. R) G5 R9 F& JMgbox显示一个对话框,第一个参数是对话框显示的内容: i6 l2 {, C6 I7 N+ A
第二个参数可以控制对话框上的按钮。& k/ Z4 t$ j* R
0 只有确认按钮
: @: V: @, U; [1 确认、取消7 y; U8 B7 {- t6 w8 y' h
2 终止、重试、忽略
" n2 i- H& P4 f8 Z1 N3 是、否、取消
" j, W# }. D$ O/ Z' R, f4 是、否
1 F$ G4 M4 Y$ G4 X# BMsgBox获得值如下:
( R# f ^: s* Y6 `) I: H$ b5 \) x' p确认:1
0 i; [; l' j1 g, K; d取消:2
7 _/ F" [; s4 b+ L终止:3
) G5 i' Y0 j9 l& f重试:4
5 e( p! [( |8 _* A4 [忽略:5
: Q8 u6 v% i( f3 k$ o% w是:6! s2 C+ t7 h# g+ a. I
否7
9 R7 y3 j# y% i, `2 D C初学者不需要死记硬背,能有所了解就行了' T& R: K( h0 g
% V3 Z/ K5 v- z0 ^2 _" e, w* Y
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:2 f! r0 ?7 P0 W$ n0 _
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 6 I0 C6 y* p% M9 i; p$ `
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |