侯金波,李奕潔,潘喜峰,紀海東
(天津市勘察院,天津300191)
管線探測工作中,管線探測的對象一般包括埋設于地下的給水、排水、熱力、工業等各種管道及電力、電信線纜等。但因地域及客戶需求不同等因素的影響,管線探測的內容、成果提交的要求等也各不相同,目前國內市場上的相關管線成圖軟件均難以滿足管線探測工作靈活多變的需求。國內知名的管線探測單位多以某一CAD平臺為基礎自主定制開發地下管線成圖系統并取得了較好的經濟效益和社會效益。
CAD即計算機輔助設計,是計算機技術的一個重要應用領域。AutoCAD是由美國Autodesk公司開發與研究的一款通用計算機輔助繪圖與設計軟件包[1]。其開放的體系結構允許用戶和開發者對其進行擴充和修改(即二次開發),能極大地滿足用戶的特殊需求。
AutoCAD為開發人員提供了豐富的開發工具,用戶可根據自身需求利用這些開發工具定制開發針對各自專業領域的應用軟件,從而提高作業效率。AutoCAD的二次開發方式主要有以下幾種。
1)ADS:即AutoCAD的C語言開發系統,其本質是利用C語言編寫AutoCAD應用程序的頭文件和目標庫,采用結構化編程體系、運行速度快、適合高強度數據處理,其不足之處在于C語言熟練掌握難度高、ADS難以被發現的隱藏錯誤往往造成Auto-CAD乃至整個系統的崩潰。
2)AutoLISP/Visual LISP:AutoLISP是AutoCAD的內嵌語言,Visual LISP是為加速AutoLISP開發而設計的軟件工具;Lisp與CAD無縫集成,控制結構靈活多變,可調用絕大部分AutoCAD的內置命令,且語法規則簡單,易學易用,但是其采用解釋執行的方式,運行速度較慢不適于大規模大規模的密集型運算,較差的保護機制使得源程序難以得到較好的保護,它們采用表來描述一切,難以很好地反映現實世界和過程,并且不能直接訪問硬件設備進行二進制文件的讀寫。
3)ObjectARX/ObjectDBX:二者以C++為編程語言,采用面向對象的開發方式,能夠對AutoCAD的所有事務進行完整的設計與開發,能夠以較高的效率開發出功能強大、運行速度快、集成度較高、穩定性也較好的應用程序,二者最大的差異表現在ObjectARX需要AutoCAD作為宿主程序而ObjectDBX可以基于任意的宿主程序;因ObjectARX/ObjectDBX的方式是基于C++進行開發,編程者需較好的C++功底,對編程者的個人開發能力要求較高。
4)VBA:即將Visual Basic For Application開發環境集成在AutoCAD中,VBA通過 AutoCAD ActiveX Automation接口向AutoCAD發送消息。ActiveX是Microsoft基于COM(部件對象模型體系結構)開發的一項技術,用戶可以用它來自定義Auto-CAD與其他應用程序共享圖形數據及自動完成任務。在ActiveX Automation出現之前,開發者只能用AutoLISP或C++接口訪問 AutoCAD圖形,而 ActiveX Automation可以在多種編程環境下訪問Auto-CAD圖形,且更易于與Microsoft Word、Microsoft Excel等Windows應用程序共享數據。VBA開發方式與主程序間的通訊簡單、高效,但是應用VBA不能定義對象,不能向CAD注冊命令,其面向對象的功能支持的不是太好。在2012以后AutoCAD的CAD版本中不再支持VBA開發,轉而完全支持.NET的開發方式。
5).NET:從 AutoCAD2006開始,Autodesk在.NET API中提供了一系列托管的外包類,使開發人員可利用任何支持.NET的語言,其優點是完全面向對象、方便易用、簡單易學,是理想的AutoCAD開發工具。.NET采用了垃圾回收機制,由.NET框架自行進行內存的回收機釋放,而不必向C++那樣自己管理內存的申請和釋放。ObjectARX的各種反應器在.NET API中由外包類映射為各種事件(E-vent),用戶通過定義事件響應函數來響應各種操作,對錯誤信息的處理由返回值轉變為異常處理,更好地兼容.NET。面向對象的編程方法使得之一開發方式沒有全局函數的概念,.NET API將ObjectARX下的全局函數封裝為.NET API下的某些對象或對象的屬性,如ObjectARX下與用戶交互的系列全局函數被封裝CommandLinePrompt類。
目前AutoCAD二次開發主要采用后4種開發方式,相較而言,這4種二次開發方式的能力范圍基本滿足以下關系式。
ObjectARX>.NET>LISP>ActiveX開發的難度滿足以下關系式。
VBA<LISP<.NET<ObjectARX開發方式的能力見表1。

表1 開發方式的能力
通過以上幾種開發方式的介紹與比較,可以看出對于管線探測單位從易學易用、滿足實際工作需要的角度來看,以.NET為基礎進行管線成圖系統的定制與開發不失為一個良好的選擇。本文將對在AutoCAD平臺上基于.NET進行管線成圖系統的定制與開發的基本流程進行簡單介紹。
系統定制與開發的過程中除遵循軟件設計的一般原則外,根據管線探測單位的實際工作情況還需遵循以下幾點。
1)科學性可靠原則:數據的管理組織、成圖編繪等應滿足規范規定及工程實際需要,系統應具有一定的糾錯及異常處理能力。
2)易用性原則:定制與開發的過程中應充分考慮到操作人員的實際素質,以建立操作方便、界面友好、性能穩定、結果直觀的易用性系統為目標。
良好的數據組織是成圖系統性能優良的基本保障。對于管線成圖來說,所需要的數據主要包含兩個方面,即測量數據和與之對應的物探屬性數據。在程序設計前期,開發人員需根據需要選定存儲數據的載體,以及載體上測量數據和屬性數據間相互組織關聯的方式。比較常見的方式是以數據庫為載體,設計各種表以完成各種數據的存儲,表與表之間通過特定的字段相關聯。外業所采集的測量及物探數據需經邏輯檢查等預處理操作后轉換為成圖所需要的數據格式,經人工輸入或自動加載至數據載體,在載體上完美地組織在一起,完成成圖的數據準備工作。
程序設計過程中,成圖操作即編碼實現從記錄與管理測量數據及物探數據的相關載體中讀取數據,在相應的圖層上進行繪制相關線型、符號、添加注記等。程序實現的一般流程如圖1所示。
AutoCAD允許用戶在應用程序上添加擴展數據或字典數據來為實體提供額外的屬性信息。在依照物探屬性及相應的測量數據可為管線添加類型、長度、埋深等屬性信息。根據管線探測數據成圖完畢后,疊加相關地形圖,經圖形、屬性、拓撲關系等項目檢查無誤后即可提交成果,完成一次作業過程。
本文以Access數據庫作為數據載體,在Visual Studio 2008平臺上,采用C#編程語言利用.NET API對AutoCAD2011進行定制與開發,以滿足某一客戶提交DWG圖形文件及MDB數據庫的探測工程需求。圖2~圖8展示了定制的效果。

圖1 管線成圖一般流程

圖2 定制菜單

圖3 新建工程

圖4 數據表結構

圖5 工程信息錄入

圖6 測量信息錄入

圖7 物探信息錄入
通過在AutoCAD平臺上進行二次開發,定制滿足不同地域及客戶需要的管線成圖系統,可顯著增強探測單位應對不同需求的能力,有效提高其競爭力。.NET API有效降低了AutoCAD二次開發的難度,是管線探測單位定制和開發管線成圖系統的理想方式。

圖8 局部成圖效果
[1]林斌,杜珺.AutoCAD2012完全自學一本通[M].北京:電子工業出版社,2011.
[2]曾洪飛,盧擇臨,張帆.AutoCAD VBA&VB.NET開發基礎與實例教程[M].北京:中國電力出版社,2013.
[3]李超,周呂,文鴻雁等.寧波市地下管線探測中應用技術的探討[J].地理空間信息,2013,11(2):152-154.
[4]陳光華,鄧孝應.基于Access數據庫的管線數據處理程序的設計與實現[J].測繪,2011(34):181-183.
[5]呂寶奇,王瑞芳,王俊.基于AutoCAD Map 3D開發數字成圖系統的設計與實現[J].測繪與地理空間信息,2010,33(3):124-128.
[6]曹化宇.構建高質量的C#代碼[M].北京:電子工業出版社,2013.