侯金波,李奕潔,潘喜峰,紀海東
(天津市勘察院,天津300191)
管線探測工作中,管線探測的對象一般包括埋設于地下的給水、排水、熱力、工業(yè)等各種管道及電力、電信線纜等。但因地域及客戶需求不同等因素的影響,管線探測的內(nèi)容、成果提交的要求等也各不相同,目前國內(nèi)市場上的相關管線成圖軟件均難以滿足管線探測工作靈活多變的需求。國內(nèi)知名的管線探測單位多以某一CAD平臺為基礎自主定制開發(fā)地下管線成圖系統(tǒng)并取得了較好的經(jīng)濟效益和社會效益。
CAD即計算機輔助設計,是計算機技術的一個重要應用領域。AutoCAD是由美國Autodesk公司開發(fā)與研究的一款通用計算機輔助繪圖與設計軟件包[1]。其開放的體系結構允許用戶和開發(fā)者對其進行擴充和修改(即二次開發(fā)),能極大地滿足用戶的特殊需求。
AutoCAD為開發(fā)人員提供了豐富的開發(fā)工具,用戶可根據(jù)自身需求利用這些開發(fā)工具定制開發(fā)針對各自專業(yè)領域的應用軟件,從而提高作業(yè)效率。AutoCAD的二次開發(fā)方式主要有以下幾種。
1)ADS:即AutoCAD的C語言開發(fā)系統(tǒng),其本質是利用C語言編寫AutoCAD應用程序的頭文件和目標庫,采用結構化編程體系、運行速度快、適合高強度數(shù)據(jù)處理,其不足之處在于C語言熟練掌握難度高、ADS難以被發(fā)現(xiàn)的隱藏錯誤往往造成Auto-CAD乃至整個系統(tǒng)的崩潰。
2)AutoLISP/Visual LISP:AutoLISP是AutoCAD的內(nèi)嵌語言,Visual LISP是為加速AutoLISP開發(fā)而設計的軟件工具;Lisp與CAD無縫集成,控制結構靈活多變,可調(diào)用絕大部分AutoCAD的內(nèi)置命令,且語法規(guī)則簡單,易學易用,但是其采用解釋執(zhí)行的方式,運行速度較慢不適于大規(guī)模大規(guī)模的密集型運算,較差的保護機制使得源程序難以得到較好的保護,它們采用表來描述一切,難以很好地反映現(xiàn)實世界和過程,并且不能直接訪問硬件設備進行二進制文件的讀寫。
3)ObjectARX/ObjectDBX:二者以C++為編程語言,采用面向對象的開發(fā)方式,能夠對AutoCAD的所有事務進行完整的設計與開發(fā),能夠以較高的效率開發(fā)出功能強大、運行速度快、集成度較高、穩(wěn)定性也較好的應用程序,二者最大的差異表現(xiàn)在ObjectARX需要AutoCAD作為宿主程序而ObjectDBX可以基于任意的宿主程序;因ObjectARX/ObjectDBX的方式是基于C++進行開發(fā),編程者需較好的C++功底,對編程者的個人開發(fā)能力要求較高。
4)VBA:即將Visual Basic For Application開發(fā)環(huán)境集成在AutoCAD中,VBA通過 AutoCAD ActiveX Automation接口向AutoCAD發(fā)送消息。ActiveX是Microsoft基于COM(部件對象模型體系結構)開發(fā)的一項技術,用戶可以用它來自定義Auto-CAD與其他應用程序共享圖形數(shù)據(jù)及自動完成任務。在ActiveX Automation出現(xiàn)之前,開發(fā)者只能用AutoLISP或C++接口訪問 AutoCAD圖形,而 ActiveX Automation可以在多種編程環(huán)境下訪問Auto-CAD圖形,且更易于與Microsoft Word、Microsoft Excel等Windows應用程序共享數(shù)據(jù)。VBA開發(fā)方式與主程序間的通訊簡單、高效,但是應用VBA不能定義對象,不能向CAD注冊命令,其面向對象的功能支持的不是太好。在2012以后AutoCAD的CAD版本中不再支持VBA開發(fā),轉而完全支持.NET的開發(fā)方式。
5).NET:從 AutoCAD2006開始,Autodesk在.NET API中提供了一系列托管的外包類,使開發(fā)人員可利用任何支持.NET的語言,其優(yōu)點是完全面向對象、方便易用、簡單易學,是理想的AutoCAD開發(fā)工具。.NET采用了垃圾回收機制,由.NET框架自行進行內(nèi)存的回收機釋放,而不必向C++那樣自己管理內(nèi)存的申請和釋放。ObjectARX的各種反應器在.NET API中由外包類映射為各種事件(E-vent),用戶通過定義事件響應函數(shù)來響應各種操作,對錯誤信息的處理由返回值轉變?yōu)楫惓L幚恚玫丶嫒?NET。面向對象的編程方法使得之一開發(fā)方式?jīng)]有全局函數(shù)的概念,.NET API將ObjectARX下的全局函數(shù)封裝為.NET API下的某些對象或對象的屬性,如ObjectARX下與用戶交互的系列全局函數(shù)被封裝CommandLinePrompt類。
目前AutoCAD二次開發(fā)主要采用后4種開發(fā)方式,相較而言,這4種二次開發(fā)方式的能力范圍基本滿足以下關系式。
ObjectARX>.NET>LISP>ActiveX開發(fā)的難度滿足以下關系式。
VBA<LISP<.NET<ObjectARX開發(fā)方式的能力見表1。
表1 開發(fā)方式的能力
通過以上幾種開發(fā)方式的介紹與比較,可以看出對于管線探測單位從易學易用、滿足實際工作需要的角度來看,以.NET為基礎進行管線成圖系統(tǒng)的定制與開發(fā)不失為一個良好的選擇。本文將對在AutoCAD平臺上基于.NET進行管線成圖系統(tǒng)的定制與開發(fā)的基本流程進行簡單介紹。
系統(tǒng)定制與開發(fā)的過程中除遵循軟件設計的一般原則外,根據(jù)管線探測單位的實際工作情況還需遵循以下幾點。
1)科學性可靠原則:數(shù)據(jù)的管理組織、成圖編繪等應滿足規(guī)范規(guī)定及工程實際需要,系統(tǒng)應具有一定的糾錯及異常處理能力。
2)易用性原則:定制與開發(fā)的過程中應充分考慮到操作人員的實際素質,以建立操作方便、界面友好、性能穩(wěn)定、結果直觀的易用性系統(tǒng)為目標。
良好的數(shù)據(jù)組織是成圖系統(tǒng)性能優(yōu)良的基本保障。對于管線成圖來說,所需要的數(shù)據(jù)主要包含兩個方面,即測量數(shù)據(jù)和與之對應的物探屬性數(shù)據(jù)。在程序設計前期,開發(fā)人員需根據(jù)需要選定存儲數(shù)據(jù)的載體,以及載體上測量數(shù)據(jù)和屬性數(shù)據(jù)間相互組織關聯(lián)的方式。比較常見的方式是以數(shù)據(jù)庫為載體,設計各種表以完成各種數(shù)據(jù)的存儲,表與表之間通過特定的字段相關聯(lián)。外業(yè)所采集的測量及物探數(shù)據(jù)需經(jīng)邏輯檢查等預處理操作后轉換為成圖所需要的數(shù)據(jù)格式,經(jīng)人工輸入或自動加載至數(shù)據(jù)載體,在載體上完美地組織在一起,完成成圖的數(shù)據(jù)準備工作。
程序設計過程中,成圖操作即編碼實現(xiàn)從記錄與管理測量數(shù)據(jù)及物探數(shù)據(jù)的相關載體中讀取數(shù)據(jù),在相應的圖層上進行繪制相關線型、符號、添加注記等。程序實現(xiàn)的一般流程如圖1所示。
AutoCAD允許用戶在應用程序上添加擴展數(shù)據(jù)或字典數(shù)據(jù)來為實體提供額外的屬性信息。在依照物探屬性及相應的測量數(shù)據(jù)可為管線添加類型、長度、埋深等屬性信息。根據(jù)管線探測數(shù)據(jù)成圖完畢后,疊加相關地形圖,經(jīng)圖形、屬性、拓撲關系等項目檢查無誤后即可提交成果,完成一次作業(yè)過程。
本文以Access數(shù)據(jù)庫作為數(shù)據(jù)載體,在Visual Studio 2008平臺上,采用C#編程語言利用.NET API對AutoCAD2011進行定制與開發(fā),以滿足某一客戶提交DWG圖形文件及MDB數(shù)據(jù)庫的探測工程需求。圖2~圖8展示了定制的效果。
圖1 管線成圖一般流程
圖2 定制菜單
圖3 新建工程
圖4 數(shù)據(jù)表結構
圖5 工程信息錄入
圖6 測量信息錄入
圖7 物探信息錄入
通過在AutoCAD平臺上進行二次開發(fā),定制滿足不同地域及客戶需要的管線成圖系統(tǒng),可顯著增強探測單位應對不同需求的能力,有效提高其競爭力。.NET API有效降低了AutoCAD二次開發(fā)的難度,是管線探測單位定制和開發(fā)管線成圖系統(tǒng)的理想方式。
圖8 局部成圖效果
[1]林斌,杜珺.AutoCAD2012完全自學一本通[M].北京:電子工業(yè)出版社,2011.
[2]曾洪飛,盧擇臨,張帆.AutoCAD VBA&VB.NET開發(fā)基礎與實例教程[M].北京:中國電力出版社,2013.
[3]李超,周呂,文鴻雁等.寧波市地下管線探測中應用技術的探討[J].地理空間信息,2013,11(2):152-154.
[4]陳光華,鄧孝應.基于Access數(shù)據(jù)庫的管線數(shù)據(jù)處理程序的設計與實現(xiàn)[J].測繪,2011(34):181-183.
[5]呂寶奇,王瑞芳,王俊.基于AutoCAD Map 3D開發(fā)數(shù)字成圖系統(tǒng)的設計與實現(xiàn)[J].測繪與地理空間信息,2010,33(3):124-128.
[6]曹化宇.構建高質量的C#代碼[M].北京:電子工業(yè)出版社,2013.