OCCT 8.0.0 的核心变化

一句话总结:这不是一次小版本更新,这是 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 constexpr
  • std::optional / std::variant
  • std::string_view
  • std::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_Pntgp_XYZ


4️⃣ 几何求值体系,整个重做了

这可能是 8.0.0 最深层、最有价值的改动。

新的求值入口:

  • EvalD0 / EvalD1 / EvalD2 / EvalD3 / EvalDN
  • 返回值改为 POD 结构体(Geom_CurveD1Geom_SurfD2…)

Geom 叶子类被标记为 final

⚠️ 如果你的项目里直接继承了具体几何类,赶紧检查一下!

正确姿势:继承 Geom_BoundedCurveGeom_ElementarySurface 这样的抽象基类。

Adaptor 路径去虚化

gp_* 原语直接放进 std::variant,靠 switch + enum 分派。
编译器更容易内联,热路径更短,性能更猛。


5️⃣ BSpline / Bezier 大优化

这块每一条都很实用:

  • ✅ Pole / Knot 数组改为值类型成员,少一层堆分配
  • ✅ 权重数组总是存在,非有理几何指向静态单位缓冲区
  • WeightsArray() 永远返回有效引用,告别判空 if
  • ✅ 修复多个长期 bug:
    • Hermit.cxxPole0 < 3 笔误
    • IsEqual 漏比较 knot
    • BSplCLib_Reverse 越界
    • NbPoles 未定义行为

📌 做样条曲面的同学,光这一节就值得升级。


6️⃣ 新差分几何包:告别旧 LProp

三个新包接班老体系:

  • Geom2dProp
  • GeomProp
  • BRepProp

特点:

  • 基于 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 在这一点上的分量,非常足


🛠 升级前请注意(避坑指南)

  1. ✅ 编译器必须支持 C++17
  2. ⚠️ VTK 默认关闭,依赖 TKIVtk 的工程要显式 USE_VTK=ON
  3. ⚠️ 老异常 API(Raise / Throw)要整理
  4. ⚠️ 直接继承 Geom_* 叶子类的代码要重写
  5. ⚠️ BSpline/Bezier 部分 copy-out 接口被弃用
  6. ⚠️ Mesh 插件机制改成工厂注册
  7. ⚠️ 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
  • 📝 完整 ChangelogV7_9_0...V8_0_0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值