• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            Open Cascade DataExchange IGES

            Posted on 2014-01-04 21:35 eryar 閱讀(7462) 評論(4)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            Open Cascade DataExchange IGES

            eryar@163.com

            摘要Abstract:本文結合OpenCascade和Initial Graphics Exchange Specification來對IGES格式進行詳細說明,理解IGES格式的結構,進而方便對OpenCascade中IGES格式文件讀寫的實現進行理解。

            關鍵字Key Words:IGES、Open Cascade、Data Exchange

            一、引言 Introduction

            目前市面上的CAD系統都有自己的數據文件,各個系統之間的數據結構和格式各不相同,這樣極大影響了設計和制造部門之間或企業之間的數據傳輸和程序銜接的自動化,同樣給CMM和CAD/CAM的數據通信帶來困難。因此,迫切需要數據交換文件格式的標準化。

            產品數據的正確交換可以使雙方不必重建數據,提高效率。產品數據交換的通常做法是使用數據交換接口,即需要交換的每一系統與標準數據格式(中性格式)之間開發雙向轉換接口,兩系統通過中性格式進行交換。

            20世紀70年代末80年代初以來,國際上已做了大量數據交換標準的研究、制定工作。自1980年最早出現IGES1.0后,又產生了許多其他規范如XBF、SET、VDA-FS、PDDI、ESP、CAD*I、PDES等。這些規范各有不同的目的和使用范圍,同時也存在著各種問題。在這些規范中,應用最成熟、最廣泛的是IGES(Initial Graphics Exchange Specification)。ISO在上述規范的基礎上,制定了新的數據交換標準STEP(Standard for the Exchange of Product Model data),其目的是覆蓋過去已經存在的規范的功能,并解決實際應用中存在的問題。

            IGES是在美國國家標準局的倡導下,由美國國家標準協會(ANSI)組織波音公司、通過公司等共同商議制訂的,1980年公布第一版,以后不斷完善和擴充,版本不斷升級,從IGES1.0僅包含二維圖形到IGES3.0支持曲面和三維線框幾何,IGES4.0版支持構造實體幾何(CSG)造型技術,IGES5.0支持邊界表示(BRep)造型技術。目前幾乎所有有影響的CAD/CAM系統都配有IGES接口,如Pro/E、CATIA、OpenCascade等。它由一系列產品的幾何、繪圖、結構和其他信息組成,可以處理CAD/CAM系統中的在部分信息,是用來定義產品幾何形狀的現代交互圖形標準。

            本文結合OpenCascade和Initial Graphics Exchange Specification來對IGES格式進行詳細說明,理解IGES格式的結構,進而方便對OpenCascade中IGES格式文件讀寫實現的方式進行理解。

            二、IGES規范 the Initial Graphics Exchange Specification

            IGES是一種按特定的文件結構安排的數據格式,用來描述產品的設計和生產信息,可用它來交換CAD/CAM系統中以計算機可讀的形式產生和存儲的各種信息。標準的IGES文件包含固定長ASCII碼(Fixed Format)、壓縮的ASCII碼(Compressed Format)和二進制(Binary Format)三種格式。

            固定長ASCII碼的IGES文件每行為80個字符,整個文件分為五段(Section):開始段(Start)、全局段(Global)、元素索引段(Direction Entry)、參數數據段(Parameter Data)和結束段(Terminate)。如圖2.1所示:

            wps_clip_image-21659

            Figure 2.1 Fixed File Formats of ASCII IGES File

            段標識符位于每行的第73列,74~80列指定為用于段每行的序號。序號都以1開始,且連續不間斷,其值對應該段的列數。段標識符是這樣規定的,字符“B”和“C”表示標記段;“S”表示開始段;“G”表示全局段;“D”表示元素索引段;“P”表示參數記錄參數記錄段;“T”表示結束段。固定長的ASCII格式的IGES格式的大概結構如下圖2.2所示:

            wps_clip_image-17890

            Figure 2.2 General file structure of the Fixed Format

            下面結合具體的IGES文件來對每個段進行說明,僅包含一個點的示例文件如下所示:

            wps_clip_image-18936

            Figure 2.3 IGES demo file Generated by OpenCascade

            開始段Start Section:該段是為提供一個可讀文件的序言,主要記錄圖形文件的最初來源及生成該IGES文件的相同名稱。IGES文件至少有一個開始記錄。

            全局段Global Section:主要包含前處理器的描述信息及為處理該文件的后處理器所需要的信息。參數以自由的格式輸入,用逗號分隔參數,用分號結束一個參數。主要參數有文件名、前處理器版本、單位、文件生成日期、作者姓名及單位、IGES的版本、繪圖標準代碼等。如圖2.3中的2~5行。

            元素索引段Directory Entry Section:該段主要為文件提供一個索引,并含有每個實體的屬性信息,文件中每個實體都有一個目錄條目,大小一樣,由8個字符組成一個域,共20個域,每個條目占用兩行。如圖2.4所示:

            wps_clip_image-16738

            Figure 2.4 Format of the Directory Entry(DE) Section in the Fixed Format

            每一項內容如下:

            l 元素類型號(Entity Type Number):說明元素的類型;

            l 參數指針(Parameter Data):說明該元素的參數在參數數據段的開始序號;

            l 圖層:存放圖層名和它的指針;

            l 參數記錄數(Parameter Line Count):數字代表該元素的參數在參數數據段的行數;

            參數數據段Parameter Data Section:該段記錄了每個元素的幾何數據。根據每個圖形元素參數數的多少,決定它將有幾行。如圖2.3所示,116為點,它有三個數據X,Y和Z,分別為1,2,3。

            結束段Terminate Section:只占一行,在前32個字符里,分別用8個字符記錄了開始段、全局段、索引段和參數數據段的段碼和每段的總行數。第33~72個字符沒有用到。最后8個字符為結束段的段碼和行數。

            三、OpenCascade中IGES讀寫 OpenCascade IGES Reader/Writer

            OpenCascade中提供IGES的程序接口有如下功能:

            l 加載IGES文件到內存;loading IGES files into memory;

            l 檢查IGES文件的一致性;checking IGES files consistency;

            l 轉換IGES文件到OCCT的形狀;translating IGES files into OCCT shapes;

            l 轉換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;

            實現上述功能的包是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形狀轉換為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中的形狀數據導出到IGES文件,結合IGES規格書,可以方便對IGES格式的理解。如下程序所示為將簡單的點、線和圓導出到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.02.03.0));

                vertices.Append(theVertex);

                SaveIges(
            "vertex.iges", vertices);

                
            // edges.
                TopTools_ListOfShape edges;
                TopoDS_Edge theLine 
            = BRepBuilderAPI_MakeEdge(gp_Pnt(3.04.05.0), gp_Pnt(6.07.08.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文件內容如下所示:

            wps_clip_image-28112

            Figure 4.1 Simple Fixed Format IGES File

            結合下圖4.2中實體類型號與實體類型的對應表可知,上圖4.1中的元素索引D段可以看總共有三個實體,一個是類型號為116的點;一個是類型號為110的直線;一個是類型號為100的圓。

            從數據參數P段可以看出116對應的點的坐標為(1,2,3);110對應的直線的兩個端點坐標為(3,4,5)和(6,7,8);100對應的圓的數據為圓心在(0,0)半徑為9的位于XY平面上的圓。圓的參數數據項每項數據說明見圖4.3。

            將IGES在OpenCascade中顯示如圖4.4所示。

            wps_clip_image-6405

            Figure 4.2 Curve and Surface Entities

            wps_clip_image-14168

            Figure 4.3 Parameter Data of Circle Entity in IGES

            wps_clip_image-22491

            Figure 4.4 IGES Entities in OpenCascade

            五、結論 Conclusion

            結合OpenCascade生成的IGES文件和Initial Graphics Exchange Specification來對IGES格式進行學習。

            雖然目前許多CAD/CAM系統主要應用是在不同系統間交換工程圖紙、零件模型、運動仿真和動態實驗所需要的幾何數據,裝配或銷售產品所需要的圖形文件,但是IGES標準在具體應用中經常出現以下問題:

            l 交換過程中會出現錯誤或數據丟失現象。由于IGES所支持的實體十分龐大,在實際應用中,每一個CAD/CAM系統不可能實現IGES支持的所有實體,而只能實現它所涉及的實體的交換,即只能實現IGES實體集的一個子集,但不同系統所實現的子集不可能完全相同。系統之間只能交換所實現子集的交集部分。

            l 發送系統前處理器生成的IGES文件的實體類型超出了接收系統后處理器可能接受的實體類型范圍,以及發送系統與接收系統之間實體類型集雖相同,但有關屬性如顏色、字體、線型等代碼不同,也將使部分數據丟失。

            l IGES的目的只是傳輸工程圖形及相應信息,它無法描述CIMS環境所需要的產品數據的全部信息。而且IGES對實體的定義是模糊的,這將造成各CAX系統對IGES中定義的實體有不同的理解,如相同的3D曲線功能會因不同軟件的計算方式不同而使在使用IGES來執行圖形交換時出現不同的曲線或丟失該曲線。

            l IGES文件本身規模太大,影響數據文件的處理速度,使數據傳輸效率不高。

            l 在轉換數據的過程中發生的錯誤很難確定,常要人工去處理IGES文件,如在轉換數據的過程中經常發生某個或某幾個小曲面丟失的情況,這是要利用原有曲面邊界重新生成曲面;某些小曲面(Face)在轉換過程中變成大曲面(Surface),此時要對曲面進行裁剪。

            六、參考資料 References

            1. 李原,張開富,余劍鋒. 計算機輔助幾何設計技術及應用. 西北工業大學出版社. 2007

            2. US PRO. Initial Graphics Exchange Specification .1997

            3. OpenCascade. Data Exchange IGES Format User’s Guide. 2013

             

            Feedback

            # re: Open Cascade DataExchange IGES  回復  更多評論   

            2018-06-29 14:37 by birds
            博主您好,
            我在使用bounds函數時發現,該函數對于導入的模型邊界大小范圍永遠是0-1之內,但是通過occ自己生成的曲面卻能得到精確的邊界值大小。這是為什么?

            # re: Open Cascade DataExchange IGES  回復  更多評論   

            2018-06-29 20:53 by eryar
            @birds
            這個要看你的曲面是什么類型。
            occ中的曲面有平面、圓柱面等解析曲面,這類曲面的參數范圍不一定是0~1;
            如果是B樣條曲面,參數范圍一般是0~1.
            建議你可以看看occ的數據結構ModelingData模塊。

            # re: Open Cascade DataExchange IGES  回復  更多評論   

            2018-06-30 21:05 by birds
            謝謝,我懂了。還有一個問題請教博主,那就是我想在一個模型表面通過(u,v)提取坐標點,但是往往導入模型occ識別時都不是單一面(也就是有很多個topods_face),這樣就需要我對每個面分別處理一次得到一批點,最后導致得到的點區域化,沒有規律,并且在面與面交線處有重復點,所以我想問博主的是,有沒有辦法可以將多個面轉化為一個面進行參數化處理,一次性得到所有的點。謝謝

            # re: Open Cascade DataExchange IGES  回復  更多評論   

            2018-07-03 14:24 by eryar
            @birds
            可以用擬合算法根據這些面擬合出一個面。
            精品99久久aaa一级毛片| 国产精品亚洲美女久久久| 久久久久久无码国产精品中文字幕| 久久久久久亚洲AV无码专区| 久久中文精品无码中文字幕| 丁香五月综合久久激情| 久久综合九色综合97_久久久| 精品国产乱码久久久久久1区2区| 亚洲日本久久久午夜精品| 久久97久久97精品免视看秋霞| 91久久精品视频| 国产精品亚洲美女久久久| 青春久久| 日韩人妻无码精品久久免费一| 久久久婷婷五月亚洲97号色| 久久这里只有精品18| 综合久久国产九一剧情麻豆| 亚洲综合熟女久久久30p| 欧洲精品久久久av无码电影| 97热久久免费频精品99| 欧美精品一本久久男人的天堂| 国产综合免费精品久久久| 久久久WWW成人免费精品| 精品久久久久久久久免费影院| 思思久久99热只有频精品66| 久久婷婷五月综合色高清| 99久久精品日本一区二区免费| 一本久久a久久精品综合夜夜| 久久亚洲AV永久无码精品| 精品久久亚洲中文无码| 91精品国产综合久久婷婷| 国产一区二区三精品久久久无广告| 久久精品无码免费不卡| 久久精品国产乱子伦| 91久久婷婷国产综合精品青草| 久久九九久精品国产免费直播| 亚洲综合伊人久久大杳蕉| 丁香五月综合久久激情| 久久综合给合久久国产免费| 国产一级做a爰片久久毛片| 亚洲精品国精品久久99热|