- 相關推薦
基于鐵路選線CAD系統的圖形接口方法與交互技術
摘要:運用Visual c++ 2005和0bjeetARX 2008開發工具,探討圖形實體的創建與實體屬性的設置方法。
利用結果緩沖區、DXF接口方法和ObjectARX類函數,實現圖形數據自動提取和圖形交互功能。以此為基礎開發的線路設計系統,在一些設計單位完成了多項線路工程設計,取得良好的經濟效益。
關鍵詞:計算機輔助設計;鐵路選線;ObjeetARX開發工具;圖形交換文件
隨著計算機圖形學理論和技術的迅猛發展,針對各行備業出現了多種計算機繪圖和計算機輔助設計CAD(computer aided design)的軟件和開發工具,為工程設計人員提供了現代化的設計手段,提高了設計效率和繪圖質量,使設計圖紙更加規范化。
20世紀90年代利用AutoCAD等軟件的交互式繪圖,已經為工程技術和科技工作者繪圖提供了很大的便利,但繪圖速度和效率仍不能滿足設計人員的要求。為此,利用面向對象的程序設計方法,采用繪圖軟件的開發工具包,開發人工智能和自動繪圖的計算機輔助設計軟件,已成為設計自動化的發展趨勢。
近年來,土木、建筑、機械制造與設計行業在計算機輔助設計方面的研究工作取得了重要成果。
隨著航測和遙感技術的發展,出現了航測地形圖、遙感影像圖及數字地面模型等數字和圖像產品,為鐵路選線設計自動化和可視化奠定了基礎。本文基于AutoCAD 2008繪圖平臺和ObjectARX 2008開發工具,運用Visual c++ 2005語言,探討鐵路選線設計圖形接口方法和交互技術,通過對AutoCAD圖形數據庫的操作,在前臺進行線路的平、縱斷面的交互設計,在后臺自動獲取并存儲設計數據,最后調用設計數據自動繪制線路平面、縱斷面設計圖。這種鐵路選線CAD系統的實現,可為設計部門提供實用、快捷、方便的現代化設計工具,大大提高設計效率和圖面質量。
1、圖形接口方法
基于Visual C++ 2005和ObjectARX的圖形接口的建立是圖形生成的基礎。在線路設計圖中包括幾何屬性和非幾何屬性,圖形實體有直線、圓、圓弧及文字等,圖形非幾何屬性有圖層、顏色、線型等。所以,建立生成圖形的基本圖元和屬性設置接口,是圖形生成的前提。
1.1 圖形接口的建立
1.1.1 結果緩沖區接口方法
(1)結果緩沖區結構在AutoCAD中,實體數據描述表存儲在結果緩沖區中,結果緩沖區的結構為:
struct resbuf{struct resbuf rbnext;\\~向下一個結果緩沖區的指針變量short restype;\\用來指明resval值的類型union ads U val resval;\\“結果緩沖區”節點值的resval變量);resval變量是個同位union ads U val類型,成員變量有ads— real rreal,rpoint[3];short rint;charrstring等。結果緩沖區的restype字段,用來指明返回值resval的類型。ADS函數處理實體時,其返回結果緩沖區的restype字段常常是DXF(drawingexchange file)實體代碼。
(2)利用結果緩沖區創建實體的方法定義結果緩沖區結構:struct resbuf entlist;創建實體數據描述表:不同的實體數據描述表的參數不同,以下為直線、圓和文字的數據描述表的構建方法,其他實體的數據描述表也可依此方法建立?1.entlist— ads— buildlist(RTDXF0,“LINE”,10,S—tartp,11,endp,RTNONE);entlist= ads— buildlist(RTDXF0,“CIRCLE”,10,centerp,40,r,62,color,RTNONE);將實體描述表添加到結果緩沖區中:status—ads— — entmake(entlist);釋放結果緩沖區:ads relrb(entlist);1.1.2 用創建類對象的方法建立接口一幅AutoCAD的圖形是存儲在一個數據庫中的對象的集合。創建實體的過程就是向數據庫中添加對象的過程。不同的對象有其對應的子類,如AcDbLine,AcDbCircle,AcDbArc,AcDb2dPolyline,AcDbText等。以AcDb2dPolyline對象的創建方法為例,建立POLYLINE實體接口函數的方法如下:
圖形接口定義:
void createPolyline(AcGePoint3dArray ptArr,double width,int color,char layer)創建實體對象:
AcDb2dPolyline pNewPline=new AcDb2dPoly—line(AcDb::k2dSimplePoly,ptArr,0.0,Adesk::kFalse,width,width,NULL);設置實體顏色和圖層:pNewPline一>setColor—Index(color);pNewPline——>setLayer(1ayer);以讀的方式打開當前圖形數據庫中的塊表,建立指向塊表的指針。
acdbHostApplicationServices()——>workingData--base()->getSymbolTable(pBlockTable,AcDb::kForRead);以寫的方式打開模型空間,將塊表記錄指針指向模型空間數據庫。
pBlockTable->getAt(ACDB—MODEL—SPACE,pBlockTableRecord,AcDb::kForWrite);將實體添加到圖形數據庫的塊表記錄中,返回對象標識。
pBlockTableRecord——>appendAcDbEntity(pline·-ObjId,pNewPline);關閉塊表指針、塊表記錄指針和對象指針。如關閉塊表指針:pBlockTable->close()[ ];其他實體創建可依據上述方法實現。
1.2 圖形非幾何特性設置為了便于圖形管理和符合制圖標準,在繪制設計圖時需設置圖形的非幾何特性,主要包括圖層、顏色、線型和線寬等。
1.2.1 建立圖層若不設置圖層,則圖形畫在“0”層中。當建立圖層時 可設置圖層的顏色、線型及圖層狀態(關閉、打開,凍結等)等特性,將設計圖中不同內容繪制在各自的圖層中,便于圖形管理。方法如下:
(1)函數定義接口函數:AcDbObjectId addLayer(char layer.namell00],char linetype[100],int layer—color);
(2)加載線型在當前工作空間中,加載標準線型庫文件aca—diso.1in中的指定線型。acdbLoadLineTypeFne(hnetype,“…\\acadiso.1in”,pDb);
(3)建立新的層表記錄:AcDbLayerTableRe—cord pLayerTblRcd= new AcDbLayerTableRecord;
(4)設置層名:pLayerTblRcd一>setName(1ayer—name);
(5)設置圖層顏色:pLayerTblRcd一>setColor(color);f61設置線型在線型表中獲取線型標識:pLinetypeTbl一>getAt(1inetype,ltId);在層表記錄中設置線型:pLayerTblRcd一>set—LinetypeObjectId(1tId);將層表記錄添加到層表中:pLayerTbl一>add(pLayerId,pLayerTblRcd);(7)關閉層表指針,返回層表的ID[3].
1.2.2 實體非幾何特性設置實體的非幾何特性包括所屬的圖層、顯示的顏色、線型、線寬和線型比例等 設置方法如下:
(1)當前圖層設置在AutoCAD環境下,圖形是畫在當前層中,所以,在繪圖時要先設置當前圖層,方法為:pDb一>setClayer(pLayerld)。
(2)設置線型比例在AutoCAD 的模型空間設置線型總體比例方法如下:打開當前數據庫:AcDbDatabase pDb—acdbHostApplicationSerVices()一>workingDatabase();設置線型總體比例:pDb一>setLtsca1e(Ltscale)。
(3)設置實體顏色:實體的顏色可與所在層不同,如果顏色值不是256(BYLAYER),則實體與它所在圖層的顏色不一致。實體顏色的設置方法為:pEntity一>setCo1orIndexfnewColor)。
(4)設置實體圖層:如果一個實體已經指定了圖層,那么當前數據庫的圖層值會被忽略。設置實體圖層的方法為:pEntity一>setLayer(pLayerId)。
2、圖形信息的提取原理和方法
2.1 圖形信息及提取原理
2.1.1 矢量圖的主要內容
(1)工程設計圖中的幾何實體包括:點、直線、圓和圓弧、多段線(POLYLINE)、文字、尺寸標注等,其幾何屬性有離散點的坐標,直線的端點坐標和線段的長度,圓的圓心坐標及半徑,多段線(POLYLINE)的各頂點坐標、線段的長度和面積及文字的起點坐標等。
(2)圖形的非幾何信息有圖層、顏色、線型、線寬及層的狀態等。
2.1.2 實體信息提取原理利用結果緩沖區和DXF接口方法,結合Obje—ctARX工具的實體獲取技術,可提取對象的坐標、圖層、線型、顏色等信息。
結果緩沖區用于存儲實體信息,根據緩沖區變量restype的返回值,結合DXF組代碼來判斷組值的類型,實體信息分類如下:
(1)DXF圖形交換文件由7個節(Section)組成,每節由0組和其組值Section開始,中間是若干個組,每組由組代碼和組值構成,節尾由0組和其組值ENDSEC組成。不同的組代碼對應的組值可為字符串、整型數、浮點數等。
(2)組代碼是0 9的整數,則返回值類型為字符串(RTSTR),組值為實體名稱、圖層名和線型等。
(3)組代碼是10~19之間的整數時,返回值的類型為RT3DPOINT,這種返回值為點的坐標:adsreal rpoint~3],由此可獲得圖形中的散點坐標值。
(4)組代碼為38~59的整數時,其返回值的類型為RTREAL,其值為實型數,其中,組代碼39的組值為厚度(thickness)、組代碼40的組值為高度(如等高線的高程)、半徑等,其他組代碼的組值為角度等。
(5)組代碼是60~79的整數時,返回值為短整型RTSHORT,如顏色號碼及對齊方式等。
2.2 實體信息提取方法在AutoCAD模型空間中,圖形為矢量圖,各對象有其對應的子類,在DXF接口中,實體的幾何與屬性信息對應不同的組代碼和組值,根據子類的不同可提取相應實體的幾何和屬性信息。多段線POLYLINE的子類為AcDbPolyline,DXF的組碼為0,組值為POLYLINE,以多段線的頂點信息提取為例,說明對象信息提取的原理和方法如下:
(1)獲取圖形實體運用ObjectARX開發工具中的acedSSGet(“a”,NULL,NULL,NULL,ads name all entities)函數獲取圖形數據實體,然后,用acedSSLength(ads_name aii entities,long entities count)函數獲取選擇集中的實體數目。
(2)獲取實體名稱利用acedSSName(ads name all entities,longi,ads name entity)函數,獲取all entities實體集合中第i個實體的名稱并存放于參數entity中。
(3)實體數據描述表在結果緩沖區中獲取實體數據的描述表:struct resbuf entitybuf=ads— entget(entity)。
獲取結果緩沖區中所存儲的entitybuf->restype為實體的DXF組代碼,entitybuf->resva1.rstring為組值,組代碼和組值分別為0和“POLYLINE”時,則該實體為P0n LINE.用acdbGetObjectId(AcDbObjectId plineObjIdads name entity)函數獲取POLYLINE實體標識符,再用該標識符對POLYLINE實體進行遍歷,獲取頂點個數和坐標:pLine一>getPointAt(n,data—plineIn]),并將頂點坐標存人數據文件中【5】。
3、圖形交互技術在線路平面和縱斷面設計線完成后,經常需要對線路平面圖的交點或縱斷面變坡點進行交互調整和修改,交互修改包括插入、刪除和移動點等方式。此處采用結構、指針,鏈表、實體數據獲取和操作等技術完成。
(1)獲取初始數據獲取工作路徑下的初始數據:設計標準、斷前和斷后里程、高程、繪圖比例等。
(2)建立縱斷面坡度線的數據結構為了便于存儲和操作坡度線的數據信息,坡度線的頂點結構體定義如下:struct podu{double k,X,h,h—Y,r;struct podu next;struct podu prior;}成員變量說明: 為變坡點連續里程,k 為變坡點X坐標,h是變坡點高程,h Y是變坡點Y坐標,r是豎曲線半徑。
(3)獲取坡度線數據:先選擇對象:ads entsel(“\n請選擇坡段,然后根據需要移動變坡點:\n”,pd— line,p0);再獲取實體標識:acdbGetObjectId(plineObjId,pd_ line);遍歷實體PP—iterate(plineObjId);設置結構首地址podu:podu start.
(4)判斷所選多段線是否為坡度線根據已存儲的設計坡段數據與所獲取的多段線頂點鏈表數據比較,運用while(podu){}循環判斷所選多段線是否為坡度線。若是坡度線,則進行插入操作。
(5)首先判斷該段坡度是否滿足最大限坡的要求,若滿足條件,則建立坡度線鏈表。根據坡長和坡度計算插入點的坐標,判斷插入點在鏈表中的位置,再將該點插入坡度線鏈表中,然后將鏈表中的數據寫入數據文件中,以備后用。
(6)獲取結果緩沖區中的實體選擇集:ads SS—get(“X”,NULL,NULL,&ebl,ssname);測量選擇集中的實體個數:ads— sslength(ssname,&ilast);在選擇集中逐個刪除實體:for(k:0;
(7)重新生成坡度線根據重新生成的坡度線數據,利用坡度線繪圖接口畫出新的坡度線,接口函數如下:draw— pd(path—name—pd,n—dl,dl,h~scale,st—ic,orientation,hum—dg,dg—SZ,bz~ jj);
4、應用實例運用以上圖形接口方法和圖形數據提取技術開發了鐵路選線CAD系統,圖1為該系統生成的一段鐵路縱斷面圖[6].系統主要特點如下:
(1)實現了線路平面和豎向設計可視化設計功能,由設計過程產生設計數據和設計文件,根據設計數據生成平面、縱斷面和橫斷面圖,改變了其他軟件必須由人工輸入設計數據而后產生設計圖的做法,真正實現了計算機輔助設計的功能[7]_
(2)針對選線中的地形圖和數字地模(DEM),實現了數字地面模型形成與格式轉換。
(3)在平面和豎向設計過程中自動產生設計數據,實現了設計圖和數據的聯動、插入、移動、合并和刪除等修改功能,實現了線路中的斷鏈處理等功能
5、結束語
在計算機輔助設計中,軟件平臺和開發工具雖多種多樣,但圖形接口、交互技術、數據提取和存儲是CAD開發的主要研究內容。本文采用VisualC++2005語言和強大的ObjectARX 2008二次開發工具,直接對圖形數據庫進行操作,結合鐵路選線設計原理、過程和設計經驗,開發了符合實際設計要求的選線設計CAD系統,解決了勘測設計的實際問題和難題,為勘測設計人員快速有效地實施設計思想提供了現代化的設計手段,極大地減輕了設計人員的勞動強度,提高了設計效率。
參考文獻
[1]余承飛,方勇編。AutoCAD 2000二次開發技術(ObjectARX)[M1.北京:人民郵電出版社,1999:25-30.
[2]老大中,趙占強。AutoCAD 2000 ARX二次開發實例精粹(ObjectARX)[M1.北京:國防工業出版社,2001:50-56.
[3]程耀東,張麗萍,韓進,等。計算機繪圖教程與二次開發方法fM】。蘭州: 甘肅科技出版社,2009:525-533.
[4]李世國。AutoCAD高級開發技術:ARX編程及應用【MI.北京:機械工業出版社,2001:50-56.
[5]程耀東。基于ObjectARX 2007的地質斷面自動填充方法fJJ.物探與物化,2010,34(5):681—685.
[6]易思蓉。鐵路選線設計(M1.成都:西南交通大學出版社,2005:75—124.
[7]葛根榮。鐵路選線三維聯動可視化CAD系統的開發與應用{J】。鐵道勘察,2005,31(4):I-3.
[8]王衛東,蔣紅斐。道路與鐵道工程計算機輔助設計【M1.北京:機械工業出版社,2004:109-130.
【基于鐵路選線CAD系統的圖形接口方法與交互技術】相關文章:
基于USB接口的數據采集系統設計03-18
基于USB接口的數據傳輸系統的研究與設計03-15
基于Web技術的網絡考試系統03-18
基于USB接口的數據采集系統-GSM功率測量VC++03-08
基于USB接口的心電信號數據采集系統03-19
基于Web的交互式數據庫查詢技術03-20
交互電視技術03-18