详解 OCCT TDocStd_Document

TDocStd_Document 是 OCCT 数据框架(TDF)中管理文档(Document)的核心组件,主要用于存储、操作和序列化基于标签(Label)和属性(Attribute)的层次化数据。以下是对文档的逐层解析:


1. 核心功能概述

TDocStd_Document 继承自 CDM_Document,是 TDF(TDataStd 数据框架)的入口点,提供以下核心功能:

  • 数据存储:通过 TDF_Data 管理标签(TDF_Label)和属性(TDF_Attribute)的树形结构。
  • 事务管理:支持事务(Transaction)操作(如 OpenCommand/CommitCommand),允许撤销(Undo)和重做(Redo)。
  • 持久化:支持文档的保存、加载,并管理修改状态(IsSaved/IsChanged)。
  • 引用与更新:处理外部引用变更时的依赖更新(UpdateReferences)和文档重计算(Recompute)。

2. 关键成员与方法

数据管理
  • Main()
    返回文档的根标签(0:1),是数据树的起点。
  • GetData()/SetData()
    访问或设置底层的 TDF_Data 对象(实际存储数据的容器)。
  • IsEmpty()
    检查根标签是否为空(无属性)。
事务与修改跟踪
  • 事务控制
    • NewCommand():开始新事务(可撤销的原子操作)。
    • CommitCommand()/AbortCommand():提交或中止事务。
    • HasOpenCommand():检查是否有未提交的事务。
  • 撤销/重做
    • Undo()/Redo():基于 TDF_Delta 记录的数据变更实现回退或重做。
    • SetUndoLimit():限制撤销步骤的最大数量。
持久化与状态
  • StorageFormat()
    返回文档的存储格式标识(如文件扩展名)。
  • IsSaved()/SetSaved()
    标记文档是否已保存到文件。
  • IsChanged()
    检查自上次保存后是否有未提交的修改。
高级功能
  • 嵌套事务
    SetNestedTransactionMode() 允许嵌套事务(如子操作在父事务中回滚)。
  • 增量压缩
    InitDeltaCompaction()PerformDeltaCompaction() 合并多个 Delta 以减少内存占用。
  • 空标签处理
    SetEmptyLabelsSavingMode() 控制是否保存无属性的标签。

3. 设计模式与技术亮点

  • 命令模式(Command Pattern)
    通过事务(Command)封装数据修改,支持撤销/重做。
  • 观察者模式
    SetModified()PurgeModified() 跟踪标签的修改状态,触发更新。
  • 数据版本控制
    StorageFormatVersion() 管理文档格式的兼容性(如不同 OCCT 版本间的迁移)。

4. 典型使用场景

// 创建文档
Handle(TDocStd_Document) doc = new TDocStd_Document("MyFormat");

// 获取根标签并添加数据
TDF_Label root = doc->Main();
TDataStd_Integer::Set(root, 42); // 添加整数属性

// 开始事务并修改数据
doc->OpenCommand();
TDataStd_Integer::Set(root, 100);
doc->CommitCommand();

// 撤销操作
if (doc->GetAvailableUndos() > 0) 
    doc->Undo(); // 恢复值为42

5. 注意事项

  • 内存管理
    文档需通过 Handle(智能指针)管理,避免内存泄漏(见构造函数注释)。
  • 性能
    频繁的撤销操作可能占用大量内存(Delta 链),需合理设置 UndoLimit
  • 线程安全
    文档操作默认非线程安全,需外部同步。

6. 总结

TDocStd_Document 是 OCCT 中连接应用程序与数据框架的桥梁,提供了完整的数据存储事务管理版本控制功能。其设计兼顾灵活性与性能,适合需要复杂数据建模的应用(如 CAD、CAE 工具)。理解其核心机制(如事务、标签属性模型)是高效使用 OCCT 的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心瞳几何原语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值