楊 柳 鄭健龍 聞德保
(長沙理工大學道路結構與材料交通行業重點實驗室,長沙 410004)
基于ObjectARX實現自定義回旋線實體*
楊 柳 鄭健龍 聞德保
(長沙理工大學道路結構與材料交通行業重點實驗室,長沙 410004)
為解決在AutoCAD中只能用短直線擬合表示回旋線、計算和繪制效率低、不能實現修改和查詢等問題,采用改進的級數展開積分法保證計算精度和效率;運用ObjectARX自定義實體和面向對象編程技術,從曲線基類派生自定義回旋線類;論述了自定義回旋線的繪制、修改、查詢、存儲和拖動的程序實現方法,討論了精度控制方法。實驗結果表明,該方法能高效的開發自定義回旋線程序,解決短直線擬合所產生的問題,實現面向圖形的設計。
緩和曲線;回旋線;ObjectARX;ObjectDBX;AutoCAD
道路平面線形由直線、圓曲線、緩和曲線三要素組成,緩和曲線是設置在直線與圓曲線之間或半徑相差較大的兩個轉向相同的圓曲線之間的一種曲率連續變化的曲線,有回旋線、n次拋物線(n≥3)、雙紐線和正弦型曲線等多種形式,國外采用回旋線居多,國內設計規范也采用回旋線[1]。AutoCAD未提供回旋線實體,只能用短直線組成的多段線擬合表示,分段計算繪制工作量大,需用專業軟件輔助完成。擬合線僅模擬顯示回旋線的幾何形狀,幾何數據保存在擴展數據[2]或外部文件中,與圖形是分離的,脫離專業軟件就無法查詢,對擬合線進行延伸、縮放、圓角等修改操作時,被當作普通多段線處理而得到錯誤的結果。由于不能對回旋線實現面向圖形對象的設計,限制了AutoCAD在道路勘測設計領域的應用。實體是AutoCAD中所有具有圖形表示的數據庫對象的統稱,ObjectARX(AutoCAD Runtime eXtension)二次開發技術提供了自定義實體功能,可解決工程中的特殊圖形和數據問題。文獻[3]研究了用ObjectARX技術開發三維參數化管線建模程序的方法。文獻[4]研究了用于地下管線數據采集的自定義管線和節點,將幾何圖形和標注融合為一個實體。文獻[5]研究了基于導線法的自定義道路平面設計線,實現了交點拖動。本文較全面地研究自定義回旋線的實現方法,讓回旋線與直線、圓弧一樣成為AutoCAD自有實體,系統地解決計算、繪制、修改、查詢和存儲問題。

1)微分近似計算法
用等長的微分單元Δl累積計算坐標,計算公式為:

式中ln=nΔl,x0=0,n=0,1,2,3…,對于y坐標只需將公式中的余弦換成正弦。Δl越小則誤差越小,但會降低計算效率。由于每步遞推計算都存在誤差,隨著ln增大,累積誤差也增大,坐標值逐漸偏離真實回旋線。該方法的計算公式簡潔,但不能進行誤差估計,無法確定能兼顧計算精度和效率的Δl值。

圖1 標準回旋線計算示意圖Fig.1 Calculation chart of standard clothoid
2)級數展開積分法

用泰勒級數展開cosβ和sinβ,通過積分整理得到坐標的參數方程通式為:

手工計算一般只截取公式前兩項或三項,但對于大參數、大轉角和小半徑的回旋線,要截取更多項以保證截斷誤差滿足精度要求。傳統的參數方程用長度l作為參數,而用緩和曲線角β作為參數,計算公式更加簡潔,多項式的次數更小,且由于β?l,用計算機計算時截取高次項也不會產生大數溢出[6]。
相對方法1),方法2)計算坐標沒有累積誤差,其余項通式能根據項數準確估計截斷誤差,或給定精度值確定截取項數,保證坐標滿足精度要求,同時能避免取項過多降低效率。
不滿足起點曲率為0且左偏的回旋線統稱為非標準回旋線。回旋線的端點曲率必須與相鄰線元端點曲率相同,當回旋線連接直線和圓曲線時稱為完整回旋線,連接同向圓曲線時稱為不完整回旋線。根據起終點半徑大小關系和偏轉方向,可以將回旋線分為四類(表1),先確定第1類的計算方法。

表1 各類回旋線的對稱變換Tab.1 Symmetric transformation of various clothoid
見圖2,將不完整回旋線用虛線延長至曲率零點,作為完整回旋線處理[7],建立與圖1相同的局部坐標系,回旋線位于第一象限,起點與坐標系原點不再重合,計算公式及參數的含義都與標準回旋線相同。如果不延長回旋線,采用起點作為原點,起點切向作為軸,則各參數的含義發生了改變,使計算變得復雜。對其余三類回旋線,采用與第1類相同的坐標系,先計算坐標絕對值,然后根據對稱關系確定坐標正負。

圖2 非標準回旋線的坐標系Fig.2 Coordinate system of non-standard clothoid
AutoCAD軟件提供了 ObjectARX、LISP、COM和.net四種二次開發接口,其中ObjectARX開發包提供了面向對象的C++編程接口,其類庫采用標準C++形式,支持定制和擴展AutoCAD功能,能直接訪問AutoCAD數據庫、圖形系統和自定義命令,具有功能強大、運行效率高的優勢,但對編程人員要求高[3-5]。自定義實體是ObjectARX開發接口特有的功能。
自定義實體實現原理見圖3。ObjectDBX(Data-Base eXtension)是獨立于AutoCAD的ObjectARX子集,包含多個動態鏈接庫。ObjectDBX庫與Object-ARX庫共享大多數相同的C++代碼,兩者最大的區別是DBX程序可脫離AutoCAD運行。ARX程序完成自定義命令、實現對話框、處理提示、創建圖形、設置圖形屬性、提取圖形數據等用戶接口功能[9,10]。DBX程序完成自定義實體的繪制、修改、查詢、存儲等數據庫功能。

圖3 自定義實體實現原理Fig.3 Implementation principle of custom entity
圖4展現了AutoCAD數據庫對象的層次關系。AcDbObject是所有數據庫常駐對象的基類。AcD-bEntity是所有實體的基類。通常將二次開發時派生自AcDbEntity及其子類的類稱為自定義實體類。AcDbCurve從AcDbEntity派生,是所有線形實體的基類,它提供了對曲線進行操作和查詢的通用函數,曲線能在參數空間或笛卡爾坐標空間定義,曲線函數能轉換點對應的參數值與坐標值。從AcDbCurve派生回旋線類AcDbClothoid,可共享基類的功能,開發時只需專注于回旋線的特性,最大限度地減輕了工作量。幾何計算類 AcGePoint2d、AcGeVector2d、AcGeMatrix2d提供了點、向量和矩陣運算的各種操作。AcDbClothoid的數據成員主要包括:回旋線參數、偏轉方向、起終點曲率半徑、起終點緩和曲線角、起終點坐標和切線方向。

圖4 數據庫對象層次關系Fig.4 Hierarchical relationship of database objects
AutoCAD通過繪圖原語來繪制矢量圖形,幾何圖形接口類AcGiGeometry提供了 circularArc、polyline、ray、text等繪圖原語函數,它們是最低級的繪圖指令,用于繪制圓弧、多段線、射線、文字等。曲線都要分解成短矢量才能在顯示器上顯示,稱為分格處理。回旋線經過分格處理后,用polyline函數繪制。為了兼顧顯示精度和效率,需要用一條具有最少段數但看上去光滑的多段線來表示回旋線,當短矢量與回旋線之間的最大偏差小于一個像素時,曲線看上去便是光滑的。以顯示設備的像素尺寸作為偏差控制值,便可計算出分格處理的最少段數,使自定義實體和自有實體的顯示精度保持一致。需重載worldDraw和viewportDraw函數實現繪制功能,其中worldDraw函數用來生成跟視圖無關的圖形,由系統自動調整圖形在所有活動視區中的顯示。viewport-Draw則根據不同視圖生成不同圖形,當視圖改變時,它自動將本視區圖形調整到正確的顯示狀態。


表2 修改及查詢功能的實現Tab.2 Implementation of modification and query
數據存儲有DWG和DXF兩種文件格式。DWG文件是AutoCAD專有的數據文件,數據格式是保密的。DXF文件是圖形文件的 ASCII或二進制表示形式,數據格式是公開的,它用于在AutoCAD與其他應用程序之間共享圖形數據。重載dwgOut-Fields和dwgInFields函數,用DWG文檔類AcDbD-wgFiler的writeItem和readItem函數實現DWG格式下回旋線數據的保存和讀入。類似地,DXF格式下應重載dxfOutFields和dxfInFields函數,用 DXF文檔類AcDbDxfFiler的對應函數實現。兩者的區別在于,DXF格式下寫出和讀入數據必須明確給出數據的DXF組碼值[13],數據精度可以人為指定,而DWG格式下必須以相同的順序對數據進行寫和讀,否則會出現數據混亂,其數據精度由系統確定。無論哪種格式,都必須完整的寫出和讀入 AcDb-Clothoid對象的有效數據成員,避免數據殘缺。
為實現回旋線繪制和修改的動態拖動效果,必須從動態拖動類AcEdJig派生回旋線拖動類(將它命名為 AcEdClothoidJig),并重載 sampler(獲取角度、距離和點等幾何值)、update(根據新幾何值更新回旋線)、entity(返回需要更新的回旋線的指針)這三個函數。drag函數自動循環調用上述函數實現動態拖動(圖5)。獲取拖動事件后,在sampler函數中調用用戶輸入函數獲取幾何值并檢查是否有變化,若有變化,判斷是否需要更新拖動圖像,若幾何值不合理則不更新,否則按新幾何值計算并更新。拖動成功結束后,應調用append函數將新回旋線加入圖形數據庫。

圖5 動態拖動流程圖Fig.5 Flow chart of dynamic drag
回旋線的幾何計算精度與圖形顯示精度是不相關的,應分別控制。AutoCAD的點和向量的計算精度為10-10,回旋線應與之一致,用余項通式可算出參數方程應截取的項數。實現動態拖動時,高精度會增加計算量導致圖像顯示不連續,適當降低計算精度,能提高效率保證拖動連續性。回旋線的圖形顯示精度應與圓弧、橢圓等自有曲線保持一致,增大精度會增加重生成圖形的時間,精度過低會使回旋線顯示不光滑影響視覺效果,可根據使用需求用VIEWRES命令設置顯示精度。
基于AutoCAD 2012平臺和Microsoft Visual Studio2008開發環境,用ObjectARX 2012開發程序實現了自定義回旋線功能。圖6展示了程序繪制的不同參數值的回旋線,均能光滑顯示。圖7中的擬合線是按照0.5個長度單位分段的多段線,執行EXTEND(延伸)命令時,擬合線沿端點切線方向直線延伸,延伸后得到新多段線,不再表示回旋線,而自定義回旋線按照幾何形狀延伸,并生成新回旋線。通過LIST(列表顯示)或PROPERTIES(特性)命令能查詢自定義回旋線的幾何信息,并可直接在特性對話框中修改數據并更新回旋線圖形,而擬合多段線本身并不包含任何回旋線信息,只能通過以上命令查詢和修改各頂點坐標。

圖6 不同參數值的回旋線Fig.6 Clothoid with different parameter values

圖7 延伸對比Fig.7 Extension comparison
級數展開積分法相對于微分近似計算法具有明顯優勢,能確定滿足精度要求的最少計算項,兼顧計算精度和效率。將不完整回旋線延長為完整回旋線,并統一在標準回旋線的局部坐標系下計算,計算公式及參數含義不變,只需進行簡單的對稱變換。ObjectARX提供了完善的自定義實體功能,通過從曲線類派生回旋線類并重載虛函數,實現繪制、修改、查詢、存儲和動態拖動,ObjectARX封裝的幾何計算和圖形繪制功能使開發工作量減少到最小程度。實現過程中要注意以下幾點:1)計算中不能混淆局部坐標與全局坐標、到回旋線起點曲線長與到曲率零點曲線長;2)要正確運用C++指針,避免對內存進行非法操作;3)對數據庫對象的打開和關閉、讀和寫等操作必須按要求進行。需要進一步研究以下問題:1)當緩和曲線角很大,需要截取的參數方程項次很高,在計算時還是可能產生大數溢出,應尋求合適的解決方法;2)求交點、切點、垂足、最近點和切線方向的算法優劣直接影響程序運行速度,特別是對于大轉角的回旋線,應研究優化算法提高程序執行效率。
用多段線擬合回旋線,圖形和數據是分離的,不能進行修改和查詢。自定義回旋線實現了圖形和數據的融合與相互驅動,避免了用多段線擬合的諸多問題,擴展了AutoCAD的曲線處理功能,實現了面向圖形對象的設計,可廣泛應用于道路緩和曲線測設。
1 桂嵐.道路勘測設計[M].長沙:中南大學出版社,2009.(Gui Lan.Road survey and design[M].Changsha:Central South University Press,2009)
2 劉德兒,等.城市基礎地理數據庫更新機制研究[J].大地測量及地球動力學,2010,(1):154-158.(Liu Deer,et al.Study on updating city’s fundamental geodatabase[J].Journal of Geodesy and Geodynamics,2010,(1):154-158)
3 向巍,郭際明.基于ObjectARX技術的管道參數化建模[J].大地測量及地球動力學,2011,(2):99-101.(Xiang Wei and Guo Jiming.Parametrization modeling of pipe based on ObjectARX[J].Journal of Geodesy and Geodynamics,2011,(2):99-101)
4 王乾,李剛,趙海民.ObjectARX自定義實體的地下管線前端數據采集系統開發[J].測繪科學,2010,35(5):214 -216.(Wang Qian,Li Gang and Zhao Haimin.Design of underground pipeline front facing data acquisition system on the basis of custom entity of ObjectARX[J].Science of Surveying and Mapping,2010,35(5):214-216)
5 彭利輝,蒲浩.道路平面線形交互式設計方法研究[J].鐵路計算機應用,2006,15(8):7-9.(Peng Lihui and Pu Hao.Study on interactive design methods for road horizontal alignment[J].Railway Computer Application,2006,15(8):7-9)
6 陳飛,凌九忠.提高高等級公路緩和曲線計算精度的方法[J].東南大學學報(自然科學版),2000,30(6):81-86.(Chen Fei and Ling Jiuzhong.A method of improving the calculation accuracy of transition curve in highway alignment design[J].Journal of Southeast University:Natural Science Edition,2000,30(6):81-86)
7 聞道秋,貢云蘭.不完全緩和曲線的計算[J].公路交通科技,2002,19(1):37-39.(Wen Daoqiu and Gong Yunlan.Calculation of incomplete spiral curve[J].Journal of Highway and Transportation Research and Development,2002,19(1):37-39)
8 Hearn D,Baker M P.計算機圖形學[M].蔡士杰,宋繼強,蔡敏譯.北京:電子工業出版社,2010.(Hearn D and Baker M P.Computer graphics[M].Translated by Cai Shijie,Song Jiqiang and Cai Min.Beijing:Publishing House of Electronics Industry,2010)
9 張麗萍.基于鐵路選線CAD系統的圖形接口方法與交互技術[J].蘭州大學學報(自然科學版),2011,47(2):117 - 121.(Zhang Liping.Graphic interface method and interactive graphics technology based on railway line selection CAD system[J].Journal of Lanzhou University:Natural Sciences,2011,47(2):117-121)
10 袁媛.基于MFC類設計ObjectARX應用程序界面[J].中南大學學報(自然科學版),2004,35(3):448-452.(Yuan Yuan.MFC sequence-based design for ObjectARX application interface[J].Journal of Central South University(Science and Technology),2004,35(3):448-452)
11 邵俊昌,李旭東.AutoCAD ObjectARX 2000開發技術指南[M].北京:電子工業出版社,2000.(Shao Junchang and Li Xudong.AutoCAD ObjectARX 2000 development guide[M].Beijing:Publishing House of Electronics of Industry,2000)
12 須鼎興,陳繼山.高等級線路緩和曲線邊線性質及計算公式[J].同濟大學學報,2003,31(1):56-59.(Xu Dingxing and Chen Jishan.Formula of calculating transition curve for higher grade highway[J].Journal of Tongji University,2003,31(1):56-59)
13 姚宜斌,孔建.基于DXF文件的圖件轉換方法研究及程序實現[J].大地測量及地球動力學,2011,(1):117 -121.(Yao Yibin and Kong Jian.Research on graphic conversion method and program implementation based on DXF file[J].Journal of Geodesy and Geodynamics,2011,(1):117-121)
IMPLEMENTATION OF CUSTOM ENTITY FOR CLOTHOID BASED ON OBJECTARX
Yang Liu,Zheng Jianlong and Wen Debao
(Key Laboratory of Road Structure and Material of Ministry of Transport,Changsha University of Science and Technology,Changsha410004)
In AutoCAD,clothoid can be fitted only by short straight lines,which cannot be modified and queried,and this method is inefficient in calculation and drawing.The series expansion integration method is improved to ensure the accuracy and efficiency of calculation.With the techniques of ObjectARX custom entity and object-oriented programming,the custom clothoid class is derived from the curve base class.The programming methods for drawing,modifying,querying,storing and dragging of the custom clothoid are stressed and the accuracy control method is discussed.The experimental results show that the above methods can develop the programs for custom clothoid efficiently,which can solve the problems caused by fitting and implement the graphic-oriented design.
transition curve;clothoid;ObjectARX;ObjectDBX;AutoCAD
U412.34;TB237
A
1671-5942(2013)05-00110-06
2012-10-15
國家自然科學基金(41174001);長沙理工大學道路結構與材料交通行業重點實驗室開放基金(KFJ090207)
楊柳,男,1980年生,講師,碩士,從事道路和交通CAD研究.E-mail:yangliuemail@163.com