网站首页 > 技术教程 正文
我以为,约束的目的多是装配,其本质是姿态矩阵的变换,只是系统已经为你打包成一个“工具”而已。因此,我们可以好好利用现成的“工具”,达到组件快速装配的目的。
约束简介
约束是装配的重要手段,常见的约束有固定、平行、相合、平移、角度、接触等约束,如catCstTypeReference表示固定约束,约束类型如下图所示。通过约束关系,可以使组件之间的相对关系发生变化。而在这个变化过程中,用户不需要考虑姿态是如何变换的,只需要简单去设定约束类型即可,固定约束是约束中输入最少,相对而言比较容易理解的约束,本文将以固定约束为例,阐述约束的创建。进行固定约束开发,可主要划分下节的三个步骤,具体见如下代码:
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)
开发深似海,疑义相与析
猜你喜欢
- 2024-10-30 芜湖CATIA三维软件培训|你真的知道CATIA吗
- 2024-10-30 Catia v5/v6 catia自学视频教程
- 2024-10-30 NX二次开发-编辑部件族信息 ug nx二次开发
- 2024-10-30 CATIA功能性建模FMP,助力汽车零部件产品开发效率提升
- 2024-10-30 CAD软件二次开发框架 cad 二次开发
- 2024-10-30 UG/PROE/CATIA/PROE,你会用几个,一起来见证绘图软件的变迁吧!
- 2024-10-30 汽车行业必备设计软件CATIA安装程序与使用教材
- 2024-10-30 python with catia python中with open as的用法
- 2024-10-30 计算机辅助设计软件——CATIA catia辅助设计程序
- 2024-10-30 NX二次开发-NXManager外部开发环境配置
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)