Open Cascade DataExchange IGES

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所示:

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所示:

Figure 2.2 General file structure of the Fixed Format

下面结合具体的IGES文件来对每个段进行说明,仅包含一个点的示例文件如下所示:

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所示:

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.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文件内容如下所示:

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所示。

Figure 4.2 Curve and Surface Entities

Figure 4.3 Parameter Data of Circle Entity in IGES

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

 

PDF Version: Open Cascade DataExchange IGES

时间: 2024-09-20 12:13:06

Open Cascade DataExchange IGES的相关文章

Open Cascade DataExchange DXF

Open Cascade DataExchange DXF eryar@163.com 摘要Abstract:对DXF文本格式进行详细介绍,并介绍了如何使用开源库dxflib对DXF文件进行读写操作,并将DXF文件中图形导入到OpenCascade. 关键字Key Words:DXF.Open Cascade.Data Exchange, dxflib 一.引言 Introduction 目前市面上的CAD系统都有自己的数据文件,各个系统之间的数据结构和格式各不相同,这样极大影响了设计和制造部门

Open Cascade Data Exchange --- STL

Open Cascade Data Exchange --- STL eryar@163.com 摘要Abstract:介绍了三维数据交换格式STL的组成,以及Open Cascade中对STL的读写.并将Open Cascade读进来的STL的三角面片在OpenSceneGraph中显示. 关键字Key Words:STL, Open Cascade, OpenSceneGraph, Data Exchange STL(the Stereo Lithograpy)是快速原型系统所应用的标准文件

Oracle外键约束修改行为(四)如何实现UPDATE CASCADE

Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作.    这篇描述一下如何实现UPDATE CASCADE.         前面几篇文章介绍了Oracle所支持的3种约束行为NO ACTION.DELETE SET NULL和DELETE CASCADE.    至于SQL标准中定义的其他操作,Oracle只能通过触发器来实现,这里给出一个简单的UPDATE CASCADE操作的例子.    SQL

Oracle外键约束修改行为(三)CASCADE操作

Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 这篇简单描述一下CASCADE操作. 上一篇描述了Oracle外键处理操作:SET TO NULL,这里简单介绍一下CASCADE操作.还是利用前面例子的表,不过约束需要重建. SQL> DROP TABLE T_C; 表已删除. SQL> DROP TABLE T_P; 表已删除. SQL> CREATE TABLE T_P (ID NUM

CSS样式表层叠(cascade)处理冲突

  即使在不太复杂的样式表中,也可能会有两个或者更多个规则找到同一元素.CSS通过一个叫做层叠(cascade)的过程处理这种冲突.层叠给每个规则分配一个重要程度指数.作者定义的样式具有最高的重要性指数,其次是用户定义的样式.但是为了增强用户的控制能力,用户可以通过为任何规则增加一个!important来提高它的重要性指数,让它的优先级高于任何规则,甚至是比作者的!important还要高. 因此,层叠重要性指数的次序依次为: 标记为!important的用户样式 标记为!important的作

OPENCV中CASCADE的生成

在网上找了很多有关于OPENCV生成CASCADE的文章,大多数都来自同一篇文章,但文章有些老而且不好用 我在一个CASCADE2XML程序中找到了其自述文档,写的相当细致,我将其翻译过来,希望后来人能够看到少走弯路 另外,现在的OPENCV是1.1pre版已经不存在生成的CASCADE转换为XML文件的问题了,这个问题可以忽略 致意 这个小文档告诉你怎样去建立自己的层级训练集. 假设你已经安装了OpenCv和你已经安装了windows. 在这个指导文档使用了额OpenCv beta 5. 准备

hibernate一对一双向关联的cascade问题

问题描述 一张Admin表,一张AdminInfo表Admin表publicclassAdminimplementsjava.io.Serializable{/*Id*/@Id@GenericGenerator(name="systemUUID",strategy="uuid")@GeneratedValue(generator="systemUUID")privateStringadminId;/*姓名*/@Column(nullable=fa

cascade,fetch

一.cascade all       所有操作 merge      合并 persist     存储 refresh     刷新 remove     删除 举例: @ManyToOne(cascade={CascadeType.ALL}) 若2个对象存在关系,进行级联操作后 可以将对象的属性(zu.name)修改后再保存到另一个对象(u). 双向关系一般要设置双向关联和mappedBy. 二.fetch(主要针对读取)      举例:get读取时     默认情况下,读取多的一方会把

oracle使用drop user cascade报错ora-69解决办法

1. 现象:  代码如下 复制代码 SQL> drop user test cascade; drop user test cascade * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-00069: cannot acquire lock -- table locks disabled for T1     SQL> conn test/test Connected. SQL> SQL&