第 9 篇 OCC OCAF 框架详解:特征树、装配管理、数据持久化、参数化架构
专栏系列:OpenCASCADE 工业软件落地实战专栏・第 9 篇阶段定位:第三阶段・核心模块逐篇拆解(装配文档篇)
前置导读前面第 6 篇 Modeling 完成几何模型构建;第 7 篇 DataExchange 实现 STEP/IGES 导入导出;第 8 篇 Visualization 把 BRep 模型渲染到窗口,完成视图交互。 走到这里,已经可以处理单个零件模型。但工业 CAD/CAE 软件绝大多数场景面对的是多零部件大装配:成千上万个零件、零部件实例复用、层级特征树结构、零部件颜色透明度、自定义业务属性、工程文档保存。 仅依靠 TopoDS_Shape+BRep 无法高效管理装配,重复实例会造成内存爆炸,缺少特征树组织、参数存储、文档序列化能力,这正是 OCAF 框架要解决的核心问题。
很多开发者会混淆 OCAF 与 BRep:BRep 负责几何外形表达;OCAF 负责上层业务数据组织。OCAF 不承担几何布尔、造型计算,它是一套完整的应用文档框架,承载特征树、装配层级、实例变换、参数属性、持久化存储,是自研国产 CAD/CAE 前后处理软件的关键底层基础设施。
本篇从工业软件工程化视角拆解 OCAF 整体分层架构、TDF 标签特征树、XCAF 装配实例机制、属性体系、文档持久化,梳理参数化架构设计思路与高频工程坑点,给出落地实战开发指引。
9.1 OCAF 框架整体架构与工业定位
OCAF 全称 OpenCASCADE Application Framework,OpenCASCADE 配套的应用层文档框架。
核心认知:OCAF 不生成几何,只负责组织数据;BRep 存放 BRep 几何 Shape,OCAF 管理 Shape 的特征树组织、装配实例关系、变换矩阵、业务参数属性、完整文档生命周期。
整体分为 4 个主要层次:
TDocStd 文档层:
TDocStd_Document,OCAF 根对象,代表一份完整工程文档,统一管理 Undo/Redo 事务、文档持久化读写。TDF 特征标签层(Data Framework):
TDF_Label标签树,OCAF 核心存储载体,树形节点构成软件界面看到的特征树 / 装配树。属性驱动层(Attributes):各类 Attribute 属性挂载于 TDF_Label 节点,几何引用、变换矩阵、颜色材质、自定义参数全部以属性载体形式附加到标签。
工具服务层:XCAF 装配工具、文档 IO 工具、变更事务工具,完成实例创建、特征编辑、文档导入导出。
关键类快速对照表
模块命名空间 | 核心类 | 作用 |
TDocStd | TDocStd_Document | OCAF 文档总对象,一份装配 / 参数化工程对应一个 Document |
TDF | TDF_Label | 特征树节点,构成树形层级,对应特征树、装配树每一个节点 |
TNaming | TNaming_NamedShape | 核心属性,将 TopoDS_Shape 几何挂载到 TDF_Label 标签 |
TCollection | TCollection_ExtendedString | OCAF 内置字符串,存储特征名、零部件名称 |
XCAFDoc | XCAFDoc_DocumentTool | XCAF 装配工具总入口,零部件、实例、颜色材质统一管理 |
XCAFApp | XCAFApp_Application | XCAF 应用实例,支持同时管理多份 OCAF 工程文档 |
工程概念区分
BRep(TopoDS_Shape):零件长什么样,纯粹几何外形数据;
OCAF‑XCAF:特征怎么来、装配层级、零部件命名、摆放位置、附加仿真参数,业务与组织层。
9.2 TDF‑Label 标签树:OCAF 的特征树底层载体
TDF_Label标签是 OCAF 一切业务数据的底层载体,为树形节点结构,对应 UI 展示的特征树、装配树。
一份
TDocStd_Document持有唯一根标签,向下派生多级子 Label,完整映射界面特征树层级;Label 本身是空容器,所有业务数据全部挂载在 Label 的 Attribute 属性上,标签只负责层级关系;
每个 Label 拥有唯一 Tag 编号,可快速定位查找特征 / 装配节点;
支持多层嵌套,天然适配总装配→子装配→零件,以及草图‑拉伸‑布尔的参数化特征树结构。
典型特征 & 装配树映射示例:
Document根工程文档 └── Root Label(根节点) ├── Feature_Label1 草图特征 ├── Feature_Label2 拉伸特征 └── Assembly_Root 总装配 ├── SubAsm_Label1 子装配A │ └── Part_Instance_Label 零件实例 └── SubAsm_Label2 子装配B高频踩坑要点:
直接修改外部 TopoDS_Shape 几何,OCAF 内部引用不会自动同步;几何发生变更,必须更新对应
TNaming_NamedShape属性;Label 节点删除不等于内存立刻释放,需要同步清理挂载属性,否则造成内存残留泄漏;
业务开发尽量避免硬编码 Tag 编号遍历树,优先使用
XCAFDoc_DocumentTool工具接口。
9.3 XCAF 装配体系:原型零件与实例化机制(大装配核心)
XCAF 是 OCAF 面向 CAD 装配场景的扩展模块,实例化能力是 XCAF 在工业大装配场景最大价值。
原型(Prototype):原始零件几何,内存仅保存一份 BRep Shape;
实例(Instance):不复制完整几何数据,仅仅记录原型引用 +
gp_Trsf局部变换矩阵(平移、旋转、缩放)。
同一个零件在装配中摆放上百次,内存只保留1 份原型 BRep + 上百份变换矩阵实例记录,以此实现大装配内存轻量化。
开发概念区分
直接复制 Shape:完整拷贝全部几何数据,装配规模增大内存成倍上涨;
创建装配实例:仅记录原型引用与变换,内存开销极低,工业大装配开发优先选用实例模式。
核心装配开发流程
创建原型零件 Label 节点,将 BRep 几何存入
TNaming_NamedShape属性;调用
XCAFDoc_DocumentTool::AddComponent()生成装配实例节点;实例节点指向原型 Label,设置
gp_Trsf位置旋转变换矩阵;将实例挂载至父装配 Label,完成装配树构建。
工程回顾:第 8 篇 Visualization 提到 “实例化装配复用 AIS 对象”,底层数据源即来自 OCAF‑XCAF 装配实例;AIS 层读取 XCAF 实例信息,使用
AIS_ConnectedInteractive实现显示对象复用,降低三角化与渲染开销。
9.4 属性 Attribute 体系:几何、外观、自定义参数、参数化架构基础
挂载于TDF_Label之上的 Attribute 属性,分为系统内置属性与用户自定义属性,也是OCAF 参数化架构的底层基础。
TNaming_NamedShape:存储 TopoDS_Shape 几何,零件、特征几何的存储载体;
XCAFDoc_ColorAttr:零部件颜色、透明度外观属性;
XCAFDoc_MaterialAttr:零部件材质属性;
TDF_Reference:实例引用属性,记录装配实例指向哪一个原型 Label 节点;
自定义 TDF_Attribute:继承基类扩展,存储草图尺寸、仿真参数、零部件编号、版本号等参数化、CAE 业务字段。
参数化架构设计思路 草图尺寸、特征参数全部存储在自定义 Attribute;修改参数之后,重新执行特征建模,更新对应 Label 上的
TNaming_NamedShape,再通过事务提交,完成参数驱动模型更新,同时支持 Undo/Redo 回滚。
实战高频坑: 自定义属性必须向 OCAF 应用工厂完成注册;否则文档保存再打开,自定义参数、业务属性会直接丢失。
9.5 OCAF 数据持久化:xcaf 文档读写、STEP 中性文件联动
OCAF 可以将完整特征树、装配实例、颜色材质、自定义参数保存为.xcaf二进制私有工程文档;同时 XCAF 可与第 7 篇 DataExchange 模块深度联动。
保存 OCAF 工程:
TDocStd_Application::SaveAs()输出 xcaf 文件,完整保留特征层级、装配实例变换、颜色、自定义业务参数;读取 OCAF 工程:
TDocStd_Application::Open(),完整恢复整套特征装配树与全部属性;STEP 装配导入 XCAF:
STEPControl_Reader读取 STEP 文件后,通过 XCAF 接口把装配信息灌入 TDF_Label 特征树。
重要知识点回顾 DataExchange:STEP AP203 不携带装配实例信息;AP214、AP242 才完整支持装配层级,导入后 XCAF 才能还原实例装配树。
⚠️工程常见坑: 普通 STEP 直接导入得到平铺 BRep Compound,不等于 XCAF 装配特征树;很多开发者导入 STEP 看不到装配层级,根源是没有调用 XCAF 装配转换接口; xcaf 属于 OCAF 私有格式,无法对外交付交换,对外数据交互仍然输出 STEP/IGES 中性文件。
9.6 Undo / Redo 事务底层原理
OCAF 原生内置撤销重做能力,基于 TDF 标签属性变更事务机制实现。
每一次修改 Label 上的属性,需要封装在事务之内;
TDocStd_Document::NewCommand()开启事务;CommitCommand()提交事务;只有成功提交的事务,才可以执行 Undo 回滚。
工程坑点:忘记
NewCommand / CommitCommand,修改不会进入撤销栈,撤销功能完全失效;大装配循环操作时不控制事务粒度,撤销栈会造成内存持续暴涨。
9.7 OCAF‑XCAF 与 Visualization 视图联动(衔接第 8 篇)
OCAF 只负责内存业务数据,不会自动刷新三维画面,需要和 Visualization 模块配合完成渲染:
遍历 XCAF 特征 / 装配树全部 TDF_Label 节点;
读取 Label 上 NamedShape 几何、实例变换矩阵、颜色透明度;
AIS 层生成
AIS_Shape,装配实例使用AIS_ConnectedInteractive实现显示对象复用;交由
AIS_InteractiveContext完成显示、拾取、高亮交互。
核心误区:打开 OCAF xcaf 文档,三维视图不会自动渲染,业务代码必须遍历装配树,手动构建 AIS 交互对象。
9.8 OCAF 工业落地边界总结
✅适合场景
构建参数化特征树、装配层级树,实例化大装配,实现几何原型复用,降低内存占用;
挂载零部件名称、颜色材质、草图尺寸、仿真参数等各类业务属性;
私有工程 xcaf 文档保存加载,原生自带 Undo/Redo 事务体系;
读取 STEP AP214/AP242 装配,完整还原装配结构,对接 DataExchange 模块;
作为国产 CAD/CAE 软件上层业务数据模型底座。
⚠️能力边界与短板
OCAF 本身不执行任何几何运算,布尔、缝合、造型计算依旧依赖 Modeling 模块;
xcaf 为私有二进制格式,无法对外交付,对外交换需要导出 STEP 中性文件;
自定义业务属性必须注册,保存重打开会发生参数丢失;
没有开箱即用 Qt 特征树 / 装配树 UI 控件,界面树组件需要业务层遍历 Label 树自行适配开发;
十万级以上大规模装配节点,Label 树遍历、序列化性能下降,业务层需要实现懒加载、分页加载策略。
工程落地思路:BRep 负责几何外形,OCAF‑XCAF 负责特征、装配、参数组织,Visualization 负责渲染交互,三者职责边界严格分离,开发中切忌模块职责混淆。
下期预告
第 10 篇 OCC 几何修复实战:缝隙、自由边、碎面、退化几何、BRepCheck 诊断与工业修复流水线。 掌握全部核心模块架构之后,进入工业真实模型痛点实战:工程 STEP 模型普遍存在各类几何破损,本篇讲解 OCC 诊断工具、缝合、修复工具,搭建适配 CAE 仿真前处理的自动化模型修复流水线。
