Open Cascade DataExchange IGES

时间:2022-02-05 19:23:38

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

Open Cascade DataExchange IGES

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

Open Cascade DataExchange IGES

Figure 2.2 General file structure of the Fixed Format

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

Open Cascade DataExchange 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所示:

Open Cascade DataExchange IGES

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=;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 ;
}

生成的IGES文件内容如下所示:

Open Cascade DataExchange 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所示。

Open Cascade DataExchange IGES

Figure 4.2 Curve and Surface Entities

Open Cascade DataExchange IGES

Figure 4.3 Parameter Data of Circle Entity in IGES

Open Cascade DataExchange 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

Open Cascade DataExchange IGES的更多相关文章

  1. Open Cascade DataExchange DXF

    Open Cascade DataExchange DXF eryar@163.com 摘要Abstract:对DXF文本格式进行详细介绍,并介绍了如何使用开源库dxflib对DXF文件进行读写操作, ...

  2. Open CASCADE Technology&colon; IGES Support

    2015/6/4 Open CASCADE Technology: IGES Support http://www.opencascade.org/doc/occt­6.7.0/overview/ht ...

  3. Open Cascade Data Exchange STL

    Open Cascade Data Exchange STL eryar@163.com 摘要Abstract:介绍了三维数据交换格式STL的组成,以及Open Cascade中对STL的读写.并将O ...

  4. opencascade读取iges并用vtk离散的一些问题

    近期抽时间在弄iges文件内容读取的工作.然后将其离散化在vtk中能够显示处理以及兴许的一些工作.主要目的是识别CAD文件导出的模型,然后进行离散处理.方便兴许的处理.离散工作比較简单.opencas ...

  5. Open CASCADE Technology&lpar;OCCT&rpar;概述

    OCCT模块结构图 基础类: Foundation Classes module underlies all other OCCT classes; 模型数据: Modeling Data modul ...

  6. OPEN CASCADE编译视频

    为了帮助OPEN CASCADE新手顺利编译OPEN CASCADE源码,特录制了一个视频, 有了这个视频,OPEN CASCADE的编译再也不麻烦啦!

  7. Function Set in OPEN CASCADE

    Function Set in OPEN CASCADE eryar@163.com Abstract. The common math algorithms library provides a C ...

  8. Apply Newton Method to Find Extrema in OPEN CASCADE

    Apply Newton Method to Find Extrema in OPEN CASCADE eryar@163.com Abstract. In calculus, Newton’s me ...

  9. 《A Convolutional Neural Network Cascade for Face Detection》

    文章链接:   http://pan.baidu.com/s/1bQBJMQ  密码:4772 作者在这里提出了基于神经网络的Cascade方法,Cascade最早可追溯到Haar Feature提取 ...

随机推荐

  1. HDU2243&lowbar;考研路茫茫&horbar;&horbar;单词情结

    给出一些词根,问你有多少种长度为L的串包含至少一个词根. 去年就在敲这个题了,今年才敲出来,还是内牛满面之中... 要求包含至少一个的情况,需要求出所有的情况,减去一个都没有的情况就可以了. 对于给出 ...

  2. ICPC-CAMP day1 D&period;Around the world

    Around the world 题目连接: 无 Description 给你一个n*n的矩阵,然后a[i][j]表示i,j是否有一条边 然后让你构造一个序列,使得i到(i+1)%n这两个点之间最多经 ...

  3. NYOJ 994 海盗分金 逆向递推

    链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=994 题意: 有n个海盗劫得了窖藏的m块金子,并准备瓜分这些战利品.按照古老流传下来的分金法则 ...

  4. HBase 简介(强烈推荐看)

    本博文的主要内容有: .HBase定义 .HBase 的特点 .HBase 访问接口  .HBase 存储结构 .HBase设计 .HBase安装 .HBase shell操作  .输入 help 可 ...

  5. ExtJS简单的动画效果(ext js淡入淡出特效)

    1.html页面:Application HTML file - index.html <html> <head> <title>ExtJs fadeIn() an ...

  6. Java多线程中变量的可见性

    之所以写这篇博客, 是因为在csdn上看到一个帖子问的就是这个问题. 废话不多说, 我们先看看他的代码(为了减少代码量, 我将创建线程并启动的部分修改为使用方法引用). 1 2 3 4 5 6 7 8 ...

  7. TortoiseSVN使用简介

    TortoiseSVN使用简介 2009-04-24 来源: dev.idv.tw 1.安装及下载client 端 2.什么是SVN(Subversion)? 3.为甚么要用SVN? 4.怎么样在Wi ...

  8. mongodb 聚合查询

    操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的字段排序结 ...

  9. MySQL,简单了解下、

    第一章 数据备份与导入导出 1.1.备份基本概念介绍 1.2.mysqldump详解 1.3.mydumper浅析 1.4.MySQL物理备份基本操作 1.5.了解mysqlpump工具 1.6.数据 ...

  10. linux下git怎么保存账号密码

    我是用 shell 命令来执行 git 操作的,所以就决定在 --global 配置一下用户名和密码,不用每次手动输入了. 设置步骤 1. 首先需要 ftp 连接到你的 Linux 服务器,在根目录( ...