当前位置: 首页 > news >正文

Creating a New Document-使用标准类型文档

摘要

本文与 CAAOmbNewDoc 用例配套使用。该用例说明如何创建并保存一个标准类型的新文档
  • 本用例将教会你什么
  • 关于文档的一些重要概念
  • CAAOmbNewDoc 用例
    • CAAOmbNewDoc 的功能
    • 如何运行 CAAOmbNewDoc
    • 在哪里找到 CAAOmbNewDoc 代码
  • 分步说明
  • 小结
  • 参考资料

通过本用例你将学到

本用例旨在帮助你迈出文档操作的第一步,核心演示如何创建并保存一个标准类型的新文档。在交互模式下,该操作等效于通过菜单 文件 → 新建 创建文档。
通过本用例,你还将理解创建新文档背后的关键底层逻辑与概念。你将主要掌握以下操作:
  • 创建一个新的标准类型文档
  • 获取其根容器(Root Container)
  • 保存文档并从当前会话中移除

在正式讲解用例之前,建议先理解文档的基本概念(下一节内容)。如果你已熟悉这些概念,可以直接跳转到用例部分。

关于文档的一些重要概念

文档概念允许用户将具有共性的对象归集在一起;在交互模式下,这些对象会在文档窗口中显示,并以唯一名称保存为一个存储单元,以便后续调用。
以相似方式创建与操作的对象会被归为同一种文档类型。在 CATIA V5 交互模式中,系统通过工作台(Workshop) 来创建和操作对象。一种文档类型可关联一个或多个工作台。例如:创建零件文档时,系统会提供草图工作台零件设计工作台,用于创建和操作名为 “零件” 的对象。所有这些零件最终会在一个或多个图形窗口(交互模式下)中统一呈现,这些窗口即代表零件文档。
CATIA 文档不仅是相关对象的存放载体,也是可在用户之间交换的持久化存储单元
在批处理代码中存在以下限制:
  • 仅可使用 CATDocumentServices::SaveAs 接口
  • 不会生成或更新缩略图

CAAOmbNewDoc 用例

CAAOmbNewDoc 是 CAAObjectModelerBase.edu 框架的一个用例,用于演示 ObjectModelerBase 框架的功能。

如何运行 CAAOmbNewDoc

要运行 CAAOmbNewDoc,你需要先配置编译环境,然后将 CAAOmbNewDoc 及其依赖项一起编译,配置运行环境,再执行该示例。相关详细说明请参阅参考文章 [1]。
运行该用例时,必须传入以下参数:
  • Output.CATPart – 用于存储文档的目录完整路径。文档可以是任意标准类型,不一定是 CATPart 类型。

在哪里找到 CAAOmbNewDoc 代码

CAAOmbNewDoc 代码位于 CAAObjectModelerBase.edu 框架下的 CAAOmbNewDoc.m 用例模块中:
  • WindowsInstallRootDirectory/CAAObjectModelerBase.edu/CAAOmbNewDoc.m
  • UnixInstallRootDirectory\CAAObjectModelerBase.edu\CAAOmbNewDoc.m
其中 InstallRootDirectory 为你 CAA V5 的安装根目录。该模块仅包含一个名为 CAAOmbNewDoc.cpp 的源文件。

分步说明

CAAOmbNewDoc 包含三个逻辑步骤:
  1. 创建新文档
  2. 获取文档根容器
  3. 保存并移除文档
接下来我们将结合代码对每一部分进行讲解。

创建新文档

创建会话

// 定义会话名称
char *sessionName = "CAA2_Sample_Session";
CATSession *pSession = NULL;
// 调用全局函数创建会话
HRESULT rc = ::Create_Session(sessionName, pSession);// 判断会话是否创建成功
if ((FAILED(rc)) || (NULL == pSession))
{cout << "ERROR in creating session" << endl << flush;return 1;
}

由于这是批处理程序,在开始操作文档前必须先新建一个会话。切记:程序执行结束后需要销毁该会话;任意批处理程序只能打开一个会话!可使用 Create_Session 全局函数新建会话。

创建新文档

CATDocument* pDoc = NULL;
// 调用静态方法新建零件类型文档
rc = CATDocumentServices::New("Part", pDoc);// 判断文档是否创建成功
if (NULL != pDoc)cout << "New document created OK" << endl << flush;
else
{cout << "ERROR in creating New document" << endl << flush;return 2;
}

 

会话已成功打开后,可通过 CATDocumentServices 的静态方法 New 创建新文档。该方法会完成文档的创建与初始化,支持文档的加载、存储与编辑操作。

本用例中使用了预定义的文档类型 **"Part"(零件),该名称与交互模式下执行文件→新建 ** 操作时显示的文档类型名称完全一致。注意:这不是文件后缀,该类型对应的文件后缀为 CATPart

获取文档根容器

CATInit *piInitOnDoc = NULL;
rc = pDoc->QueryInterface(IID_CATInit,(void**)&piInitOnDoc);
if (FAILED(rc))
{cout << "ERROR in QueryInterface on CATInit for doc" << endl << flush;return 3;
}const CATIdent idCATIContainer = "CATIContainer";
CATIContainer *piRootContainer = NULL;
piRootContainer = (CATIContainer*)piInitOnDoc->GetRootContainer(idCATIContainer);
if (NULL == piRootContainer)
{cout << "ERROR in GetRootContainer" << endl << flush;return 4;
}


使用 CATInit::GetRootContainer 方法获取文档根容器。通过 GetRootContainer 获取到的 CATIContainer 句柄,在你需要在文档中创建或操作对象时都是必需的。

保存并移除文档

保存文档

rc = CATDocumentServices::SaveAs(*pDoc,argv[1]);
if (SUCCEEDED(rc))cout << "Document saved OK" << endl << flush;
else
{cout << "ERROR in saving document" << endl << flush;return 5;
}


使用 CATDocumentServices 的静态方法 SaveAs 保存新文档。该方法第一个参数为通过 New 方法创建的文档指针,第二个参数为文档要保存的存储路径及文件名。本用例中,存储路径与文档名以程序运行参数的形式传入。

移除文档

rc = CATDocumentServices::Remove(*pDoc);
if (SUCCEEDED(rc))cout << "Document removed OK" << endl << flush;
else
{cout << "ERROR in removing document" << endl << flush;return 6;
}


若在同一会话中需要重新打开该文档,则必须在保存后将其从会话中移除。若无需重新打开,则无需手动移除,因为删除会话时文档会被自动移除。使用 CATDocumentServices 的静态方法 Remove 移除文档。

删除会话

rc = ::Delete_Session(sessionName);
if (SUCCEEDED(rc))cout << "Session deleted OK" << endl << flush;
else
{cout << "ERROR in deleting session" << endl << flush;return 7;
}

程序结束时,务必使用全局函数 Delete_Session 删除会话!

小结

本用例演示了如何实现以下操作:
  • 使用 CATDocumentServices 的静态方法 New 创建一个标准类型的文档
  • 使用 CATInitGetRootContainer 方法获取其根容器
  • 使用 CATDocumentServices 的静态方法 SaveAsRemove 保存文档并将其从会话中移除

References

[1] Building and Launching a CAA V5 Use Case
http://www.jsqmd.com/news/607248/

相关文章:

  • 2026年CCAA外审员备考现状:主观题占比提升,备考重点梳理 - 众智商学院官方
  • 写给开发者的AI入门:从“代码实现”到“能力编排”的思维跃迁
  • Stata实战:电商数据回归分析全流程解析(附婴幼儿奶粉案例)
  • 地理编码-逆地理编码-经纬度解析-逆经纬度解析API接口的运用 - Jumdata
  • leetcode 1629. 按键持续时间最长的键-耗时100-Slowest Key
  • novelWriter导出功能全解析:如何将小说转换为多种格式
  • 当uBlock Origin拦截失灵时:从混乱到掌控的完整修复指南
  • springboot获取nignx中的header请求头
  • Unity微信小游戏包体瘦身实战:搞定代码剪裁与TMP字体优化,首包加载快一倍
  • 第6章:树模型
  • 短视频SEO过程中容易犯的错误有哪些_短视频SEO最佳实践有哪些
  • 业内人士推荐:这几场国际半导体展会与盛会值得列入行程 - 品牌2026
  • Singularity未来展望:从Singularity到Apptainer的演进路线
  • Qwen3-14B私有部署入门:Visual Studio Code远程开发与调试配置
  • Http4s高级特性:WebSocket、Server-Sent Events与流式处理终极指南
  • 军工/汽车/消费电子全覆盖:MEMS加速度计核心厂商与应用场景匹配手册 - 深度智识库
  • 【Blender进阶】VSCode调试大型项目:从模块导入到参数解析的实战避坑指南
  • 2025届必备的十大降重复率工具横评
  • 中小企业必看:低成本搭建ISO 9001质量管理体系的5个关键步骤
  • nuScenes 点云语义分割:LidarSeg 模块深度解析
  • 学习记录:机器学习入门案例——波士顿房价预测(三)-波士顿房价预测与加州房价预测对比
  • 直播保存新方案:多平台支持的自动录制工具使用指南
  • SDD 之外是 Harness 吗?
  • SetFit迁移学习最佳实践:如何在不同领域间高效迁移
  • BiliBili-UWP终极指南:Windows平台上的B站原生体验革新
  • 抖音无水印视频下载工具:从内容获取到价值创造的全流程解决方案
  • Bitwarden Web Vault:终极密码管理平台完全指南
  • 一文看懂MEMS陀螺仪:从零偏稳定性到厂商选择,国产替代全攻略 - 深度智识库
  • Arduino-Pico:Raspberry Pi Pico Arduino核心完全指南 - 支持所有RP2040和RP2350开发板
  • 探寻2026年长沙江景房隔音大玻璃、大平层全屋隔音窗源头工厂哪个口碑好 - myqiye