Catia地二次开发.docx
- 文档编号:27902185
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:14
- 大小:23.46KB
Catia地二次开发.docx
《Catia地二次开发.docx》由会员分享,可在线阅读,更多相关《Catia地二次开发.docx(14页珍藏版)》请在冰豆网上搜索。
Catia地二次开发
近的项目也快完毕了,第一次接触Catia的二次开发,对于一个以前完全没有学过Catia的人来说,当时感觉这似乎是不可能完成的任务。
Catia二次开发多数是以VB进展,网上的资料也偏VB居多,而我们偏偏选择了CAA,使用C++开发。
网上关于CAA的二次开发相关资料不多,但是CAA自带了很详细的说明文档,类库,和大量示例程序〔虽然我至今也仍未跑成功过它的例子〕。
现在就准备将项目开发过程中一些认为比拟重要的局部记录下来。
在项目中,有一个很重要的功能,就是上传Catia文件。
普通的上传文档并不困难,但关键在于Catia文件带有相的文档,比如CATProduct文件,所以需要在程序中自动找到Catia文件的相的文档。
起初,在帮助文档中找到一篇关于RetrievingaProduct'sProperties的文章,其中介绍了如何打印一个文档的属性。
首先它获得文档的根CATIProduct对象,然后获得它的所有孩子GetAllChildren(),这个方法将获得CATIProduct对象的所有孩子,并且不分层次。
然后使用CATIAttributesDescription类来获得CATIProduct的属性名,最后通过CATIInstance对象获得属性名对应的属性值,从CATIProduct获得CATIAttributesDescription和CATIInstance对象的操作如下:
CATIProduct*iInstanceProd;
......
CATIAttributesDescription*piAttrDesc=NULL;
iInstanceProd->QueryInterface(IID_CATIAttributesDescription,(void**)&piAttrDesc);
CATIInstance*piInstance=NULL;
rc=iInstanceProd->QueryInterface(IID_CATIInstance,(void**)&piInstance);
接着就可以使用CATIAttributesDescription的List()方法将属性获取到一个CATListValCATAttributeInfos对象中,然后就是对CATListValCATAttributeInfos的一个遍历过程。
CATListValCATAttributeInfosattrInfoList;
piAttrDesc->List(&attrInfoList);
for(inti=1;i<=attrInfoList.Size();i++)
{
CATAttributeInfosattrInfo=attrInfoList[i];
constCATUnicodeString&propertyName=attrInfo.Name();//属性名
constCATUnicodeString&valueType=attrInfo.Type()->Name();//属性类型
CATIValue*pValue=piInstance->GetValue(propertyName);//获得对应属性名的属性值
}
上面方式是在不知道有什么属性的时候将所有属性都获取出来,如果知道属性名称的话,直接通过CATIInstance的GetValue(..)就可以获取该属性名的属性值,比如零部件号的属性名对应的是PartNumber,还有一些用户自定义的参数也可以同样获取到。
到这时,我认为通过它能够获得文档的路径,因为里面有一个属性名DefaultRepSource,就是默认的文档源,确实在测试中,通过该属性也能获取局部文档的保存路径,但只限于CATPart文件,而对于CATProduct文件却是NULL,找了很多方法,但是通过使用CATIInstance对象来获取CATProduvt孩子中的CATProduct文件地址还是不行。
如何获得孩子的所有文档路径,只能寻找别的方法。
于是发现了CATIxPDMItem这个类,这个类很强大,它可以获得文档的所有属性,还有文档是否需要保存等信息。
如何获得CATIxPDMItem的实例,版本不同CAA还是有区别,r_16之上和r_14〔r_15没试过〕的获取CATIxPDMItem对象方法完全不同,两个版本的CATIxPDMItem的方法也不同,虽然高版本的保存了低版本的方法。
至于如何获取CATIxPDMItem对象,r_14版本中需要使用到CATxPDMSession对象,而r-16版本如此使用CATxPDMSessionServices的静态方法,这里只说r_16版本的〔可以在类库中查找CATIxPDMItem,查看不同版本的获得该对象方法〕。
CATIxPDMItem_varmItem;
CATDocument*pDoc;
CATxPDMSessionServices:
:
GetItemFromDocument(pDoc,mItem);
以上方法将pDoc中获得CATIxPDMItem对象。
现在看一下CATIxPDMItem的方法:
GetChildren(CATLISTV(CATBaseUnknown_var)&,CATLISTP(CATMathTransformation)这是保存的低版本中的获取孩子的方法
GetChildrenItems(CATListValCATIxPDMItem_var&,CATLISTP(CATMathTransformation)
两个方法都是获得CATIxPDMItem当前下一层的孩子,但是对于再下一层的孩子无法获得,所以如果要获得所有孩子需要递归或者迭代的方法。
GetDocFileName(CATUnicodeString&)该方法可以获得文档的保存路径
GetDocId(CATIDocId*)CATIDocId是一个很根本的包含文档属性的类,通过它也可以获得文档路径,还有文档类型
GetItemType(CATUnicodeString&)获得文档类型,由于在r_14版本中并没有该方法,所以在r_14中需要间接的从CATIDocId获得文档类型
GetProperty(CATUnicodeString&,CATUnicodeString&)获得指定属性名的属性值
SetProperty(CATUnicodeString&,CATUnicodeString&)设置指定属性名的值
标准的属性名有:
?
_PART_NUMBER零部件号
?
_REVISION版本
?
_DEFINITION定义
?
_NOMENCLATURE
?
_DESCRIPTIONREF描述
?
_SOURCE文档源,通过它也可以获得文档路径,但是我在尝试文档重定位的时候,并未成功?
?
。
。
。
。
。
?
下面是获得所有相联子部件的递归函数
[code]
voidGetSource(CATIxPDMItem_varmItem)
{
HRESULTrc;
CATUnicodeStringstrSource;
CATUnicodeStringstrType;
CATUnicodeStringstrName;
CATListValCATIxPDMItem_varoChildrenList;
CATLISTP(CATMathTransformation)oChildrenLocationList;
rc=mItem->GetChildrenItems(oChildrenList,oChildrenLocationList);
if(SUCCEEDED(rc))
{
intn=oChildrenList.Size();
for(inti=1;i<=n;i++){
CATIxPDMItem_varitem=oChildrenList[i];
if(SUCCEEDED(item->GetItemType(strType)))
{
item->GetDocFileName(strSource);
if(strType=="CATPart")
{
cout<<"CATPart,文件"<
}
elseif(strType=="CATProduct")
{
cout<<"CATProduct,文件"<
GetSource(item);
}
}
}
}
}
[/code]
CATIACAA二次开发详细教程〔10〕文档操作方法创建加载保存
一、创建〔Createthenewdocument〕
CATDocument*pDoc=NULL;rc=CATDocumentServices:
:
New("Part",pDoc);if(NULL!
=pDoc){cout<<"NewdocumentcreatedOK"< Nowthatthesessionisopened,youcancreateanewdocumentusingtheNewstaticmethodofCATDocumentServices.Thismethodcreatesadocumentandinitializesit,allowingittobeloadedandstoredandmakingiteditable.Inthisusecase,apredefineddocumenttype,"Part",isusedasadocumenttype.Ininteractivemode,thisisthenamethatappearswhenperformingaFile/Newoperation.Itisnotthefileextension,which,inthiscase,is"CATPart". 二、打开〔Loadthedocument〕 CATDocument*pDoc=NULL;rc=CATDocumentServices: : Open(argv[1],pDoc);if(SUCCEEDED(rc)&&(NULL! =pDoc)){cout<<"DocumentopenedOK"< Nowthatthesessionisopened,youcanloadanexistingdocumentusingtheOpenstaticmethodofCATDocumentServices.Thismethodneeds,asafirstparameter,theentirestoragepathnameanddocumentnameoftheexistingdocumentthatwewanttoloadintothesession.Inthisusecase,weenterthisinformationasanargumenttotheprogram.ThesecondparameteroftheOpenmethodreturnsaCATDocumentpointertothedocumentithasloaded.Oncethedocumentexistsinthesession,youcanworkwithobjectswithinit,usingspecificinterfacesexternaltotheObjectModelerBaseframework. 三、获取当前文档 CATFrmEditor*pEditor=GetEditor();if(NULL! =pEditor) {cout<<"EditorgotOK"< =pDoc){cout<<"DocumentopenedOK"< 四、提取根容器〔RetrievingtheDocumentRootContainer〕 CATInit*piInitOnDoc=NULL;rc=pDoc->QueryInterface(IID_CATInit,(void**)&piInitOnDoc);if(FAILED(rc)){cout<<"ERRORinQueryInterfaceonCATInitfordoc"< ThedocumentrootcontainerisretrievedusingtheCATInit: : GetRootContainermethod.TheCATIContainerhandleretrievedthroughGetRootContainerwillbenecessarywheneveryouwanttocreateormanipulateobjectsinthedocument. 五、保存文档〔SavetheDocument〕5.1另存 rc=CATDocumentServices: : SaveAs(*pDoc,argv[1]);if(SUCCEEDED(rc)){cout<<"DocumentsavedOK"< {cout<<"ERRORinsavingdocument"< Tosavethenewdocument,usetheSaveAsstaticmethodofCATDocumentServices.ThismethodtakesthepointertothedocumentcreatedbyNewasafirstparameter,andthestoragepathnameanddocumentnameunderwhichthedocumentistobestoredasasecondparameter.Inthisusecase,wepassthestoragepathnameanddocumentnameasanargumenttotheprogram. 5.2保存 rc=CATDocumentServices: : Save(*pDoc);if(SUCCEEDED(rc)){cout<<"DocumentsavedOK"< Tosavethenewdocumentunderthesamename,usetheSavestaticmethodof CATDocumentServices.ThismethodtakestheCATDocumentpointertothedocument astheonlyparameter. 六、删除〔Removethedocument〕 rc=CATDocumentServices: : Remove(*pDoc);if(SUCCEEDED(rc)){cout<<"DocumentremovedOK"< Ifyoueverneededtore-openthedocumentduringthissamesession,itwouldthenbenecessarytoalsoremoveitfromthesessionafterhavingsavedit.Otherwise,youneednotworryaboutitsincedeletingthesessionwillautomaticallyremovethedocumentaswell.Toremovethedocument,youshouldusetheRemovestaticmethodofCATDocumentServices. 七、按指定文档格式保存〔ExportingaDocumentFormatType〕7.1DefiningtheNewDocumentFormatType CATProduct_OmbExportTypeCATIExportTypeManagerlibCAAOmbExportType Anewdocumentformattypeissimplydefinedbyaddinganewentryinthecurrentframework'sdictionary.ThisnewentrywillcausetheFile/SaveAsdialogboxtolistthenewformattypeamongthetypesdefinedtothesaveoperation.Thefirstparameter, CATProduct_OmbExportType,indicatesthattheexportingdocumentisaProduct-type document(i.e.,adocumenthavinga.CATProductsuffix)andthattheexporteddocumentformattypeis"OmbExportType",whichwillalsobethesuffixofthesaveddocument.ThesecondparameterindicatesthatthisnewdocumenttypewillimplementtheCATIExportTypeManagerinterfaceinordertodefinethespecificsaveoperationsnecessarytoexportthenewdocument.Thelastparameteristhenameofthelibraryinwhichtheimplementationmoduleistobefound. 7.2ImplementingCATIExportTypeManager SeetheObjectModelerarticles[2]foradetailedexplanationaboutinterfaceimplementations.TheimplementationofCATIExportTypeManagerisfoundintheCAAOmbExportType.mmoduledefiningtheCAAEOmbExportTypeDataimplementationclass. CATImplementClass(CAAEOmbEExportTypeData,CodeExtension,CATBaseUnknown,CATProduct_OmbExportType); TheCATImplementClassmacrodefinestheimplementationclass CAAEOmbExportTypeDataasacodeextensionimplementingtheCATProduct_OmbExportTypelatetype. #include"TIE_CATIExportTypeManager.h"TIE_CATIExportTypeManager(CAAEOmbExportTypeData); Theabovestatementindicatesthatthisisanimplementationofthe CATIExportTypeManagerinterface. HRESULTCAAEOmbExportTypeData: : ExportData(CATDocument*pDoc,CATUnicodeStringpath){cout<<"**************BeginExportData1"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Catia 二次开发