Open CASCADE:模型带颜色导出至 STEP / IGES 文件
目录
- 1、引言
- 2、核心原理解析:XDE 与 OCAF 的协作原理
- 2.1、OCAF
- 2.2、XDE
- 2.3、TDF
- 3、案例
- Step 1:指定 XDE 驱动器的路径
- Step2:初始化 XCAF 文档并加载模型
- Step3:获取各类数据管理工具
- Step4:创建模型
- Step5:向文档添加模型并绑定颜色
- Step6:文件导出
- 4、总结
- 5、引用
1、引言
Open CASCADE 支持读写带颜色、图层、标注等信息的模型文件。模型颜色是不同CAD软件数据交换时最常用到的信息,本文给出一个带颜色模型导出为 STEP / IGES 文件的例子。
2、核心原理解析:XDE 与 OCAF 的协作原理
2.1、OCAF
OCAF,即OCC应用程序框架(Open CASCADE Application Framework,详细参考官网),是 “文档管家”,支持各类复杂2D、3D场景CAD/CAM/CAE等应用开发,属于即用型应用程序框架。如下图所示的应用程序文档-属性模型:
OCAF 文档数据通过树形结构管理(若考虑属性的引用关系,则是图形结构),文档结构可以通过官方工具 DFInspector 查看[github:Inspector
]。如下图所示的一个带红、绿、蓝三色的模型:
使用 DFInspector 工具打开后,将呈现OCAF的文档数据,如下图所示:
该文件包括三个带颜色的模型,模型名称分别是 Test_RedBox、Test_GreenSphere、Test_BlueCylinder,对应的颜色分别是 RED、GREEN、BLUE。
2.2、XDE
XDE,即OCC中的扩展数据交换(eXtended Data Exchange,详细参考官网),以CAF为基础——即XCAF,支持颜色、图层、材料等非几何属性的读写。
在 XCAF 数据中,XCAFDoc_DocumentTool
负责总体数据管理,各种具体类型数据由特定的工具类 xxTool
负责读写,这些工具集合也是OCC支持PMI信息的关键。工具类见下表:
序号 | 数据类型 | 类名 | 说明 |
---|---|---|---|
1 | 模型 | XCAFDoc_ShapeTool | 模型管理 |
2 | 装配数据 | XCAFDoc_AssemblyTool | 仅提供遍历装配树/图的方法 |
3 | 颜色 | XCAFDoc_ColorTool | 关联模型及其子模型的颜色,增、删、改、查;模型和其子模型有不同的颜色属性 |
4 | 图层 | XCAFDoc_LayerTool | 关联模型及其子模型的图层,增、删、改、查;模型和其子模型可从属于不同的图层 |
5 | 材料 | XCAFDoc_MaterialTool | 关联模型及其子模型的材料,增、删、改、查;模型和其子模型可以是不同的材料 |
6 | GD&T | XCAFDoc_DimTolTool | GD&T的增、删、改、查 |
7 | 剖视图 | XCAFDoc_ClippingPlaneTool | 剖视图的增、删、改、查 |
8 | 注释 | XCAFDoc_NotesTool | 为一个模型或子模型添加注释,及其关联的对象 |
9 | 视图 | XCAFDoc_ViewTool | 视图的增删,一个视图包括相机视角、显示的模型、GD&T数据及标签 |
10 | 渲染材料 | XCAFDoc_VisMaterialTool | 为模型单独设置用于渲染的材料 |
获取各工具类的方法形如:
Handle(TDocStd_Document) doc = ...;
Handle(XCAFDoc_ShapeTool) shape_tool = XCAFDoc_DocumentTool::ShapeTool(doc ->Main()); // 模型管理工具
Handle(XCAFDoc_LayerTool) layer_tool = XCAFDoc_DocumentTool::LayersLabel(doc->Main()); // 图层管理工具
XDE 直接支持 IGES、STEP文件的读写的工具类如下表所示:
类名 | 说明 | 是否支持图层颜色等信息 |
---|---|---|
STEPControl_Writer, IGESControl_Writer | STEP, IGES 文件标准导出,仅模型 | 不支持 |
STEPControl_Reader, IGESControl_Reader | STEP, IGES 文件标准导入,仅模型 | 不支持 |
STEPCAFControl_Writer, IGESCAFControl_Writer | STEP, IGES 文件 CAF 数据完整导出 | 支持 |
STEPCAFControl_Reader, IGESCAFControl_Reader | STEP, IGES 文件 CAF 数据完整导出 | 支持 |
2.3、TDF
TDF,即拓扑数据框架(Topological Data Framework),提供了一种层次化的数据组织方式,将模型的各种信息以树形结构进行存储,使得不同类型的数据能够有序地关联起来。
具体来说,TDF_Label
是该框架中至关重要的一个工具,它本身不包括任何数据,而是以TDF_Label
为索引实现TDF中各类数据的增删改查,起标签作用。例如,一个TDF_Label
关联一个模型(或子模型),使用特定的工具通过TDF_Label
为其关联的模型设置颜色、材料、图层等属性。同时TDF_Label
还可用于关联任何用户自定义的数据。
前一节表中所列的各类 xxTool
均以 TDF_Label
为输入进行操作。
关于 OCAF 的详细解释和用法说明,将在后续文章中给出。
使用 XCAF 即可实现带颜色模型的导出。
3、案例
以下通过实际案例,实践导出三个不同颜色模型的 STEP/IGES 文件。
Step 1:指定 XDE 驱动器的路径
使用 XDE 读写内置文件格式类型(XML)时,需要指定驱动器路径,文件路径包括以下两个文件:
XCAF
Plugin
两个文件名称不能修改。OCC 安装之后,这两个文件在 $CASROOT/src/StdResource 路径下。
有两种方式指定驱动器路径:
①:设置环境变量 CSF_XCAFDefaults=以上文件所在路径
②:通过代码设置环境变量
OSD_Environment env("CSF_XCAFDefaults", "以上文件路径"); // 指定XDE驱动路径
env.Build();
OCC 为何如此处理格式的读写,这一问题将在后续的文章中详述。
当然,若仅需要完成 IGES/STEP 文件格式转换,则不需要该步骤。
Step2:初始化 XCAF 文档并加载模型
在开始导出带颜色的模型文件之前,首先要初始化 XCAF 文档。这一步就像是搭建一个舞台,为后续的模型展示和操作做好准备。通过创建 TDocStd_Document
对象,来构建 XCAF 文档的基础框架。例如:
Handle(XCAFApp_Application) app = XCAFApp_Application::GetApplication();
XmlXCAFDrivers::DefineFormat(app);
Handle(TDocStd_Document) doc;
app->NewDocument(TCollection_ExtendedString("XmlXCAF"), doc);
Step3:获取各类数据管理工具
使用前述的XCAFDoc_DocumentTool
获取各类数据管理工具。
Handle(XCAFDoc_ShapeTool) shape_tool = XCAFDoc_DocumentTool::ShapeTool(doc->Main());
Handle(XCAFDoc_ColorTool) color_tool = XCAFDoc_DocumentTool::ColorTool(doc->Main());
Handle(XCAFDoc_MaterialTool) material_tool = XCAFDoc_DocumentTool::MaterialTool(doc->Main());
Step4:创建模型
分别创建立方体、球体、圆柱体。
// 创建红色盒子
TopoDS_Shape red_box = CreateRedBox();
// 创建绿色球体
TopoDS_Shape green_sphere = CreateGreenSphere();
// 创建蓝色圆柱体
TopoDS_Shape blue_cylinder = CreateBlueCylinder();
Step5:向文档添加模型并绑定颜色
使用模型工具 shape_tool
向文档中添加模型
TDF_Label box_label = shape_tool->AddShape(red_box);
TDataStd_Name::Set(box_label, "Test_RedBox");
TDF_Label sphere_label = shape_tool->AddShape(green_sphere);
TDataStd_Name::Set(sphere_label, "Test_GreenSphere");
TDF_Label cylinder_label = shape_tool->AddShape(blue_cylinder);
TDataStd_Name::Set(cylinder_label, "Test_BlueCylinder");
以 TDF_Label
为索引、使用颜色工具 color_tool
设置模型的颜色
// 设置红色盒子的颜色
Quantity_Color red(Quantity_NOC_RED);
SetShapeColor(color_tool, box_label, red);
// 设置绿色球体的颜色
Quantity_Color green(Quantity_NOC_GREEN);
SetShapeColor(color_tool, sphere_label, green);
// 设置蓝色圆柱体的颜色
Quantity_Color blue(Quantity_NOC_BLUE);
SetShapeColor(color_tool, cylinder_label, blue);
Step6:文件导出
导出为 XDE XML 格式:
app->SaveAs(doc, "colored_models_xbf.xml");
导出为标准 IGES 格式,仅沿模型信息、无颜色数据:
IGESControl_Writer iges_writer;
iges_writer.AddShape(red_box);
iges_writer.AddShape(blue_cylinder);
iges_writer.Write("colored_models_standard.igs");
导出为带颜色数据的 IGES:
IGESCAFControl_Writer xde_iges_writer;
xde_iges_writer.SetColorMode(Standard_True);
xde_iges_writer.SetNameMode(Standard_True);
xde_iges_writer.SetLayerMode(Standard_True);
if (xde_iges_writer.Transfer(doc) == IFSelect_RetDone)
{xde_iges_writer.Write("colored_models_xde.igs");cout << "XDE IGES文件导出成功: colored_models_xde.igs" << endl;
}
else
{cout << "XDE IGES文件导出失败!" << endl;
}
导出为带颜色数据的 STEP:
STEPCAFControl_Writer xde_step_writer;
xde_step_writer.SetColorMode(Standard_True);
xde_step_writer.SetNameMode(Standard_True);
xde_step_writer.SetLayerMode(Standard_True);
if (xde_step_writer.Transfer(doc) == IFSelect_RetDone)
{xde_step_writer.Write("colored_models_xde.stp");cout << "XDE STEP文件导出成功: colored_models_xde.stp" << endl;
}
else
{cout << "XDE STEP文件导出失败!" << endl;
}
4、总结
本文通过 XDE 模块,实现了模型几何与非几何属性颜色的一体化导出。
进一步地,XDE的能力还可以满足以下场景的使用:
-
可实现 STEP AP214/AP242 文件完整数据的导入,进而可遍历获取子模型颜色、图层、GD&T等完整信息。
-
对于CAx 类应用程序,除了模型及其关联数据之外,还可以基于 XDE 管理应用程序数据,通过
TDF_Label
文档中添加用户自定义数据以及自定义数据的关联引用。 -
文件级引用,就像 CAD 软件中的装配体那样,一个装配体文件可以引用外部若干个零件或组件的独立文件。
5、引用
- OCC 官方文档:Extended Data Exchange (XDE)
- OCC API手册:Package XCAFDoc
转载请著名链接:https://blog.csdn.net/Mechanicoder/article/details/151651814