收藏本站 积分充值

我的机械网

搜索
查看: 9|回复: 0

CATIA二次开发之装配约束

[复制链接]
发表于 2018-6-7 20:52:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我以为,约束的目的多是装配,其本质是姿态矩阵的变换,只是系统已经为你打包成一个“工具”而已。因此,我们可以好好利用现成的“工具”,达到组件快速装配的目的。
约束简介
约束是装配的重要手段,常见的约束有固定、平行、相合、平移、角度、接触等约束,如catCstTypeReference表示固定约束,约束类型如下图所示。通过约束关系,可以使组件之间的相对关系发生变化。而在这个变化过程中,用户不需要考虑姿态是如何变换的,只需要简单去设定约束类型即可,固定约束是约束中输入最少,相对而言比较容易理解的约束,本文将以固定约束为例,阐述约束的创建。进行固定约束开发,可主要划分下节的三个步骤,具体见如下代码:
CATIA二次开发之装配约束-1.jpg
装配约束
Demo代码
可复制到notepad++等查看,在头条上面,格式会乱(sorry)
void CreateConstraint(){ // 打开一个Proudct文件 pProductDocument CATDocument * pProductDocument = NULL; HRESULT rc= CATDocumentServices::OpenDocument(iArgv[1],pProductDocument); //①获取文档的Root Product spRootProduct CATIDocRoots *piDocRootsOnDoc = NULL; pProductDocument->QueryInterface(IID_CATIDocRoots, (void**) &piDocRootsOnDoc); CATListValCATBaseUnknown_var *pRootProducts = piDocRootsOnDoc->GiveDocRoots(); CATIProduct_var spRootProduct = NULL_var; if( NULL != pRootProducts ) { if(0 != pRootProducts->Size()) { spRootProduct = (*pRootProducts)[1]; delete pRootProducts; pRootProducts = NULL; } piDocRootsOnDoc->Release(); piDocRootsOnDoc = NULL; } // 找到第一个Product并将其设置为固定约束 spProdToConstraint int nbChild = spRootProduct->GetChildrenCount(); CATListValCATBaseUnknown_var* pListChild = spRootProduct->GetChildren("CATIProduct"); CATIProduct_var spProdToConstraint; if( (NULL != pListChild) && (0 != pListChild->Size()) ) { spProdToConstraint = ( (*pListChild)[1] ); delete pListChild; pListChild = NULL; } //②创建connector pConnector CATIConnector * pConnector = NULL; CATIProduct * pActiveComponent = NULL; CATIProduct * pInstanceComponent = NULL; CATILinkableObject * pGeometry = NULL; int iCreation = 0; spRootProduct->QueryInterface(IID_CATIProduct,(void **)&pActiveComponent); spProdToConstraint->QueryInterface(IID_CATIProduct,(void **)&pInstanceComponent); spProdToConstraint->QueryInterface(IID_CATILinkableObject,(void **)&pGeometry); GetProductConnector(pGeometry,pInstanceComponent,pActiveComponent,0,pConnector,iCreation); //③创建约束 CATICst *pCst = NULL; CATLISTV (CATBaseUnknown_var) ConnectorList; ConnectorList.Append(pConnector); pConnector->Release(); CreateConstraint(catCstTypeReference,ConnectorList,NULL,pActiveComponent,&pCst); pActiveComponent->Release(); pActiveComponent = NULL;}代码分析
创建约束的函数如下:
CreateConstraint( CatConstraintType iConstraintType, const CATLISTV(CATBaseUnknown_var)&iConnectorList, CATICkeParm* iCkeValue, CATIProduct* iReferenceProduct, CATICst** ioConstraint)大家只需关注如下三个输入对象即可,其中
1) iConstraintType是约束枚举类型
2) iConnectorList是进行约束的对象
3) iReferenceProduct是约束所属文档的reference product
在进行开发之前,大家可先想想利用CATIA去创建约束的过程:①约束的创建是在一个激活的结点下工作的,②同时用户需要选择一个或多个约束的对象,③并且去打开约束命令,选择约束类型,然后才能创建约束。其实给我们的接口同自身功能的输入输出是一致的,因此在二次开发中,进行约束创建步骤可简单归纳如下:
1) 获知约束到底创建哪个位置,这里表现为一个Product结点
2) 将待约束的对象都创建成一个Connector,构成一个对象集
3) 设置约束类型并给定其他参数,并可创建约束。
当然,这里需要保证你给定的对象集能够满足给定约束类型的创建,否则返回错误,这个需要开发人员去保证。在本例中,由于固定约束的创建只需一个对象即可,因此只有一个Connector,若要创建相合约束,主要区别就在于Connector个数的不同,其他开发均如出一辙。
本人将不断更新CATIA二次开发相关文章
大家也可关注本人小店(来个馒头:https://weidian.com/item.html?itemID=1646419866
开发深似海,疑义相与析
我的机械网(www.mejxw.com)中国最好的机械论坛!官方QQ群:机械设计论坛
 懒得打字嘛,点击右侧快捷回复【谢谢支持】  【给楼主点个赞吧】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
 
技术支持
VIP购买
迈迪技术支持
官方QQ群:
机械设计论坛
中国机械CAD论坛
中国机械cad论坛
VIP会员群
我的机械网vip群
工作时间:
9:00-17:00
客服热线:
15953133114
官方微信扫一扫
快速回复 返回顶部 返回列表