一句话总结:这不是一次小版本更新,这是 OCCT 的一次"换挡"。
🚀 一图看懂 8.0.0 的核心变化
| 维度 | 变化 |
|---|---|
| 语言基线 | 正式迈入 C++17 时代 |
| 基础设施 | 异常、线程、容器全面现代化 |
| 几何求值 | Eval 体系重构,性能与可扩展性双提升 |
| 建模算法 | 新增 Gordon 曲面、TKHelix、ExtremaPC |
| 拓扑表达 | 引入 BRepGraph,未来感十足 |
| 数据交换 | STEP 并发安全,GLTF/OBJ 全面增强 |
| 可视化 | GPU 网格、选择系统、显示模块持续现代化 |
| 稳定性 | 海量崩溃、死循环、越界修复 |
1️⃣ C++17,终于成为正式门槛
OCCT 8.0.0 最直接的一条变化:
✅ 最低要求 C++17,旧编译器全面退出。
内部已经大量使用:
if constexprstd::optional/std::variantstd::string_viewstd::shared_mutex- 结构化绑定 / fold expressions
📌 要升级 8.0.0?先升级你的工具链。
2️⃣ 异常系统终于"标准化"了
Standard_Failure 现在继承自 std::exception!
这意味着你可以直接:
catch (const std::exception& e) { ... }
老接口 Raise() / Throw() / Instance() 全部退役,统一用 throw。
而且——
🧵 错误处理栈现在是
thread_local的。
异常处理不再走全局锁,多线程性能线性扩展。
3️⃣ 容器家族大扩容
新成员名单很豪华:
- 🆕
NCollection_FlatMap/FlatDataMap(Robin Hood 哈希) - 🆕
NCollection_OrderedMap/OrderedDataMap(保留插入顺序) - 🆕
NCollection_KDTree(最近邻 / k-NN / 范围 / AABB / 球查询) - 🆕
NCollection_LinearVector/ForwardRange
📌 做点云、空间索引、几何预筛选的同学,KDTree 直接上手就能用,原生支持 gp_Pnt、gp_XYZ。
4️⃣ 几何求值体系,整个重做了
这可能是 8.0.0 最深层、最有价值的改动。
新的求值入口:
EvalD0/EvalD1/EvalD2/EvalD3/EvalDN- 返回值改为 POD 结构体(
Geom_CurveD1、Geom_SurfD2…)
Geom 叶子类被标记为 final
⚠️ 如果你的项目里直接继承了具体几何类,赶紧检查一下!
正确姿势:继承 Geom_BoundedCurve、Geom_ElementarySurface 这样的抽象基类。
Adaptor 路径去虚化
gp_* 原语直接放进 std::variant,靠 switch + enum 分派。
编译器更容易内联,热路径更短,性能更猛。
5️⃣ BSpline / Bezier 大优化
这块每一条都很实用:
- ✅ Pole / Knot 数组改为值类型成员,少一层堆分配
- ✅ 权重数组总是存在,非有理几何指向静态单位缓冲区
- ✅
WeightsArray()永远返回有效引用,告别判空 if - ✅ 修复多个长期 bug:
Hermit.cxx的Pole0 < 3笔误IsEqual漏比较 knotBSplCLib_Reverse越界NbPoles未定义行为- …
📌 做样条曲面的同学,光这一节就值得升级。
6️⃣ 新差分几何包:告别旧 LProp
三个新包接班老体系:
Geom2dPropGeomPropBRepProp
特点:
- 基于
std::variant分派 - 结果带
IsDefined标志,不再用异常控制流 - 内置导数缓存
- 直接从 geometry handle 构造,绕开 adaptor
代码瞬间清爽了。
7️⃣ ⭐ 重点关注:BRepGraph 登场
如果说 8.0.0 里哪个东西最有"未来感",必须是它:
BRepGraph:与
TopoDS_Shape互补的图式拓扑表达。
亮点包括:
- Typed Id:
NodeId/RefId/RepId - 多种 View(拓扑、引用、缓存、编辑)
- 双向遍历、Layer 系统、Cache 系统
- 历史跟踪、去重、压缩、深拷贝、验证
- 唯一程序化修改入口
EditorView - 完整 GTest 套件覆盖
📌 短期不会替代 TopoDS_Shape,但长期看,这很可能是 OCCT 的下一条主线。
8️⃣ 建模算法的新玩具
🆕 Gordon 曲面
GeomFill_Gordon —— 把 Coons 思路推广到任意 N×M 曲线网格!
- 自动检测交点
- 自动排序与定向
- kink 保持
- 周期网络支持
- 并行执行
复杂自由曲面构造,再多一把利器。
🆕 TKHelix
螺旋线工具包:几何 + 拓扑 + B-spline 逼近 + Tcl 命令。
弹簧、螺纹、绕线、螺旋扫描…直接上手。
🆕 ExtremaPC
点到曲线极值,按几何类型分派的专用包。
拾取、投影、最短距离、草图约束统统受益。
9️⃣ 显示与选择:现代化继续推进
🎨 GPU 网格
V3d_RectangularGrid / V3d_CircularGrid 统一到 shader 路径:
- 无限网格 + 抗锯齿
- 平滑裁剪
- 远距离稳定显示
- 支持 GL 3.2 / GLES 3.0
🎯 选择系统修了一堆老问题
- ViewCube 不再乱跑
- 双击识别更可靠
AIS_Shape包围盒重算修复- Polyline / Triangle 严格选取
OverlapsPoint不再是空壳- 翻转文本的选择终于一致了
做交互式 CAD 的朋友,升级体验绝对明显。
🔟 数据交换:STEP 是重点中的重点
STEP
- ✅ 并发读写更安全(每线程一个 Reader/Writer)
- ✅ 修复并发 double-free 崩溃
- ✅ 类型识别改用
std::string_view - ✅ 去重导出,文件平均缩小 ~20%
- ✅ GDT、PMI、材质、缩放、控制指令处理更完整
- ✅ 多个空指针 / 空列表崩溃修复
GLTF / OBJ / VRML
- GLTF 支持非均匀缩放
- Merge Faces 模式下边也能保存
- OBJ 修复空法向问题
- VRML 宏改用
nullptr
⚠️ 提醒
IGES 读取在并发下仍不安全,需要串行化!
服务端批处理同学务必注意。
1️⃣1️⃣ 这次 Bug Fix 的分量可能比新功能还重
随手列几个真实修复:
- Fillet / Chamfer 不再崩
- PipeShell 不再崩
- Boolean fuse 不再死循环
- 曲面交线闭合修复
- Shape Healing 替换链循环检测
- STEP/ShapeFix 不再 hang
- Mesh 栈溢出修复
- BRepGProp 共享子形体统计修复
📌 一个版本是否值得升级,往往不取决于"多了什么",而取决于"少了多少坑"。
8.0.0 在这一点上的分量,非常足。
🛠 升级前请注意(避坑指南)
- ✅ 编译器必须支持 C++17
- ⚠️ VTK 默认关闭,依赖 TKIVtk 的工程要显式
USE_VTK=ON - ⚠️ 老异常 API(
Raise/Throw)要整理 - ⚠️ 直接继承
Geom_*叶子类的代码要重写 - ⚠️ BSpline/Bezier 部分 copy-out 接口被弃用
- ⚠️ Mesh 插件机制改成工厂注册
- ⚠️ IGES 读取仍要串行化
✨ 最后的话
OCCT 8.0.0 给人的感觉,已经不像"又一次升级"了,更像是:
OCCT 正在从一个历史悠久的几何建模内核,进化为"现代 C++ 工业几何平台"。
清理老机制、建立现代接口、优化热点路径、补齐并发短板、为未来架构预留空间——
这些事,8.0.0 一次性都做了。
如果你是 OCC 的长期使用者,这个版本,真的值得你花一个周末认真看看。
📎 资源链接
- 📦 下载地址:GitHub Releases →
V8_0_0 - 📖 升级指南:https://dev.opencascade.org/doc/overview/html/occt__upgrade.html
- 📝 完整 Changelog:
V7_9_0...V8_0_0

429

被折叠的 条评论
为什么被折叠?



