Open Cascade DataExchange IGES
eryar@163.com
摘要Abstract:本文結(jié)合OpenCascade和Initial Graphics Exchange Specification來對IGES格式進(jìn)行詳細(xì)說明,理解IGES格式的結(jié)構(gòu),進(jìn)而方便對OpenCascade中IGES格式文件讀寫的實現(xiàn)進(jìn)行理解。
關(guān)鍵字Key Words:IGES、Open Cascade、Data Exchange
一、引言 Introduction
目前市面上的CAD系統(tǒng)都有自己的數(shù)據(jù)文件,各個系統(tǒng)之間的數(shù)據(jù)結(jié)構(gòu)和格式各不相同,這樣極大影響了設(shè)計和制造部門之間或企業(yè)之間的數(shù)據(jù)傳輸和程序銜接的自動化,同樣給CMM和CAD/CAM的數(shù)據(jù)通信帶來困難。因此,迫切需要數(shù)據(jù)交換文件格式的標(biāo)準(zhǔn)化。
產(chǎn)品數(shù)據(jù)的正確交換可以使雙方不必重建數(shù)據(jù),提高效率。產(chǎn)品數(shù)據(jù)交換的通常做法是使用數(shù)據(jù)交換接口,即需要交換的每一系統(tǒng)與標(biāo)準(zhǔn)數(shù)據(jù)格式(中性格式)之間開發(fā)雙向轉(zhuǎn)換接口,兩系統(tǒng)通過中性格式進(jìn)行交換。
20世紀(jì)70年代末80年代初以來,國際上已做了大量數(shù)據(jù)交換標(biāo)準(zhǔn)的研究、制定工作。自1980年最早出現(xiàn)IGES1.0后,又產(chǎn)生了許多其他規(guī)范如XBF、SET、VDA-FS、PDDI、ESP、CAD*I、PDES等。這些規(guī)范各有不同的目的和使用范圍,同時也存在著各種問題。在這些規(guī)范中,應(yīng)用最成熟、最廣泛的是IGES(Initial Graphics Exchange Specification)。ISO在上述規(guī)范的基礎(chǔ)上,制定了新的數(shù)據(jù)交換標(biāo)準(zhǔn)STEP(Standard for the Exchange of Product Model data),其目的是覆蓋過去已經(jīng)存在的規(guī)范的功能,并解決實際應(yīng)用中存在的問題。
IGES是在美國國家標(biāo)準(zhǔn)局的倡導(dǎo)下,由美國國家標(biāo)準(zhǔn)協(xié)會(ANSI)組織波音公司、通過公司等共同商議制訂的,1980年公布第一版,以后不斷完善和擴(kuò)充,版本不斷升級,從IGES1.0僅包含二維圖形到IGES3.0支持曲面和三維線框幾何,IGES4.0版支持構(gòu)造實體幾何(CSG)造型技術(shù),IGES5.0支持邊界表示(BRep)造型技術(shù)。目前幾乎所有有影響的CAD/CAM系統(tǒng)都配有IGES接口,如Pro/E、CATIA、OpenCascade等。它由一系列產(chǎn)品的幾何、繪圖、結(jié)構(gòu)和其他信息組成,可以處理CAD/CAM系統(tǒng)中的在部分信息,是用來定義產(chǎn)品幾何形狀的現(xiàn)代交互圖形標(biāo)準(zhǔn)。
本文結(jié)合OpenCascade和Initial Graphics Exchange Specification來對IGES格式進(jìn)行詳細(xì)說明,理解IGES格式的結(jié)構(gòu),進(jìn)而方便對OpenCascade中IGES格式文件讀寫實現(xiàn)的方式進(jìn)行理解。
二、IGES規(guī)范 the Initial Graphics Exchange Specification
IGES是一種按特定的文件結(jié)構(gòu)安排的數(shù)據(jù)格式,用來描述產(chǎn)品的設(shè)計和生產(chǎn)信息,可用它來交換CAD/CAM系統(tǒng)中以計算機(jī)可讀的形式產(chǎn)生和存儲的各種信息。標(biāo)準(zhǔn)的IGES文件包含固定長ASCII碼(Fixed Format)、壓縮的ASCII碼(Compressed Format)和二進(jìn)制(Binary Format)三種格式。
固定長ASCII碼的IGES文件每行為80個字符,整個文件分為五段(Section):開始段(Start)、全局段(Global)、元素索引段(Direction Entry)、參數(shù)數(shù)據(jù)段(Parameter Data)和結(jié)束段(Terminate)。如圖2.1所示:
Figure 2.1 Fixed File Formats of ASCII IGES File
段標(biāo)識符位于每行的第73列,74~80列指定為用于段每行的序號。序號都以1開始,且連續(xù)不間斷,其值對應(yīng)該段的列數(shù)。段標(biāo)識符是這樣規(guī)定的,字符“B”和“C”表示標(biāo)記段;“S”表示開始段;“G”表示全局段;“D”表示元素索引段;“P”表示參數(shù)記錄參數(shù)記錄段;“T”表示結(jié)束段。固定長的ASCII格式的IGES格式的大概結(jié)構(gòu)如下圖2.2所示:
Figure 2.2 General file structure of the Fixed Format
下面結(jié)合具體的IGES文件來對每個段進(jìn)行說明,僅包含一個點(diǎn)的示例文件如下所示:
Figure 2.3 IGES demo file Generated by OpenCascade
開始段Start Section:該段是為提供一個可讀文件的序言,主要記錄圖形文件的最初來源及生成該IGES文件的相同名稱。IGES文件至少有一個開始記錄。
全局段Global Section:主要包含前處理器的描述信息及為處理該文件的后處理器所需要的信息。參數(shù)以自由的格式輸入,用逗號分隔參數(shù),用分號結(jié)束一個參數(shù)。主要參數(shù)有文件名、前處理器版本、單位、文件生成日期、作者姓名及單位、IGES的版本、繪圖標(biāo)準(zhǔn)代碼等。如圖2.3中的2~5行。
元素索引段Directory Entry Section:該段主要為文件提供一個索引,并含有每個實體的屬性信息,文件中每個實體都有一個目錄條目,大小一樣,由8個字符組成一個域,共20個域,每個條目占用兩行。如圖2.4所示:
Figure 2.4 Format of the Directory Entry(DE) Section in the Fixed Format
每一項內(nèi)容如下:
l 元素類型號(Entity Type Number):說明元素的類型;
l 參數(shù)指針(Parameter Data):說明該元素的參數(shù)在參數(shù)數(shù)據(jù)段的開始序號;
l 圖層:存放圖層名和它的指針;
l 參數(shù)記錄數(shù)(Parameter Line Count):數(shù)字代表該元素的參數(shù)在參數(shù)數(shù)據(jù)段的行數(shù);
參數(shù)數(shù)據(jù)段Parameter Data Section:該段記錄了每個元素的幾何數(shù)據(jù)。根據(jù)每個圖形元素參數(shù)數(shù)的多少,決定它將有幾行。如圖2.3所示,116為點(diǎn),它有三個數(shù)據(jù)X,Y和Z,分別為1,2,3。
結(jié)束段Terminate Section:只占一行,在前32個字符里,分別用8個字符記錄了開始段、全局段、索引段和參數(shù)數(shù)據(jù)段的段碼和每段的總行數(shù)。第33~72個字符沒有用到。最后8個字符為結(jié)束段的段碼和行數(shù)。
三、OpenCascade中IGES讀寫 OpenCascade IGES Reader/Writer
OpenCascade中提供IGES的程序接口有如下功能:
l 加載IGES文件到內(nèi)存;loading IGES files into memory;
l 檢查IGES文件的一致性;checking IGES files consistency;
l 轉(zhuǎn)換IGES文件到OCCT的形狀;translating IGES files into OCCT shapes;
l 轉(zhuǎn)換OCCT的形狀到IGES文件;translating OCCT shapes into IGES files;
l 訪問IGES文件模型;accessing the IGES model;
l 選擇IGES文件模型中的實體;selecting entities from the IGES model;
l 訪問IGES文件模型中的每個實體;accessing each entity in the IGES model;
實現(xiàn)上述功能的包是IGESControl,可處理的IGES文件格式的版本為5.3。讀取IGES文件實體到OCCT形狀的方法如下所示:
Standard_Integer ReadIGES(const Standard_CString& aFileName,
Handle(TopTools_HSequenceOfShape)& aHSequenceOfShape)
{
IGESControl_Reader Reader;
Standard_Integer status = Reader.ReadFile(aFileName);
if (status != IFSelect_RetDone)
{
return status;
}
Reader.TransferRoots();
TopoDS_Shape aShape = Reader.OneShape();
aHSequenceOfShape->Append(aShape);
return status;
}
將OCCT形狀轉(zhuǎn)換為IGES文件方法如下所示:
Standard_Boolean SaveIGES(const Standard_CString& aFileName,
const Handle(TopTools_HSequenceOfShape)& aHSequenceOfShape)
{
IGESControl_Controller::Init();
IGESControl_Writer ICW (Interface_Static::CVal("XSTEP.iges.unit"),
Interface_Static::IVal("XSTEP.iges.writebrep.mode"));
for (Standard_Integer i=1;i<=aHSequenceOfShape->Length();i++)
{
ICW.AddShape (aHSequenceOfShape->Value(i));
}
ICW.ComputeModel();
Standard_Boolean result = ICW.Write(aFileName );
return result;
}
四、程序示例 Example Code
通過將OpenCascade中的形狀數(shù)據(jù)導(dǎo)出到IGES文件,結(jié)合IGES規(guī)格書,可以方便對IGES格式的理解。如下程序所示為將簡單的點(diǎn)、線和圓導(dǎo)出到IGES文件:
/*
* Copyright (c) 2014 eryar All Rights Reserved.
*
* File : Main.cpp
* Author : eryar@163.com
* Date : 2014-01-04 20:00
* Version : 1.0v
*
* Description : Export OpenCascade shape to IGES entities.
*
* Key Words : OpenCascade, IGES, DataExchange
*
*/
#define WNT
#include <gp_Pnt.hxx>
#include <gp_Circ.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Edge.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <IGESControl_Controller.hxx>
#include <IGESControl_Writer.hxx>
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKTopAlgo.lib")
#pragma comment(lib, "TKIGES.lib")
void SaveIges(const std::string& igesFile, const TopTools_ListOfShape& shapes)
{
IGESControl_Controller::Init();
IGESControl_Writer igesWriter;
for (TopTools_ListIteratorOfListOfShape si(shapes); si.More(); si.Next())
{
igesWriter.AddShape(si.Value());
}
igesWriter.ComputeModel();
igesWriter.Write(igesFile.c_str());
}
int main(void)
{
// vertices.
TopTools_ListOfShape vertices;
TopoDS_Vertex theVertex = BRepBuilderAPI_MakeVertex(gp_Pnt(1.0, 2.0, 3.0));
vertices.Append(theVertex);
SaveIges("vertex.iges", vertices);
// edges.
TopTools_ListOfShape edges;
TopoDS_Edge theLine = BRepBuilderAPI_MakeEdge(gp_Pnt(3.0, 4.0, 5.0), gp_Pnt(6.0, 7.0, 8.0));
TopoDS_Edge theCircle = BRepBuilderAPI_MakeEdge(gp_Circ(gp::XOY(), 9.0));
edges.Append(theLine);
edges.Append(theCircle);
SaveIges("edge.iges", edges);
// put them together.
TopTools_ListOfShape shapes;
shapes.Append(theVertex);
shapes.Append(theLine);
shapes.Append(theCircle);
SaveIges("shapes.iges", shapes);
return 0;
}
生成的IGES文件內(nèi)容如下所示:
Figure 4.1 Simple Fixed Format IGES File
結(jié)合下圖4.2中實體類型號與實體類型的對應(yīng)表可知,上圖4.1中的元素索引D段可以看總共有三個實體,一個是類型號為116的點(diǎn);一個是類型號為110的直線;一個是類型號為100的圓。
從數(shù)據(jù)參數(shù)P段可以看出116對應(yīng)的點(diǎn)的坐標(biāo)為(1,2,3);110對應(yīng)的直線的兩個端點(diǎn)坐標(biāo)為(3,4,5)和(6,7,8);100對應(yīng)的圓的數(shù)據(jù)為圓心在(0,0)半徑為9的位于XY平面上的圓。圓的參數(shù)數(shù)據(jù)項每項數(shù)據(jù)說明見圖4.3。
將IGES在OpenCascade中顯示如圖4.4所示。
Figure 4.2 Curve and Surface Entities
Figure 4.3 Parameter Data of Circle Entity in IGES
Figure 4.4 IGES Entities in OpenCascade
五、結(jié)論 Conclusion
結(jié)合OpenCascade生成的IGES文件和Initial Graphics Exchange Specification來對IGES格式進(jìn)行學(xué)習(xí)。
雖然目前許多CAD/CAM系統(tǒng)主要應(yīng)用是在不同系統(tǒng)間交換工程圖紙、零件模型、運(yùn)動仿真和動態(tài)實驗所需要的幾何數(shù)據(jù),裝配或銷售產(chǎn)品所需要的圖形文件,但是IGES標(biāo)準(zhǔn)在具體應(yīng)用中經(jīng)常出現(xiàn)以下問題:
l 交換過程中會出現(xiàn)錯誤或數(shù)據(jù)丟失現(xiàn)象。由于IGES所支持的實體十分龐大,在實際應(yīng)用中,每一個CAD/CAM系統(tǒng)不可能實現(xiàn)IGES支持的所有實體,而只能實現(xiàn)它所涉及的實體的交換,即只能實現(xiàn)IGES實體集的一個子集,但不同系統(tǒng)所實現(xiàn)的子集不可能完全相同。系統(tǒng)之間只能交換所實現(xiàn)子集的交集部分。
l 發(fā)送系統(tǒng)前處理器生成的IGES文件的實體類型超出了接收系統(tǒng)后處理器可能接受的實體類型范圍,以及發(fā)送系統(tǒng)與接收系統(tǒng)之間實體類型集雖相同,但有關(guān)屬性如顏色、字體、線型等代碼不同,也將使部分?jǐn)?shù)據(jù)丟失。
l IGES的目的只是傳輸工程圖形及相應(yīng)信息,它無法描述CIMS環(huán)境所需要的產(chǎn)品數(shù)據(jù)的全部信息。而且IGES對實體的定義是模糊的,這將造成各CAX系統(tǒng)對IGES中定義的實體有不同的理解,如相同的3D曲線功能會因不同軟件的計算方式不同而使在使用IGES來執(zhí)行圖形交換時出現(xiàn)不同的曲線或丟失該曲線。
l IGES文件本身規(guī)模太大,影響數(shù)據(jù)文件的處理速度,使數(shù)據(jù)傳輸效率不高。
l 在轉(zhuǎn)換數(shù)據(jù)的過程中發(fā)生的錯誤很難確定,常要人工去處理IGES文件,如在轉(zhuǎn)換數(shù)據(jù)的過程中經(jīng)常發(fā)生某個或某幾個小曲面丟失的情況,這是要利用原有曲面邊界重新生成曲面;某些小曲面(Face)在轉(zhuǎn)換過程中變成大曲面(Surface),此時要對曲面進(jìn)行裁剪。
六、參考資料 References
1. 李原,張開富,余劍鋒. 計算機(jī)輔助幾何設(shè)計技術(shù)及應(yīng)用. 西北工業(yè)大學(xué)出版社. 2007
2. US PRO. Initial Graphics Exchange Specification .1997
3. OpenCascade. Data Exchange IGES Format User’s Guide. 2013