OpenCASCADE Extended Data Exchange - XDE
OpenCASCADE Extended Data Exchange - XDE
Abstract. OpenCASCADE Data Exchange allows developing OCCT-Based applications that can interact with other CAD systems by writing and reading CAD models to and from external data. The exchanges run smoothly regardless of the quality of external data or requirements to its internal representation, for example to the data types, accepted geometric inaccuracies, etc. Data Exchange is organized in a modular way as a set of interfaces that comply with various CAD formats: IGES, STEP, STL, VRML, etc. The interfaces allow software based on OCCT to exchange data with various CAD/PDM software packages, maintaining a good level of interoperability. Extended Data Exchange allows translating additional attributes attached to geometric data(colors, layers, names, materials, etc.)
Key Words. DataExchange, STEP, IGES, XDE, OCAF,
1. Introduction
OpenCASCADE的DataExchange数据交换模块可以通过读写CAD模型数据的方式与其他CAD系统进行交互。标准数据交换(Standardized Data Exchange)的接口可以查询和检查输入文件,转换文件中的CAD模型,正确性检查。目前开源部分支持的文件格式有:
l STEP(AP203:Mechanical Design;AP214:Automotive Design)
l IGES(5.3版本)
l VRML和STL;

Figure 1. 导入的STEP模型
2. Extended Data Exchange(XDE)
扩展的数据交换模块可以转换附加在几何BREP体中其他信息,如颜色、图层,组装结构等,因此提高与其他CAD软件的兼容性。目前包含这些信息的文件格式有IGES和STEP。XDE通过XCAF框架来读写包含颜色、图层等信息的IGES,STEP文件。

Figure 2. 使用XDE导入的模型
3. XDE Basic Terms
为了更好的理解XDE,定义了几个关键术语:
l Shape:单独的模型,不属于任何装配结构(a standalone shape, which does not belong to the assembly structure);
l Instance:其他模型的一个实例化,位置信息可以相同,也可以不同(a replication of another shape with a location that can be the same location or different one);
l Assembly:装配结构;
4. XDE Organization
XDE的基础是XCAF,XCAF是一个基于OCAF(Open CASCADE Technology Application Framework)框架的框架,可用于处理装配信息和其他属性数据。XDE使用OCAF来存储装配结构和属性,所以可以得到装配结构树的每层TopoDS表示。
5. Assemblies
XDE支持装配结构的读写。如下图所示:

Figure 3. 装配结构树
装配结构通过OCAF的Label/SubLabel来组织:

Figure 4. 一个简单的框架模型
类XCAFDoc_ShapeTool来管理Label中的模型属性。
6. Names
XDE支持读写IGES和STEP中的名字数据。这个关闭这个功能以减小文件。

Figure 5. 模型名字
7. Colors and Layers
XDE可以读写模型的颜色数据,使用到的类有:
l 通用颜色:generic color(XCAFDoc_ColorGen)
l 曲面颜色:surface color(XCAFDoc_ColorSurf)
l 曲线颜色:curve color(XCAFDoc_ColorCurv)

Figure 6. XDE颜色
8. Code Example
程序将Draw Test Harness的samples的XDE的例子模型来测试读取装配结构、颜色等信息。首先将例子模型通过命令:WriteStep D d:/rod.step来保存装配结构、颜色等数据到STEP格式。

Figure 7. XDE Samples in Draw Test Harness

Figure 8. Shapes with assembly and color info
使用XDE读取STEP文件代码示例如下:
Handle(XCAFDoc_ColorTool) aColorTool;
Handle(XCAFDoc_ShapeTool) aShapeTool; void visit(const TDF_Label& theLabel)
{
theLabel.EntryDump(std::cout); Handle(TDataStd_Name) aName;
if (theLabel.FindAttribute(TDataStd_Name::GetID(), aName))
{
std::cout << " Name: " << aName->Get() << std::endl;
} if (aColorTool->IsSet(theLabel, XCAFDoc_ColorGen))
{
Quantity_Color aColor;
aColorTool->GetColor(theLabel, aColor); std::cout << " Color: " << Quantity_Color::StringName(aColor.Name()) << std::endl;
} if (aShapeTool->IsShape(theLabel))
{
TopoDS_Shape aShape;
aShapeTool->GetShape(theLabel, aShape);
} for (TDF_ChildIterator c(theLabel); c.More(); c.Next())
{
visit(c.Value());
}
} void readStepXde(const std::string& theStepName)
{
Handle(TDocStd_Document) aDoc;
Handle(XCAFApp_Application) anApp = XCAFApp_Application::GetApplication();
anApp->NewDocument("MDTV-XCAF", aDoc); STEPCAFControl_Reader aStepReader;
aStepReader.SetColorMode(true);
aStepReader.SetNameMode(true); aStepReader.ReadFile(theStepName.c_str()); aStepReader.Transfer(aDoc); TDF_Label aRootLabel = aDoc->Main(); aShapeTool = XCAFDoc_DocumentTool::ShapeTool(aRootLabel);
aColorTool = XCAFDoc_DocumentTool::ColorTool(aRootLabel); visit(aRootLabel); } int main(int argc, char *argv[])
{
readStepXde("D:/rod.STEP"); return ;
}
程序运行结果如下图所示:

Figure 9. 使用XDE读取STEP装配结构、颜色、名字等
9. Conclusion
使用XDE模块支持STEP和IGES中的装配结构、颜色、名字等信息的读写,提高与其他CAD系统数据交换效果。
XDE主要使用OCAF框架来处理装配结构、属性信息,所以要使用XDE,必须理解OCAF的框架,OCAF框架也是一个基于Label的树结构。
OpenCASCADE Extended Data Exchange - XDE的更多相关文章
- OpenCASCADE Data Exchange - 3D PDF
OpenCASCADE Data Exchange - 3D PDF eryar@163.com Abstract. Today most 3D engineering model data are ...
- Open Cascade Data Exchange STL
Open Cascade Data Exchange STL eryar@163.com 摘要Abstract:介绍了三维数据交换格式STL的组成,以及Open Cascade中对STL的读写.并将O ...
- AVEVA Model Data Exchange Exports Structure Models
AVEVA Model Data Exchange Exports Structure Modelseryar@163.com Use Model Data Exchange Addin to exp ...
- Extended Data Type Properties [AX 2012]
Extended Data Type Properties [AX 2012] This topic has not yet been rated - Rate this topic Updated: ...
- 【12c】扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE
[12c]扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE 在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的 ...
- Oracle 12C 新特性之扩展数据类型(extended data type)
Oracle 12C 新特性-扩展数据类型,在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节.只要可能,扩展字 ...
- Overview of OpenCascade Library
Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...
- OpenCascade简介
OpenCascade简介 Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. ...
- Open CASCADE Technology(OCCT)概述
OCCT模块结构图 基础类: Foundation Classes module underlies all other OCCT classes; 模型数据: Modeling Data modul ...
随机推荐
- if语句练习
输入年月日,首先判断该年是平年闰年并且计算该天是该年的第几天: 判断男女体重是否标准: 体重判断里边出现一个问题:如果性别输入的不是男也不是女,那么会执行输出“请输入正确的性别”:然后底下会继续输出“ ...
- AngularJs轻松入门(七)多视图切换
在AngularJs应用中,我们可以將html碎片写在一个单独的文件中,然后在其他页面中將该段碎片加载进来.如果有多个碎片文件,我们还可以在控制器中根据用户的操作动态的加载不同的碎片,从而达到切换视图 ...
- 关于iOS声音识别的框架
你好,我现在的项目中需要用到"声纹识别"这方面的需求,以前没做过,请教了.有没有这方面的框架和工具? 关于iOS声音识别的框架 >> ios这个答案描述的挺清楚的:ht ...
- SQL Server在用户自定义函数(UDF)中使用临时表
SQL Server在用户自定义函数中UDF使用临时表,这是不允许的. 有时是为了某些特殊的场景, 我们可以这样的实现: CREATE TABLE #temp (id INT) GO INSERT I ...
- 紫书 例题 10-17 UVa 1639(数学期望+对数保存精度)
设置最后打开的是盒子1, 另外一个盒子剩下i个 那么在这之前打开了n + n - i次盒子 那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i) 那么反 ...
- [HNOI2006]超级英雄(二分+网络流)
[HNOI2006]超级英雄 题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目, ...
- Unity 获得Android Context上下文
1.获取Context AndroidJavaObject context = new AndroidJavaClass ("com.unity3d.player.UnityPlayer&q ...
- 【SRM 717 DIV2 C】DerangementsDiv2
Problem Statement You are given two ints: n and m. Let D be the number of permutations of the set {1 ...
- Android笔记---Intent实现Activity跳转
学了之前的Android控件以及布局,我们就能够做一些UI的设计了,这里我结合之前的知识.以一个小的登录项目来解说下Activity之间跳转. 先看下效果图: 1.登录界面: 2.点击登录按钮跳转到另 ...
- JavaScript语言基础3
JavaScript能够处理一些来自于现实世界的数据类型.比如:数字和文本. 同一时候JavaScript中也包括了一些具 有抽象性质的数据类型.比如对象数据类型. JavaScript它是一种弱类 ...