趙祥岍 于 洋 陳定超
(徐州工程學(xué)院土木工程學(xué)院,江蘇 徐州 221000)
隧道工程是一種修建在地下、水下或者山體中的大型工程,廣泛應(yīng)用于交通、運(yùn)輸、給排水等領(lǐng)域。隧道工程在修建過(guò)程中需要繪制大量隧道工程圖,目前,這些圖件均由工程技術(shù)人員通過(guò)AutoCAD進(jìn)行手工繪制,效率低下。而利用VB編輯程序語(yǔ)言控制AutoCAD中的繪圖命令,可實(shí)現(xiàn)自動(dòng)繪制隧道圖,提高繪圖效率,縮減工程時(shí)間。
AutoCAD本身所具有的ActiveX Automation技術(shù)使用戶能夠從AutoCAD的內(nèi)部或外部以編程方式來(lái)操作AutoCAD。而用VB實(shí)現(xiàn)AutoCAD自動(dòng)繪圖,采用的就是這項(xiàng)技術(shù)。通過(guò)在VB中引用AutoCAD部件,并編輯一定的程序語(yǔ)言控制ActiveX Automation中的繪圖對(duì)象,可實(shí)現(xiàn)VB與AutoCAD兩個(gè)軟件的連接。
例:連接AutoCAD 2018版本時(shí),方法是在“工程”菜單中選擇“引用”,在“引用”對(duì)話框中選擇“AutoCAD 2018 Type Library”。
由于AutoCAD版本眾多,因此有必要設(shè)置一種通用接口,以提高軟件之間的兼容性。
其中,AutoCAD中的GetObject函數(shù)可以訪問(wèn)文件中的ActiveX對(duì)象,并且將該對(duì)象賦給對(duì)象變量。CreateObject函數(shù)可以創(chuàng)建并返回一個(gè)對(duì)ActiveX對(duì)象的引用。
而當(dāng)GetObject或CreateObject函數(shù)使用的ProglD沒(méi)有附加版本號(hào)時(shí),可使其獨(dú)立于版本,實(shí)現(xiàn)AutoCAD連接版本的通用化。具體代碼如下:
Dim AcadApp As AcadApplication
Dim AcadDoc As AcadDocument
On Error Resume Next
Set acadapp = GetObject(, "autocad.application") ‘獲得正在運(yùn)行的AutoCAD應(yīng)用程序?qū)ο?/p>
If Err Then
Err.Clear
Set acadapp = CreateObject("autocad.application") ‘創(chuàng)建一個(gè)新的AutoCAD應(yīng)用程序?qū)ο?/p>
If Err Then
MsgBox ("不能運(yùn)行AutoCAD,請(qǐng)檢查是否安裝了AutoCAD")
Exit Sub
End If
End If
acadapp.Visible = True ‘顯示AutoCAD應(yīng)用程序
在繪制隧道圖時(shí),需要根據(jù)不同情況選擇隧道形狀類型,主要分為矩形隧道、圓形隧道和馬蹄形隧道。由于同類隧道形狀具有相似性,且內(nèi)部各部件尺寸基本成比例,因此,可以針對(duì)以上三種類型的隧道,分別作出一種通用隧道圖模板,并確定隧道圖中的變量個(gè)數(shù),即:同一類隧道具有相同的變量個(gè)數(shù),變量個(gè)數(shù)由繪圖的需要決定。變量個(gè)數(shù)要求既能滿足隧道圖的精度,又不能增加冗雜數(shù)據(jù)。將隧道圖中各部件的尺寸大小用參數(shù)合理表示。根據(jù)隧道形狀和各部件尺寸,分別繪制隧道的俯視圖和右視圖,并用參數(shù)進(jìn)行標(biāo)注,形成完整的參數(shù)式隧道圖模板。根據(jù)標(biāo)注完成的隧道圖模板編寫繪圖命令,并在VB中設(shè)置友好的運(yùn)行界面。用戶啟動(dòng)系統(tǒng)后,輸入各部件尺寸大小,系統(tǒng)自動(dòng)將輸入的數(shù)值替代對(duì)應(yīng)的參數(shù),實(shí)現(xiàn)自動(dòng)繪制隧道圖。同類隧道圖中輸入的參數(shù)大小可以不同,但各參數(shù)基本成比例。因此,當(dāng)用戶輸入不同參數(shù)時(shí),只要參數(shù)合理,最終自動(dòng)繪制出的隧道圖也是合理的。繪圖步驟如圖1所示。
在VB中可以通過(guò)編輯程序語(yǔ)言控制AutoCAD中的每一個(gè)繪圖命令,以下為部分繪圖命令的代碼。
1)繪制直線的命令:
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = x1:startPoint(1) = y1
endPoint(0) = x2:endPoint(1) = y2
Set lineObj = AcadApp.ActiveDocument.ModelSpace.AddLine
(startPoint, endPoint)
其中,起始點(diǎn)坐標(biāo)為(x1,y1),末端點(diǎn)坐標(biāo)為(x2,y2)。
2)繪制點(diǎn)的命令:
Dim point As Double
Dim centerpoint(0 To 2) As Double
centerpoint(0) = x: centerpoint(1) = y
Set pointobj = AcadApp.ActiveDocument.ModelSpace.AddPoint(centerpoint)
其中,點(diǎn)的坐標(biāo)為(x,y)。
3)繪制圓的命令:
Dim centerpoint(0 To 2) As Double
Dim radius As Double
centerpoint(0) = x: centerpoint(1) = y
radius = r
Set circleobj= AcadApp.ActiveDocument.ModelSpace.AddCircle(centerpoint, radius)
其中,圓心坐標(biāo)為(x,y)、半徑r。
以矩形隧道為例,分別定義隧道寬度為a,隧道高度為b,錨桿長(zhǎng)度為c,管道半徑為d,排水溝深度為e。根據(jù)a,b,c,d,e五個(gè)參數(shù)合理表示隧道圖中各部件尺寸大小,繪制出完整的參數(shù)式隧道模板圖。在VB中編寫程序語(yǔ)言,并編輯出簡(jiǎn)潔的系統(tǒng)運(yùn)行界面,實(shí)現(xiàn)一種基于VB的AutoCAD自動(dòng)繪圖技術(shù)。例:分別輸入300,200,150,10,20時(shí),繪制結(jié)果如圖2所示。具體的參數(shù)比例根據(jù)隧道類型和內(nèi)部結(jié)構(gòu)的形狀自行調(diào)整,參數(shù)比例決定最終繪制圖形的準(zhǔn)確性和精確度。系統(tǒng)具有在線編輯、維護(hù)、修改、擴(kuò)展功能。當(dāng)用戶有特殊需求,需要修改或者增加新的結(jié)構(gòu)部件時(shí),可在AutoCAD軟件界面中直接對(duì)原圖進(jìn)行修改并保存,大大降低繪圖易錯(cuò)率。
基于VB的AutoCAD自動(dòng)繪圖技術(shù),可以大大降低隧道工程繪圖難度,提高繪圖效率,降低施工周期。本文以矩形隧道三視圖的繪制為例,介紹了該方法的原理、過(guò)程和應(yīng)用,如果能按照本文提供的自動(dòng)繪圖方法進(jìn)一步擴(kuò)展其在隧道工程中的應(yīng)用范圍,可有效改進(jìn)傳統(tǒng)的AutoCAD繪圖方式,促進(jìn)隧道工程實(shí)踐技術(shù)的發(fā)展。