1-occ data exchange (read iges_step)
平台准备
-
AIS(Application Interactive Services), 由于occ自带的可视化模块,阅读过其源码,跟其它渲染引擎比较起来功能是比较弱的。因为你仔细阅读源码,发现里面连场景树结构都没有;只能说occ本身专注在几何处理方面; -
VIS(VTK Integration Services): 这个是集成了VTK的可视化功能;VTK是一个不错的开源渲染引擎,主要用于科学可视化,因此更倾向于数据可视化算法。 由此可见,occ提供的可视化平台,主要是用于几何数据的可视化,而不考虑虚拟世界的构建;这也恰恰体现出其专注于Geometry; 由于我们需要构建一个具有虚拟场景的可视化平台;因此采用基于osg进行可视化开发;体验occ这个开源库中强大的几何部分; -
Qt5.9.0 -
MSVC2015编译器 -
win10 -
OCCT 7.6.0
实现功能
- 读取iges 文件
- 读取 step文件
- mesh化
- 渲染显示
基本实现思路
occt 支持的数据转换格式
- 标准的数据交换格式
- STEP (AP203 : Mechanical Design, this covers General 3D CAD; AP214: Automotive Design)
- IGES (up to 5.3)
- VRML and STL meshes.
- Extended data exchange (XDE)
这个数据交换可以将其它属性关联到几何数据中;(如: 颜色,图层,名称,材料等) - 高级数据交换组件(这个应该是在商业版中,不过在Freecad中看到了DXF的导入导出实现,这个后面再仔细看看)
数据交换接口简介
这里只进行一个简单介绍,内容主要来自occ的文档; 后面再针对没一点进行深入剖析;
- 标准数据接口
//iges
IGESControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”);
//step
STEPControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile(;filename.stp;);
- XDE 接口介绍, 这里采用XDE的解析方式
以step为例,解析XDE;
// XDE: Extended Data Exchange
// OCAF: OpenCascade Application Technology Framework
/// Getting an XDE document
Handle(TDocStd_Document) doc;
XCAFApp_Application::GetApplication()->NewDocument("MDTV-XCAF", doc);
STEPCAFControl_Reader reader;
reader.SetColorMode(true);
reader.SetNameMode(true);
reader.SetLayerMode(true);
//IGESControl_Reader Reader;
reader.ReadFile( (Standard_CString)filePath.c_str() );
/// transfer data from reader to doc
if(!reader.Transfer(doc))
{
std::cout << "Cannot read any relevant data from the STEP file" << std::endl;
return NULL;
}
// To get a node considered as an Assembly from an XDE structure, you can use the Label of the node.
_assembly = XCAFDoc_DocumentTool::ShapeTool(doc->Main());
// To query, edit, or initialize a Document to handle Colors of XCAF
_colorTool = XCAFDoc_DocumentTool::ColorTool(doc->Main());
// free shape sequence, do not use _assembly->GetShapes(freeShapes)
// get sequence of free shape labels
TDF_LabelSequence freeShapes;
_assembly->GetFreeShapes(freeShapes);
实现效果
Reference
- osg source code
- occt user guides
|