
OCCT
开源 C++ 3D 建模与仿真平台
通过开源 C++ 库构建参数化 3D 模型,模拟物理并可视化 CAD 数据。
什么是 OCCT?
Open CASCADE Technology (OCCT) 是一个强大的开源 C++ 软件开发平台,适用于 3D CAD、CAM 和 CAE 应用。它提供了全面的几何建模、网格生成、数据交换(STEP、IGES、STL)、可视化和仿真库。专为高精度工程和制造工作流设计,OCCT 使开发者能够构建具有行业标准功能的稳健参数化建模工具、CAD 查看器和仿真应用。
该库支持高级实体建模操作,如布尔运算、圆角、倒角和扫掠,以及表面建模、NURBS 几何和参数化特征建模。OCCT 的模块化架构包含专用的拓扑、几何、可视化、数据交换和应用框架工具包,使其非常适合复杂的工程软件开发。凭借活跃的社区支持和定期发布,OCCT 成为全球众多商业和科研级 3D 应用的基础。
OCCT 入门指南
OCCT 以开源 C++ 库的形式分发,可通过源码构建或预编译二进制文件进行安装。最简单的入门方式是从 [OCCT GitHub](https://github.com/Open-Cascade-SAS/OCCT) 仓库下载最新发布版本。对于 Linux 用户,许多发行版通过其包管理器提供 OCCT 包(例如在 Ubuntu 上使用 `apt install libocct-dev`)。Windows 开发者可以使用预构建的二进制文件或使用 CMake 和 Visual Studio 从源码编译。官方文档包含所有受支持平台的逐步构建指南。
通过包管理器安装 OCCT(Ubuntu/Debian)
sudo apt update
sudo apt install libocct-dev libocct-data-exchange-dev libocct-visualization-dev布尔运算与实体建模
OCCT 提供强大的布尔运算(并集、交集、差集)用于 3D 实体,使得可以从基本原件创建复杂形状。其拓扑内核支持诸如倒角、倒棱、孔和肋等高级特性,具备高精度。开发者可以使用 C++ API 创建参数化特征,并将其集成到 CAD 工作流中。该库高效处理拓扑数据结构,支持 B-Rep 和构造实体几何(CSG)建模方法。这使得 OCCT 成为开发需要精确几何计算和基于特征建模的工程应用的理想选择。
使用 C++ 对两个实体执行布尔合并
TopoDS_Shape box1 = BRepPrimAPI_MakeBox(10, 10, 10);
TopoDS_Shape box2 = BRepPrimAPI_MakeBox(20, 5, 5);
BRepAlgoAPI_Fuse fuseOp(box1, box2);
if (fuseOp.IsDone()) {
TopoDS_Shape result = fuseOp.Shape();
// Save or visualize result
}数据交换(STEP 与 IGES)
OCCT 包含全面的数据交换模块,支持 ISO 标准格式,如 STEP(AP203/AP214)和 IGES。这些模块能够在导入和导出 CAD 模型时保留几何形状、拓扑结构、元数据和产品结构。STEP 读取器/写入器完全符合 AP214 标准,适用于汽车和机械设计数据。开发者可以以编程方式处理导入的模型,提取面/边,修改几何形状,并以不同格式重新导出。这种互操作性对于跨不同软件生态系统的 CAD 协作至关重要,并确保无缝集成到现有的设计工作流中。
通过 C++ 导入 STEP 文件并导出为 STL
Handle(STEPCAFControl_Reader) reader = new STEPCAFControl_Reader();
IFSelect_ReturnStatus status = reader->ReadFile("model.step");
if (status == IFSelect_RetDone) {
Handle(TDocStd_Document) doc;
reader->Transfer(doc);
// Export to STL
STEPCAFControl_Writer writer;
writer.Write("output.stl");
}3D 可视化与渲染
OCCT 的可视化工具包提供强大的 3D 渲染能力,支持硬件加速的 OpenGL、光线追踪和高级光照。开发者可以构建带有选择、突出显示和导航工具的交互式 CAD 查看器。该工具包包括用于 3D 视图管理、场景图处理和自定义渲染管线的类。抗锯齿、透明度以及线框/隐藏线显示模式等特性确保专业质量的可视化。这使得 OCCT 适用于开发工程可视化工具、虚拟现实应用以及具备实时性能的仿真结果浏览器。
使用 OCCT 创建交互式 3D 查看器
Handle(V3d_Viewer) aViewer = new V3d_Viewer();
Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(aViewer);
Handle(AIS_Shape) anActor = new AIS_Shape(aShape);
aContext->Display(anActor, Standard_True);
// Enable rotation, zoom, pan
aViewer->InitActiveView();
aViewer->ActiveView()->SetDegenerateModeOn();网格生成与分析
OCCT 包含将 B-Rep 模型转换为用于仿真和可视化的三角网格的网格生成工具。Mesh 模块支持自适应网格划分,可控制边缘和面片的细分精度。开发者可以生成用于 CAE 分析的有限元网格,计算网格质量指标,并执行诸如细化和光滑等网格操作。该库还提供网格数据交换工具(STL、OBJ)以及与外部 FEM 求解器的集成。这一功能桥接了 CAD 设计与仿真工作流,实现了工程分析应用的端到端开发。
通过 C++ 从 B-Rep 形状生成网格
BRepMesh_IncrementalMesh aMesh(aShape, 0.01);
// Access mesh data
TopExp_Explorer anExp(aShape, TopAbs_FACE);
for (; anExp.More(); anExp.Next()) {
TopoDS_Face aFace = TopoDS::Face(anExp.Current());
Handle(Poly_Triangulation) aTriangulation =
BRep_Tool::Triangulation(aFace, aLoc);
if (!aTriangulation.IsNull()) {
// Process triangulation nodes and triangles
}
}