當前位置:學問君>學習教育>畢業論文>

基於鐵路選線CAD系統的圖形接口方法與交互技術

學問君 人氣:1.12W

摘要:運用Visual c++ 2005和0bjeetARX 2008開發工具,探討圖形實體的創建與實體屬性的設定方法。

基於鐵路選線CAD系統的圖形接口方法與交互技術

利用結果緩衝區、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;創建實體數據描述表:不同的實體數據描述表的參數不同,以下爲直線、圓和文字的數據描述表的構建方法,其他實體的數據描述表也可依此方法建立?ist— 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 ll00],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)。