惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
C
Check Point Blog
J
Java Code Geeks
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
量子位
Google DeepMind News
Google DeepMind News
I
InfoQ
The GitHub Blog
The GitHub Blog
aimingoo的专栏
aimingoo的专栏
N
Netflix TechBlog - Medium
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
V
V2EX
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
小众软件
小众软件
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
IT之家
IT之家

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw
第17章:与 Qt VTK Python pythonOCC 生态集成
我才是银古 · 2026-05-06 · via 博客园 - 我才是银古

第17章:与 Qt / VTK / Python(pythonOCC) 等生态集成

OCCT 是 C++ 内核,它真正发挥威力往往需要与 GUI、可视化、脚本、应用框架结合。OCCT 官方 samples/ 目录提供 Qt、MFC、C#、Java、Android、iOS、Web 等示例,社区还衍生了 pythonOCC、CadQuery、PyCAD、OcctGym 等绑定。本章介绍最常见的集成路径。

1. Qt + OCCT

Qt 是 OCCT 桌面端最常见搭档。仓库 samples/qt/Tutorialsamples/qt/IESamplesamples/qt/OCCTOverviewsamples/qt/AISSelector 提供成体系的示例。要点:

1.1 视图容器

  • 自定义 QWidget/QOpenGLWidget 包装 V3d_View
  • 通过 winId() 获取原生句柄;构造 WNT_Window/Xw_Window/Cocoa_Window
  • 重写 resizeEvent/paintEvent/mouseMoveEvent 调用 view->Redraw()AIS_ViewController 处理交互;
  • OCCT 7.5+ 的 AIS_ViewController 大幅简化(含轨道相机、缩放、平移、矩形选择等)。

1.2 信号槽

  • AIS 选择 → 发自定义信号 selectionChanged(TopoDS_Shape)
  • 事务 → 触发 documentModified
  • 长任务 → 用 QtConcurrent + QFuture + Message_ProgressIndicator

1.3 资源与构建

  • CMake 中同时 find_package(Qt6 COMPONENTS Widgets OpenGLWidgets)find_package(OpenCASCADE)
  • 注意 Qt 与 OCCT 都引用 OpenGL,确保链接顺序;
  • macOS Cocoa 需要在 main 中处理 NSAutoreleasePool。

1.4 高级 Qt 组件

  • QToolBox + AIS 显示模式切换;
  • QDockWidget 布置 DFBrowser/ShapeView 风格的检查面板;
  • QGraphicsView 显示 2D 工程图;
  • 与 Qt3D / QtQuick 3D 集成:通过 QOpenGLContext::globalShareContext() 共享上下文。

2. VTK + OCCT

VTK 强于科学可视化、流场、医疗。OCCT 提供 IVtk* 工具包:

  • IVtkOCC_ShapeIVtkOCC_ShapeMesher:把 TopoDS_Shape 转为 vtkPolyData
  • IVtkTools_ShapeDataSource:作为 VTK pipeline 节点;
  • IVtkTools_ShapeObjectIVtkTools_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。

3. Python:pythonOCC 与 cadquery

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()

特点:

  • 几乎一一映射 C++ API;
  • 提供 Display 模块(基于 wxPython/PyQt + OpenGL);
  • 与 NumPy/SciPy 协作;
  • 安装:mamba install -c conda-forge pythonocc-core

CadQuery(参考本博客 cad/cadquery)在 pythonOCC 之上提供 Pythonic 流式 API,更适合参数化建模。

4. C# / .NET

社区方案:

  • OCCTProxyOpenCascade.NET 等 C++/CLI 包装;
  • Helix Toolkit + 自实现 P/Invoke;
  • WPF 中嵌入 OCCT View 需要原生窗口句柄包装。

OCCT 官方仓库的 samples/CSharp 给出 WPF 的最简集成示例。

5. Web:WebAssembly

OCCT 7.6+ 支持 Emscripten 编译,社区项目:

  • chevrotain/occt-import-js:基于 Emscripten 的 STEP 读取器;
  • OCJSopencascade.js:完整 OCCT WASM 绑定;
  • cad-viewer-vuethree-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,需分模块按需加载。

6. CAD 应用:FreeCAD、CAD Assistant、Salome

  • FreeCAD:将 OCCT 用作几何内核,本博客 cad/FreeCAD/ 给出完整教程;
  • CAD Assistant(Open Cascade 公司):免费查看器,展示 STEP/glTF/IGES 能力;
  • Salome:法国仿真平台,OCCT + GEOM + SMESH;
  • KiCad 部分使用 OCCT 处理 3D 元件(STEP);
  • Mayo:开源 CAD 查看器,Qt + OCCT。

研究这些项目的源码是学习 OCCT“产品级用法”的捷径。

7. CAM / 仿真集成

  • CAM:与 LinuxCNC、CAMotics 集成时通常导出 STL/STEP;OCCT 自带 BRepOffset 可生成偏置面,作为刀具路径的基础;
  • FEMSMESH(Salome 模块)以 OCCT shape 作为输入网格化;OCCT 的 BRepGProp 可提供质量属性。

8. AI / 大模型应用

近年新趋势:

  • 用 LLM 生成 cadquery/PythonOCC 脚本,自动产出参数化模型;
  • OCCT 提供稳定的几何/拓扑接口,适合作为 AI 输出的后端;
  • 与 RAG/Agent 结合:把企业 CAD 数据通过 OCCT + XCAF 抽取为元数据,供 LLM 检索。

9. 与游戏引擎

  • Unreal/Unity 直接消费 OCCT 输出的 glTF/STL,少量项目通过 P/Invoke 调用 OCCT;
  • 游戏引擎通常不需要精确 B-Rep;建议 OCCT 端做几何处理后导出网格。

10. 容器与云部署

  • Docker:基于 debian:bookworm,apt 安装 libocct-*-dev,COPY 自有应用;
  • Kubernetes:把 OCCT 算法封装成 gRPC 服务(输入 STEP,输出 glTF),供前端调用;
  • Headless:Linux 上需要 Xvfb(如果使用 V3d 截图),或 Vulkan offscreen。

OCE 是 OCCT 的社区分支,长期已停止维护,新项目推荐直接使用 OCCT。文档/Issue 中遇到 OCE 名词时按 OCCT 等价 API 处理即可。

12. 跨内核兼容

OCCT 与商业内核(Parasolid、ACIS、CGM)通过中性格式(STEP/IGES/JT)交换;几何精度不同导致细节差异,转换后建议 ShapeFix + BRepCheck

13. 文档生态

  • Open Cascade Reference Manual(doxygen);
  • User Guides(按模块);
  • dox/tutorial 入门;
  • 官方论坛(dev.opencascade.org);
  • Stack Overflow [opencascade] 标签;
  • GitHub Discussions(仓库内);
  • 社区博客与本系列教程。

14. 选型建议

  • 桌面 CAD/CAE:Qt + OCCT + OCAF;
  • 仿真/科学:VTK + OCCT;
  • 自动化建模 / DevOps:pythonOCC 或 cadquery;
  • Web 查看器:OCCT WASM + Three.js / Babylon.js;
  • 嵌入式:仅链接核心 toolkit + 网格预生成。

OCCT 的生态很丰富,选择正确组合可以让团队更快达成目标。下一章给出综合实战,把整个教程串成一个完整案例。