10.OCCT是什么
OCCT 是什么,串联整套知识
OCCT 全称 OpenCASCADE Technology,开源三维几何建模内核(几何引擎),C++库。 一句话定位:专门管「CAD几何数学、B‑Rep实体」的库,它不负责把东西画到屏幕上,只管计算几何。
前面我们整条链路:STEP文件、B‑rep拓扑、布尔运算、STEP导入修复、网格化,全部都是OCCT的职责。 OpenGL/VTK 只管渲染显示,完全不懂B‑rep几何逻辑。
OCCT核心能干什么
1. 文件读写
读取/输出 STEP、IGES。 解析STEP,在内存构建出完整B‑Rep实体(体Solid、面Face、边Edge、顶点Vertex整套拓扑+几何曲面)。
STEP只是磁盘上的文本文件,OCCT把它翻译成内存里可以运算的B‑Rep数据结构。
2. 几何建模(B‑Rep操作)
- 基础体生成:立方体、圆柱、球体
- 布尔运算:并、交、差(挖槽、合并零件)
- 倒角、圆角、拉伸、旋转、放样
- 拓扑修改:删除面、分割实体
3. 几何修复 & 容差处理
就是我们聊STEP精度时说的: STEP导入经常出现缝隙、重叠边、非流形拓扑。 OCCT提供一整套API:检查拓扑、修复缝隙、调整容差,把坏掉的B‑Rep尽量修复成合法实体。
修复是OCCT做的,VTK、OpenGL完全没有这个能力。
4. 网格化(Tessellation,离散)
B‑Rep是精确曲面,GPU不能直接渲染。 OCCT可以把一张张曲面Face,离散成一堆三角形面片。 输出三角顶点、索引。
这个网格化输出的三角数据,才是喂给VTK的输入。
5. 几何计算
计算两点距离、曲面求交、投影点到面上、测量面积体积、获取边的曲率等等。
OCCT 不能干什么(非常关键,很多人踩坑)
- ❌没有窗口,不能渲染、不能显示模型。OCCT算完B‑Rep,自己没有办法把模型画到屏幕。
- ❌没有鼠标交互、没有拾取、没有相机旋转缩放。
- ❌不做仿真,不做云图。
OCCT只产出数据:B‑Rep实体、或者网格化后的三角面片。显示交给别的组件。
OCCT、VTK、OpenGL 完整层级关系
你的工业软件应用
↓
┌──────────┐ ┌──────────┐
│ OCCT │ │ VTK │
│几何内核 │◄───────►│可视化库 │
│STEP/BRep │ 三角面片 │渲染交互 │
│布尔/修复 │ 输出数据 │拾取相机 │
└──────────┘ └──────────┘
↓
OpenGL
↓
GPU显卡
数据流完整走一遍,把全部知识点串起来:
-
磁盘读取
.stp文件 → OCCT解析STEP,内存生成B‑Rep实体 -
OCCT做拓扑检查、容差修复,解决STEP带来缝隙、非流形问题
-
业务做建模操作:布尔、倒角(全部OCCT计算B‑Rep)
-
需要显示:调用OCCT网格化接口,把B‑Rep各个Face离散成三角面片
同时我们自己维护一张映射表:三角ID ↔ 原始B‑Rep Face/Edge
-
将三角面片数据交给VTK,构建vtkPolyData、Actor
-
VTK内部调用OpenGL,把三角形下发GPU,屏幕渲染出画面
-
用户鼠标点击:VTK拾取,得到cellId三角单元ID
-
拿着cellId查映射表,反向拿回OCCT原始B‑Rep面/边,然后继续调用OCCT接口做建模操作。
重点:屏幕看到的三角只是“显示副本”;真正权威、可以用来建模计算的数据,永远是OCCT内存里那份B‑Rep。
两个极易混淆的误区
误区1:“OCCT可以渲染,那我就不用VTK了”
OCCT自带一套简单的渲染模块(TKOpenGl)。 它底层也是封装OpenGL。 但它的渲染模块能力弱:剖切、透明、大装配性能、拾取扩展都不如VTK。 工业软件两种技术路线:
- OCCT(几何) + VTK(可视化):最主流,几何和渲染彻底解耦,灵活。
- OCCT自带TKOpenGl渲染器:少引入第三方库,但是可视化能力受限。
误区2:VTK读取STEP文件
VTK完全读不了STEP。 必须OCCT先解析STEP,输出三角网格,再传给VTK。VTK从头到尾看不到B‑Rep。
一张对比总表
| 库 | 角色 | 处理的数据 | 运行位置 | 核心产出 |
|---|---|---|---|---|
| OCCT | 几何建模内核 | B‑Rep实体、曲面拓扑 | CPU | 实体、面、边、顶点;三角面片 |
| VTK | 可视化渲染库 | 三角网格PolyData、体数据 | CPU+GPU | 三维场景、交互拾取 |
| OpenGL | 显卡底层API | 顶点、索引、着色器 | GPU | 像素画面输出到屏幕 |
举一个现实业务例子帮助理解
比如你软件里做一个“给零件做倒角”操作:
- 鼠标在视图上点击零件的一条边。
- VTK拾取得到三角cellId,查表映射回OCCT的Edge(原始拓扑边)。
- 交给OCCT执行倒角算法,修改内存中的B‑Rep实体。
- B‑Rep被修改后,旧的三角网格作废。
- OCCT重新网格化,生成新一批三角面片。
- 更新VTK的数据,屏幕刷新看到倒角之后的模型。
倒角这个计算,VTK完全没有参与。VTK只负责把OCCT算完的新结果画出来。

浙公网安备 33010602011771号