CATIA V5R19二次开发之CAA:文档操作

2014-07-15 22:15:32|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:CAA, C/C++, CATIA|来源:唯设编程网

CATIA V5R19使用CAA进行二次开发的时候,我们经常都需要进行CATIA V5R19的文档(CATDocument)操作,本文介绍CATIA V5R19文档(CATDocument)操作的基本过程(创建会话、创建文档、获取容器、保存文档)以及相关的CAA代码。

1 创建一个会话(Session)

char *sessionName = "CAA2_Sample_Session";
CATSession *pSession = NULL;
HRESULT rc = ::Create_Session(sessionName,
pSession);
if ((FAILED(rc)) || (NULL == pSession))
{
   return 1;
}

这是一个批处理程序,在使用文档(Document)之前首先需要打开一个会话(Session)。在程序的最后记得要删除会话(Session),在任何批处理程序中一定不要同时打开多个会话(Session)!打开一个会话(Session)使用全局函数Create_session。

2 创建一个文档(Document)

CATDocument* pDoc = NULL;
rc = CATDocumentServices::New("Part",pDoc);
if (NULL != pDoc) cout << "New document created OK" << endl << flush;
else
{
   return 2;
}


Session打开之后,可以使用CATDocumentServices的静态方法New创建文档,该方法创建一个文档并对它进行初始化,使其可以被加载、存储和编辑。在该例子中,使用“Part”作为这个文档的类型,在交互式的模式中,这是使用File/New操作后显示的名称,不是文件的类型,即在这里不要使用“CATPart”。

3 获取Document的根容器:

CATInit *piInitOnDoc = NULL;
rc = pDoc -> QueryInterface (IID_CATInit,(void**) &piInitOnDoc);
if (FAILED(rc))
{
   return 3;
}

CATIContainer *piRootContainer = NULL;
piRootContainer = (CATIContainer*)piInitOnDoc -> GetRootContainer("CATIPrtContainer");
piInitOnDoc->Release();
piInitOnDoc= NULL ;

if (NULL == piRootContainer)
{
   return 4;
}

CATInit::GetRootContainer方法可以获取文档的根容器,你需要使用该方法获取CATIContainer句柄来创建或者操作文档中的对象。

4 保存文档(Document)

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


使用CATDocumentServices的静态函数SaveAs保存文档,该方法使用指向前面使用New方法所创建文档的指针作为第一个参数,用文档的存储路径和文件名作为第二个参数。在该用例中,通过运行参数传入文档存储的路径和文件名。

5 从Session中移除文档

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


在同一个Session中如果你要再次打开文档,有必要在保存完成以后从会话中移除文档。如果不需要再次打开文档,你就无需担心文档从会话中移除的问题,因为删除会话时会自动将文档移除。使用CATDocumentServices的静态方法Remove可以从会话中移除文档。

6 删除会话(Session)

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


在程序的最后不要忘记使用全局函数Delete_Session删除会话!

本文由唯设编程网原创,转载请注明来源。

发表评论0条 】
网友评论(共?条评论)..
CATIA V5R19二次开发之CAA:文档操作