Autocad VBA初級教程 (第三課 編程基礎(chǔ)二)
有一位叫自然9172的網(wǎng)友提出了下面的問題:
繪制三維多段線時X、Y值在屏幕上用鼠標選取,Z值用鍵盤輸入
本課將講解這個問題。
為了簡化程序,這里用多條直線來代替多段線。以下是源碼:
Sub myl()
Dim p1 As Variant '申明端點坐標
Dim p2 As Variant
p1 = ThisDrawing.Utility.GetPoint(, "輸入點:") '獲取點坐標
z = ThisDrawing.Utility.GetReal("Z坐標:") '用戶輸入Z坐標值
p1(2) = z '將Z坐標值賦予點坐標中
On Error GoTo Err_Control '出錯陷井
Do '開始循環(huán)
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "輸入下一點:") '獲取下一個點的坐標
z = ThisDrawing.Utility.GetReal("Z坐標:") '用戶輸入Z坐標值
p2(2) = z '將Z坐標值賦予點坐標中
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '畫直線
p1 = p2 '將第二點的端點保存為下一條直線的第一個端點坐標
Loop
Err_Control:
End Sub
先談一下本程序的設(shè)計思路:
1、獲取第一點坐標
2、輸入第一點Z坐標
3、獲取第二點坐標
4、輸入第二點Z坐標
5、以第一、二點為端點,畫直線
6、下一條線的第一點=這條線的第二點
7、回到第3步進行循環(huán)
如果用戶沒有輸入坐標或Z值,則程序結(jié)束。
首先看以下兩條語句:
p1 = ThisDrawing.Utility.GetPoint(, "輸入點:") ‘獲取點坐標
……
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "輸入下一點:") '獲取下一個點的坐標
這兩條語句的作用是由用戶輸入點用鼠標選取點坐標,并把坐標值賦給p1、p2兩個變量。ThisDrawing.Utility.GetPoint()在ACAD中這是最常用的方法之一,它需要兩個參數(shù),在逗號前面的參數(shù)應(yīng)該是一個點坐標,它的作用是在屏幕上畫一條線,前一個端點位于點坐標位置,后一個端點跟隨鼠標移動,逗號之前可以什么都不填,這時沒有線條會跟隨鼠標移動,但逗號必須保留。
逗號后面使用一串字符,程序在命令行顯示這串字符,這不難理解。
VbCr通常代表一個回車符,而在這個語句中,它的作用是在命令行不顯示“命令:”
&的作用是連接字符。舉例:
“愛我中華 ”&”抵制日貨 ”&”從我做起”
z = ThisDrawing.Utility.GetReal("Z坐標:") '用戶輸入Z坐標值
由用戶輸入一個實數(shù)
On Error GoTo Err_Control '出錯陷井
……
Err_Control:
On Error是出錯陷井語句,在程序出錯時將執(zhí)行On Error 后面的語句
GoTo Err_contorl 是程序跳轉(zhuǎn)語句,它的作用是在程序中尋找Err_control:,并執(zhí)行這一行后面的語句,本例中Err_Control:后就是結(jié)束宏,所以只要出現(xiàn)錯誤,程序中止。
Do '開始循環(huán)
……
Loop ‘結(jié)束循環(huán)
這個循環(huán)就歷害了,它會無休止地進行循環(huán),好在本例中已經(jīng)有了一個出錯陷井,當用戶輸入回車時,由于程序沒有得到點或坐標,程序出錯,跳出循環(huán),中止程序。如果要人為控制跳出循環(huán),可以在代碼中用Exit Do語句跳出循環(huán)。在For 變量 和Next 變量之間如果要跳出循環(huán),那么只要在循環(huán)體內(nèi)加一個Exit for 就可以跳出循環(huán),關(guān)于這方面的例程以后會講到。
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '畫直線
畫直線方法也是很常用的,它的兩個參數(shù)是點坐標變量
本課到此結(jié)束,請做思考題:
連續(xù)畫圓,每次要求用戶輸入圓心、半徑,當用戶不再輸入圓心或半徑時程序才退出. |