



























OCCT 是 C++ 内核,它真正发挥威力往往需要与 GUI、可视化、脚本、应用框架结合。OCCT 官方 samples/ 目录提供 Qt、MFC、C#、Java、Android、iOS、Web 等示例,社区还衍生了 pythonOCC、CadQuery、PyCAD、OcctGym 等绑定。本章介绍最常见的集成路径。
Qt 是 OCCT 桌面端最常见搭档。仓库 samples/qt/Tutorial、samples/qt/IESample、samples/qt/OCCTOverview、samples/qt/AISSelector 提供成体系的示例。要点:
QWidget/QOpenGLWidget 包装 V3d_View;winId() 获取原生句柄;构造 WNT_Window/Xw_Window/Cocoa_Window;resizeEvent/paintEvent/mouseMoveEvent 调用 view->Redraw()、AIS_ViewController 处理交互;AIS_ViewController 大幅简化(含轨道相机、缩放、平移、矩形选择等)。selectionChanged(TopoDS_Shape);documentModified;QtConcurrent + QFuture + Message_ProgressIndicator。find_package(Qt6 COMPONENTS Widgets OpenGLWidgets) 与 find_package(OpenCASCADE);main 中处理 NSAutoreleasePool。QToolBox + AIS 显示模式切换;QDockWidget 布置 DFBrowser/ShapeView 风格的检查面板;QGraphicsView 显示 2D 工程图;QOpenGLContext::globalShareContext() 共享上下文。VTK 强于科学可视化、流场、医疗。OCCT 提供 IVtk* 工具包:
IVtkOCC_Shape、IVtkOCC_ShapeMesher:把 TopoDS_Shape 转为 vtkPolyData;IVtkTools_ShapeDataSource:作为 VTK pipeline 节点;IVtkTools_ShapeObject、IVtkTools_ShapePicker:选择拾取;auto src = vtkSmartPointer<IVtkTools_ShapeDataSource>::New();
src->SetShape(new IVtkOCC_Shape(shape));
auto m = vtkSmartPointer<vtkPolyDataMapper>::New();
m->SetInputConnection(src->GetOutputPort());
auto a = vtkSmartPointer<vtkActor>::New();
a->SetMapper(m);
renderer->AddActor(a);
适用场景:与 VTK 原有应用整合(仿真后处理 + CAD 模型)。日常 CAD 仍推荐 AIS。
OCCT 的官方 SWIG 绑定历史多变;社区维护的 pythonOCC 是事实标准:
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse
from OCC.Display.SimpleGui import init_display
box = BRepPrimAPI_MakeBox(10, 20, 30).Shape()
display, start_display, _, _ = init_display()
display.DisplayShape(box, update=True)
start_display()
特点:
Display 模块(基于 wxPython/PyQt + OpenGL);mamba install -c conda-forge pythonocc-core。CadQuery(参考本博客 cad/cadquery)在 pythonOCC 之上提供 Pythonic 流式 API,更适合参数化建模。
社区方案:
OCCTProxy、OpenCascade.NET 等 C++/CLI 包装;Helix Toolkit + 自实现 P/Invoke;OCCT 官方仓库的 samples/CSharp 给出 WPF 的最简集成示例。
OCCT 7.6+ 支持 Emscripten 编译,社区项目:
chevrotain/occt-import-js:基于 Emscripten 的 STEP 读取器;OCJS、opencascade.js:完整 OCCT WASM 绑定;cad-viewer-vue、three-occ 桥接 Three.js。构建步骤:
emcmake cmake .. -DBUILD_LIBRARY_TYPE=Static -DUSE_FREETYPE=OFF -DBUILD_MODULE_Visualization=OFF ...
emmake make -j
输出 .wasm + JS 胶水代码后通过 npm 包发布。注意 OCCT 体量大,WASM 通常 10–30 MB,需分模块按需加载。
cad/FreeCAD/ 给出完整教程;研究这些项目的源码是学习 OCCT“产品级用法”的捷径。
BRepOffset 可生成偏置面,作为刀具路径的基础;SMESH(Salome 模块)以 OCCT shape 作为输入网格化;OCCT 的 BRepGProp 可提供质量属性。近年新趋势:
debian:bookworm,apt 安装 libocct-*-dev,COPY 自有应用;Xvfb(如果使用 V3d 截图),或 Vulkan offscreen。OCE 是 OCCT 的社区分支,长期已停止维护,新项目推荐直接使用 OCCT。文档/Issue 中遇到 OCE 名词时按 OCCT 等价 API 处理即可。
OCCT 与商业内核(Parasolid、ACIS、CGM)通过中性格式(STEP/IGES/JT)交换;几何精度不同导致细节差异,转换后建议 ShapeFix + BRepCheck。
dox/tutorial 入门;[opencascade] 标签;OCCT 的生态很丰富,选择正确组合可以让团队更快达成目标。下一章给出综合实战,把整个教程串成一个完整案例。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。