Autocad VBA初級(jí)教程 (第八課:圖層操作)
先簡(jiǎn)單介紹兩條命令:
1、這條語(yǔ)句可以建立圖層:
ThisDrawing.Layers.Add("新建圖層")
在括號(hào)中填寫圖層的名稱。
2、設(shè)置為當(dāng)前的圖層
ThisDrawing.ActiveLayer=圖層對(duì)象
注意,等號(hào)右邊的變量不能用圖層名稱,必須使用一個(gè)有效的圖層變量
以下一些屬性在圖層比較常用:
LayerOn 打開(kāi)關(guān)閉
Freeze 凍結(jié)
Lock鎖定
Color 顏色
Linetype 線型
看一個(gè)例題:
1、先在已有的圖層中尋找一個(gè)名為“新建圖層”的圖層
2、如果找到這個(gè)圖層,顯示該圖層的信息,并提示用戶是否需要設(shè)置為當(dāng)前圖層,如果用戶確認(rèn),則設(shè)置為當(dāng)前圖層。
3、如果圖層沒(méi)有找到,新建一個(gè)名為“新建圖層”的圖層,設(shè)置為黃色,HIDDEN線型,并把這個(gè)圖層設(shè)置為當(dāng)前圖層
Sub mylay()
Dim lay0 As AcadLayer '定義作為圖層的變量
Dim lay1 As AcadLayer
findlay = 0 '尋找圖層的結(jié)果的變量,0沒(méi)有找到,1找到
For Each lay0 In ThisDrawing.Layers '在所有的圖層中進(jìn)行循環(huán)
If lay0.Name = "新建圖層" Then '如果找到圖層名
findlay = 1 '把變量改為1標(biāo)志著圖層已經(jīng)找到
msgstr = lay0.Name + "已經(jīng)存在" + vbCrLf
msgstr = msgstr + "圖層狀態(tài):" + IIf(lay0.LayerOn = True, "打開(kāi)", "關(guān)閉") + vbCrLf
msgstr = msgstr + "圖層" + IIf(lay0.Freeze = True, "已經(jīng)", "沒(méi)有") + "凍結(jié)" + vbCrLf
msgstr = msgstr + "圖層" + IIf(lay0.Lock = True, "已經(jīng)", "沒(méi)有") + "鎖定" + vbCrLf
msgstr = msgstr + "圖層顏色號(hào):" + CStr(lay0.Color) + vbCrLf
msgstr = msgstr + "圖層線型:" + lay0.Linetype + vbCrLf
msgstr = msgstr + "圖層線寬:" + CStr(lay0.Lineweight) + vbCrLf
msgstr = msgstr + "打印開(kāi)關(guān)" + IIf(lay0.Plottable = False, "關(guān)閉", "打開(kāi)") + vbCrLf + vbCrLf
msgstr = msgstr + "是否設(shè)置為當(dāng)前圖層?"
If MsgBox(msgstr, 1) = 1 Then '如果用戶點(diǎn)擊確定
If Not lay0.LayerOn Then lay0.LayerOn = True '打開(kāi)
ThisDrawing.ActiveLayer = lay0 '把當(dāng)前圖層設(shè)為已經(jīng)存在的圖層
End If
Exit For '結(jié)束尋找
End If
Next lay0
If findlay = 0 Then '沒(méi)有找到圖層
Set lay1 = ThisDrawing.Layers.Add("新建圖層") '增加一個(gè)名為“臨時(shí)圖層”的圖層
lay1.Color = 2 '圖層設(shè)置為黃色
ltfind = 0 '找到線型的標(biāo)志,0沒(méi)有找到,1找到
For Each entry In ThisDrawing.Linetypes '在現(xiàn)有的線型中進(jìn)行循環(huán)
If StrComp(entry.Name, "HIDDEN") = 0 Then '如果線型名為"HIDDEN"
ltfind = 1 '標(biāo)志為已找到線型
Exit For '退出循環(huán)
End If
Next entry '結(jié)束循環(huán)
If ltfind = 0 Then '沒(méi)有找到線型
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin" '加載線型
End If
lay1.Linetype = "HIDDEN" '設(shè)置線型
ThisDrawing.ActiveLayer = lay1 '將當(dāng)前圖層設(shè)置為新建圖層
End If
End Sub
在尋找圖時(shí)時(shí)我們用到for each……next 語(yǔ)句
它的語(yǔ)法是這樣的:
For Each 變量 In 數(shù)組或集合對(duì)象
……
exit for
……
next 變量
它的作用是在數(shù)組或集合對(duì)象中進(jìn)行循環(huán),每循環(huán)一次,變量就成為數(shù)組或集合對(duì)象中的一個(gè)元素。本例在所有的圖層對(duì)象中進(jìn)行循環(huán),每循環(huán)一次layo變量就代表一個(gè)圖層
在循環(huán)體中遇到exit for 語(yǔ)句則退出循環(huán),如果沒(méi)有 exit for,循環(huán)將在所有的元素都操作一遍后結(jié)束。
If lay0.Name = "新建圖層" Then
lay0.name代表這處圖層的圖層名
IIf(lay0.LayerOn = True, "打開(kāi)", "關(guān)閉")
這是一個(gè)簡(jiǎn)單判斷語(yǔ)句,語(yǔ)法如下:
iif(判斷表達(dá)式,返回值1,返回值2)
當(dāng)判斷表達(dá)式成立,函數(shù)值=返回值1,如果表達(dá)式不成立,函數(shù)值=2
MsgBox(msgstr, 1)
Mgbox顯示一個(gè)對(duì)話框,第一個(gè)參數(shù)是對(duì)話框顯示的內(nèi)容
第二個(gè)參數(shù)可以控制對(duì)話框上的按鈕。
0 只有確認(rèn)按鈕
1 確認(rèn)、取消
2 終止、重試、忽略
3 是、否、取消
4 是、否
MsgBox獲得值如下:
確認(rèn):1
取消:2
終止:3
重試:4
忽略:5
是:6
否7
初學(xué)者不需要死記硬背,能有所了解就行了
ACAD圖層中最麻煩的就是線型問(wèn)題了,本例先尋找一個(gè)HIDDEN線型,如果找不到就加載這個(gè)線型,用這條語(yǔ)句:
ThisDrawing.Linetypes.Load "HIDDEN", "acadiso.lin"
ThisDrawing.Linetypes.Load后需要兩個(gè)參數(shù),一個(gè)是線型的名稱,另外一個(gè)是線型文件的名稱。 |