先简单介绍两条命令:
% W- G: B8 e$ g) y% B+ L- k$ x# ~5 @# L4 N6 o4 Z1 j
1、这条语句可以建立图层:2 K3 ~! e5 V. k$ u9 P
ThisDrawing.Layers.Add("新建图层")( E7 T. V# m- `, V" |
在括号中填写图层的名称。8 e* I2 o# E+ H- W7 `6 y
4 I+ j* ]. M0 {9 E7 i2、设置为当前的图层5 l, k6 ]5 v- {$ G) H8 t
ThisDrawing.ActiveLayer=图层对象
3 h* @$ B9 b/ ` P( }8 |8 U注意,等号右边的变量不能用图层名称,必须使用一个有效的图层变量! K3 w/ H4 M' X m$ _' z
) g6 A" `/ f- C9 ~, k* Q
以下一些属性在图层比较常用:! ^6 _- A' i& o Y5 a* s+ p
LayerOn 打开关闭; r* @( \8 l5 n( s, V: |
Freeze 冻结: B3 N; i/ p: J( O; ]
Lock锁定! I2 f7 [! A0 B/ D1 J0 P
Color 颜色; r% F- ?0 g$ g8 v n) o7 ^
Linetype 线型
) p; p% {( ]/ c/ w, o8 S. A( Y
" H0 c- S/ ^" Q% r! D
7 _( ?, P ?/ L y9 E看一个例题:
; ]; t2 E& c; e0 J8 y1、先在已有的图层中寻找一个名为“新建图层”的图层
/ a' P. c6 U3 m2、如果找到这个图层,显示该图层的信息,并提示用户是否需要设置为当前图层,如果用户确认,则设置为当前图层。
; Z' i5 @# C9 y" O" Y3、如果图层没有找到,新建一个名为“新建图层”的图层,设置为黄色,HIDDEN线型,并把这个图层设置为当前图层8 M, c9 c( b8 X9 u/ k- P
. U- Y8 }- F2 Q
Sub mylay()% N# S, Y2 c( p
2 l) I, H1 k# v% wDim lay0 As AcadLayer '定义作为图层的变量
1 u6 x" t- B8 i+ L5 UDim lay1 As AcadLayer
- p* r. o, [3 m- O8 C/ T2 ]9 Z
, O: r& z0 d9 z6 D5 A. A! Mfindlay = 0 '寻找图层的结果的变量,0没有找到,1找到
$ N' {% n6 T8 g
& P8 p/ ~5 c3 w b" rFor Each lay0 In ThisDrawing.Layers '在所有的图层中进行循环
, f+ t" ]7 b! X5 ]# C. S. n# ^' p# `6 G7 @
3 z# K$ J( J. b# i' g( V If lay0.Name = "新建图层" Then '如果找到图层名
# a2 V& N/ L4 @$ z6 { findlay = 1 '把变量改为1标志着图层已经找到
# s* l/ A+ n; B: c msgstr = lay0.Name + "已经存在" + vbCrLf) M8 f4 t: [3 \5 F' c- y) x0 L
msgstr = msgstr + "图层状态:" + IIf(lay0.LayerOn = True, "打开", "关闭") + vbCrLf
5 k" B$ I: i$ _, z0 J msgstr = msgstr + "图层" + IIf(lay0.Freeze = True, "已经", "没有") + "冻结" + vbCrLf, b4 a6 _2 J4 H8 u
msgstr = msgstr + "图层" + IIf(lay0.Lock = True, "已经", "没有") + "锁定" + vbCrLf
% s1 H8 \1 A7 ]) p msgstr = msgstr + "图层颜色号:" + CStr(lay0.Color) + vbCrLf8 D$ l. t% x3 h% `) y5 i+ |
msgstr = msgstr + "图层线型:" + lay0.Linetype + vbCrLf+ s; Y+ I0 X" L
msgstr = msgstr + "图层线宽:" + CStr(lay0.Lineweight) + vbCrLf
) ^" e1 L/ E' s msgstr = msgstr + "打印开关" + IIf(lay0.Plottable = False, "关闭", "打开") + vbCrLf + vbCrLf8 i. L4 U4 d+ e! u; E8 [1 |
msgstr = msgstr + "是否设置为当前图层?"
0 G; @# L8 m# j/ Z$ } If MsgBox(msgstr, 1) = 1 Then '如果用户点击确定! Z$ \5 Q3 o. S8 V" X
If Not lay0.LayerOn Then lay0.LayerOn = True '打开
5 k+ N- c$ b5 G* [( O ThisDrawing.ActiveLayer = lay0 '把当前图层设为已经存在的图层+ t) [& K8 j7 o ~
End If
4 d2 I+ O) K5 h; f" e Exit For '结束寻找# Y& i( V6 s+ ]0 [! \, u
End If
3 V2 D4 f# d6 _& MNext lay0
+ O- z4 x' [& l) L2 [5 m
7 G* \5 Y3 [% y3 t7 r! TIf findlay = 0 Then '没有找到图层7 l2 |' V3 s, |! k. h* W
Set lay1 = ThisDrawing.Layers.Add("新建图层") '增加一个名为“临时图层”的图层0 ]& @* M& Z8 R" ]
lay1.Color = 2 '图层设置为黄色, z% w! p$ v1 U0 U- {
5 }& [! O: @% R9 Y' g- ]8 q" A
ltfind = 0 '找到线型的标志,0没有找到,1找到
" U9 g7 U/ n, c7 j/ t ]% c For Each entry In ThisDrawing.Linetypes '在现有的线型中进行循环
4 B2 u/ g8 a& W& Y# | ~ If StrComp(entry.Name, "HIDDEN") = 0 Then '如果线型名为"HIDDEN". ?+ N7 f7 T3 b, r/ t7 X1 f) J1 y8 N" K
ltfind = 1 '标志为已找到线型
5 ?( @" C; L6 J Exit For '退出循环 {* G" z3 z5 }
End If# Q* ?' Y2 n8 s! }8 U2 v
Next entry '结束循环; ?$ e4 k! W3 ~ `
: t, X. r& h0 t/ s% I3 p If ltfind = 0 Then '没有找到线型
2 ~( y1 s% E0 \. z$ V, w8 f ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加载线型
( S- J/ X2 {. m" [: } End If/ e$ D1 m6 m9 M
lay1.Linetype = "HIDDEN" '设置线型
- \3 ~4 R' h* b
: r+ w5 @+ o; v" u' b/ a ThisDrawing.ActiveLayer = lay1 '将当前图层设置为新建图层: V2 {) E) q' Q6 O' @
End If
* s1 u! t0 _( S4 ]8 Q& \4 ?% z9 D; E1 U, x
End Sub# Z1 ^" u: m% M ~ P
; }+ q+ E+ c" s
在寻找图时时我们用到for each……next 语句
. v d' ^2 Q. f2 b' y! B它的语法是这样的:/ G- f* |, f6 |6 s1 }9 q: ]! l& q
For Each 变量 In 数组或集合对象
- ]8 A% X2 N! K: c/ j2 r2 T……
! `8 O8 \& |1 w- A9 [" Bexit for 1 m1 M( R4 T4 h9 I
……/ k5 k( z3 C% p
next 变量
9 l0 D3 ^8 v. F6 Q i- s& s它的作用是在数组或集合对象中进行循环,每循环一次,变量就成为数组或集合对象中的一个元素。本例在所有的图层对象中进行循环,每循环一次layo变量就代表一个图层, j2 ` N8 ~1 F# J" O' t8 c& D" E+ X
在循环体中遇到exit for 语句则退出循环,如果没有 exit for,循环将在所有的元素都操作一遍后结束。
+ m2 E* R' Q' J, E# R+ ]/ ] `# M
2 W: Q! I) {0 a6 Y6 w! G1 bIf lay0.Name = "新建图层" Then& ^2 l, V' ?2 S- ]/ y o
lay0.name代表这处图层的图层名+ u1 p2 f3 y, z" S9 T
* X" I6 a- z2 {* Z% `IIf(lay0.LayerOn = True, "打开", "关闭")% |+ a& `! D; P0 ^, K& F2 H
这是一个简单判断语句,语法如下:
' J% _0 p7 u" S) L/ Ciif(判断表达式,返回值1,返回值2)! I$ f5 N( }) M8 x
当判断表达式成立,函数值=返回值1,如果表达式不成立,函数值=2
9 h7 [! c+ a) N8 L Z5 j4 d
$ u5 m8 N( }* {# V0 LMsgBox(msgstr, 1) ! y( s) M! ?% m( m. a
Mgbox显示一个对话框,第一个参数是对话框显示的内容6 Q% r$ V! t' O* g$ O# j% I. P
第二个参数可以控制对话框上的按钮。, G7 W# K( [1 i- T& Z3 E5 E
0 只有确认按钮
7 ?( \. }8 ~1 R! K+ T1 确认、取消5 R3 F$ E5 h1 X* ?$ Q
2 终止、重试、忽略6 h) W M% Z# P- g6 k' d
3 是、否、取消1 `0 H% E* p% [4 ~" g) r% V5 L
4 是、否
" A' v* Z; `$ P( H+ YMsgBox获得值如下:
- }) j9 B* T( T, i确认:11 U _. g$ }) \1 l% u( {# a
取消:2
; m7 A9 @) E) X. c( n5 ~ H4 T终止:3
: \! |* P, o& O重试:4
* Z$ H5 S" a8 w* R; T" c/ W忽略:5
5 l8 h/ H: X% {4 u, z/ K& U是:68 t, F" B# \ i1 s3 @* {
否7) n0 X9 F, G4 I0 l8 }
初学者不需要死记硬背,能有所了解就行了
0 |5 L& A) |1 H( E6 m# r4 U" [ }+ \* N% d, l8 ]# H: p
ACAD图层中最麻烦的就是线型问题了,本例先寻找一个HIDDEN线型,如果找不到就加载这个线型,用这条语句:1 b" p L' Z. W. y
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" 1 p2 `3 U6 ~1 _ l/ k% K9 U. S4 _
ThisDrawing.Linetypes.Load后需要两个参数,一个是线型的名称,另外一个是线型文件的名称。 |