周俊
(西安市勘察測繪院,陜西西安 710054)
基于ObjectARX的道路縱斷面圖繪制
周俊?
(西安市勘察測繪院,陜西西安 710054)
利用AutoCAD提供的ObjectARX開發環境以及C++語言,編寫道路縱斷面圖自動繪制程序,提高了工作效率。
ObjectARX;道路縱斷面
在城市工程測量中,時常會接觸道路縱斷面圖的測繪。在外業測量中,根據用戶要求沿路中線按一定距離采集點的高程以及路中樁的高程。內業利用AutoCAD繪圖,在沒有專業設計軟件輔助的情況下,繪制道路縱斷面圖是很繁瑣的事,需要進行大量的、重復的操作,既降低了工作效率又容易出錯。利用AutoCAD提供的ObjectARX開發環境編寫自動繪圖程序,可以快速而準確地繪出道路縱斷面圖。
ObjectARX是AutoDesk公司針對AutoCAD平臺上的二次開發而推出的一個開發軟件包,它提供了以C++為基礎的面向對象的開發環境及應用程序接口,能真正快速的訪問AutoCAD圖形數據庫。用Object-ARX開發的CAD軟件具有模塊性好、獨立性強、連接簡單、使用方便、內部功能高效實用等優點,并且支持MFC(Microsoft Fundation Class),能簡潔并高效地實現許多復雜功能。
ObjectARX的類庫構成有以下幾項:
(1)AcRx庫,提供系統層次的類,用于動態鏈接庫的初始化以及運行時刻類的注冊和標識。
(2)AcEd庫,提供一組用于定義和注冊新的Auto-CAD命令的類。
(3)AcDb庫,提供一組用于存取AutoCAD圖形數據庫結構的類。
(4)AcGi庫,提供繪制AutoCAD實體圖形界面的類。
(5)AcGe庫,提供的實用類用于執行二維和三維幾何操作。
3.1 AutoCAD數據庫
AutoCAD基本的數據庫對象是實體、符號表和字典。實體是在AutoCAD圖內部表示圖的一種特殊數據庫對象,用戶可以在屏幕上看見實體并能對其進行操作。符號表和詞典是用于存儲數據庫對象的容器,這兩個容器對象都映射一個符號名到一個數據庫對象。AutoCAD數據庫主要結構如圖1所示,實體包含在塊表記錄中,因此要創建一個圖形對象,需要遵循下面的基本步驟:
(1)確定要創建對象的圖形數據庫;
(2)獲得圖形數據庫的塊表;
(3)獲得一個存儲實體的塊表記錄,所有模型空間的實體都存儲在模型空間的特定記錄中。
(4)創建實體類的一個對象,將該對象附加到特定的塊表記錄中。

圖1 圖形數據庫的結構
3.2 相關類的設計
利用面向對象的思想編寫相關類文件來細分繪圖的工作,如創建實體,修改實體屬性以及相關計算。本文程序編寫了3個類文件:CCreateEnt、CModifyEnt和CCalculation。CCreateEnt類用于創建實體,如直線、文字、圖層等。CModifyEnt類的作用是修改實體的部分屬性,如顏色、線型、圖層等。這里給出CCreateEnt類中新建圖層的函數CreateLayer的代碼。

3.3 斷面圖繪制的算法設計
繪制道路縱斷面圖的數據信息是沿路中線上的點距起點中樁的里程和高程。斷面圖橫向反映里程信息,縱向反映高程信息,相鄰兩點之間連線,形成一條不規則的折線,反映了沿著路中線地面的起伏變化。外業采集的數據是點的平面坐標和高程,程序就是利用這些基本數據信息繪制出圖形:由平面坐標得到各點距起點的里程,由每個點高程值確定所需要刻畫的高程值范圍。
在用CAD繪圖時,將代表不同意義的實體放到不同的圖層中是個很好的習慣。因此,程序將整個縱斷面圖分成4個圖層來創建:折線圖層、格網圖層、細分格網圖層和其他圖層。程序的算法如圖2所示。

圖2 程序流程圖
其中數據文本為txt格式,每一行代表一個點的數據信息,如某點A的坐標和高程分別為(1 245.386,2 469.533)和471.65 m,則該點在坐標文件中的格式為“A,1245.386,2469.533,471.65”。
程序部分代碼如下:



編譯運行程序,生成ARX文件ZhJzdtn.ARX,加載到CAD后即可運用該程序。
為驗證程序的有效性,本文利用在西安市南郊某規劃路采集的縱斷面測量數據生成縱斷面圖。該工程用RTK測量,以50 m為間隔采集路中線上點的高程以及路中樁的高程,平面坐標以理論值給出,數據結果如圖3所示。

圖3 縱斷數據文本
啟動AutoCAD,加載ARX程序,如圖4所示。然后在CAD命令行輸入調用該程序的自定義命令“ZDT”,出現選擇數據文本的對話框(如圖5)。按“打開”后,CAD命令行會提示用戶點選圖表生成位置,在CAD圖形窗口任意位置點取一點,即可生成道路縱斷面圖如圖6所示。

圖4 加載ZhJzdtn.ARX

圖5 選擇數據文件對話框

圖6 生成道路縱斷面圖
所生成的道路縱斷面圖反映了沿路中線道路的起伏變化,符合本院的工作要求,無需再作過多的整飾,即可以作為提供給用戶的成果資料。
本文利用ObjectARX開發環境所設計的程序,可以直接利用外業采集的數據自動生成道路縱斷面圖,不僅準確有效,符合工作要求,而且節省了工作人員的體力和腦力,提高了工作效率。
[1]張帆.ObjectARX開發實例教程電子圖書[M].2007
[2]Charles McAuley著.李世國等譯.AutoCAD2000 Object-ARX編程指南[M].北京:機械出版社,2000
[3]王育堅.Visual C++面向對象編程教程[M].北京:清華大學出版社,2003
Drawing Vertical Section of Road Based on ObjectARX
Zhou Jun
(Xi’an Institute of Surveying Mapping&Geotechnical Investigation,Xi’an 710054,China)
In order to improve work efficiency,a program based on ObjectARX provided by AutoCAD and C++Language has been compiled to automatic draw road profile.
ObjectARX;road profile
1672-8262(2010)04-139-04
P209
B
2009—12—20
周俊(1985—),男,碩士,主要從事工程測量工作。