Loading a Document-使用现有文档

摘要

本文与 CAAOmbLoadDoc 用例配套使用。该用例说明如何加载并保存现有文档
  • 通过本用例您将学习到的内容
  • 关于文档的一些重要概念
  • CAAOmbLoadDoc 用例
    • CAAOmbLoadDoc 的功能
    • 如何运行 CAAOmbLoadDoc
    • 在哪里找到 CAAOmbLoad 代码
  • 分步讲解
  • 小结
  • 参考资料

通过本用例您将学习到的内容

本用例旨在帮助您初步掌握文档的基本操作。您将主要学习如何:
  • 加载一个已存在的文档
  • 保存文档并将其从会话中移除

在开始讲解用例本身之前,有必要先理解文档的概念,这也是下一节的内容。如果您已经熟悉这些概念,可以直接跳转到用例部分。

关于文档的一些重要概念

文档这一概念允许用户将具有共性的对象归集在一起;在交互模式下,这些对象会显示在文档窗口中,并以唯一的存储名称保存为一个存储单元,以便后续调取使用。
采用相似方式创建和操作的对象会被归为同一种文档类型。在 CAA V5 交互模式中,系统提供工作台用于创建和操作对象。一种文档类型可关联一个或多个工作台。例如,当你创建零件文档时,系统会提供草图器零件设计工作台,通过这些工作台可以创建和操作名为 “零件” 的对象。所有这些零件随后会在一个或多个图形窗口中(交互模式下)统一展示,这些窗口即代表一个零件文档。
CATIA 文档不仅是相关对象的存储载体,同时也是可在用户之间相互传递的持久化存储单元。
注意:如果在会话中加载非 CATIA 文档(STEP、IGES、3DXML、DXF 等),请参阅专用技术文章 [1]。你可以在其中找到关于已加载文档管理的更多补充信息。

CAAOmbLoadDoc 用例

CAAOmbLoadDoc 是 CAAObjectModelerBase.edu 框架下的一个用例,用于演示 ObjectModelerBase 框架的各项功能。

CAAOmbLoadDoc 的功能

CAAOmbLoadDoc 的作用是加载一个已存在的文档,并对其进行保存,以及从当前会话中移除该文档。

如何运行 CAAOmbLoadDoc

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

在哪里可以找到 CAAOmbLoadDoc 代码

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

分步说明

CAAOmbLoadDoc 包含两个逻辑步骤:
  • 加载现有文档
  • 保存并移除文档
接下来我们将结合代码对每一部分进行讲解。

加载现有文档

创建会话

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::OpenDocument(argv[1],
                               pDoc);
if (SUCCEEDED(rc) && (NULL != pDoc))
    cout << "Document opened OK" << endl << flush;
else
{
   cout << "ERROR in opening an existing document" << endl << flush;
   return 2;
}

会话创建完成后,可使用 CATDocumentServices 的静态方法 OpenDocument 加载现有文档。该方法第一个参数为需要加载到会话中的现有文档的完整存储路径及文件名。在本用例中,该信息以程序运行参数的形式传入。

Open 方法的第二个参数会返回所加载文档的 CATDocument 指针。

文档加载到会话中后,即可借助 ObjectModelerBase 框架之外的专用接口对文档内的对象进行操作。

保存并移除文档

保存文档

rc = CATDocumentServices::Save(*pDoc);
if (SUCCEEDED(rc))
    cout << "Document saved OK" << endl << flush;
else
{
    cout << "ERROR in saving document" << endl << flush;
    return 3;
}

若要以原文件名保存该文档,可使用 CATDocumentServices 的静态方法 Save。该方法仅需传入指向文档的 CATDocument 指针作为唯一参数。

移除文档

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

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

删除会话

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

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

小结

本用例演示了如何实现以下操作:
  • 使用 CATDocumentServices 的静态方法 Open 加载现有文档
  • 使用 CATDocumentServices 的静态方法 SaveRemove 保存并移除文档

References

[1] Document Understanding
[2] Building and Launching a CAA V5 Use Case
posted @ 2026-04-08 13:24  Breadss  阅读(1)  评论(0)    收藏  举报