博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CAA如何进行干涉检查?
阅读量:6829 次
发布时间:2019-06-26

本文共 2767 字,大约阅读时间需要 9 分钟。

hot3.png

作者:馒头君

链接:https://zhuanlan.zhihu.com/p/32205741
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

干涉检查的接口很诡异(猜测为CATIClash等),在CAA Help view中无法找到,百科全书亦没有。然而,我们却可以从CNextObjectBrowser中查询到该接口,也就意外着CATIA应该是开放该接口的,事实上,我们是可以基于Automation的方式进行开发的。

干涉简述

干涉检查是装配设计中应用非常广泛的功能之一,例如,通过干涉检查可以判断多个对象之间在静态位置和相对运动时的交涉情况,从而能够保证装配质量。虽然CATIA提供了干涉检查的相关功能,但是有时候,我们是需要去定制干涉结果或者借助干涉结果去实现其他功能。为了明确程序开发的输入输出,编者首先在这里介绍下CATIA自带的功能。如下图,可知该功能的实现主要需要输入三个参数:干涉类型、选择方式以及待干涉Product的结点。

v2-31e415428f2c37772a981a1dacd30719_b.jpg

本文假定选择方式为“两个选择之间”,此处已经获取的文档结点为spRootProduct,Instance CATIProduct为InstProduct1和InstProduct2,干涉Demo程序如下,大家举一反三。

干涉检查代码示例

void ClashCompute(CATIProduct_var spRootProduct, CATIProduct_var                               InstProduct1, CATIProduct_var InstProduct2){//开始获取CATIAClashs    CATIAProduct* pCATIAPrd = NULL;    spRootProduct ->QueryInterface( IID_CATIAProduct, (void **)&pCATIAPrd );    CATIAClashes* pCATIAClashes = NULL;    CATUnicodeString    strname = "Clashes";    CATBSTR BSTR;    strname.ConvertToBSTR(&BSTR );    CATBaseDispatch* pBaseDis = NULL;    pCATIAPrd->GetTechnologicalObject( BSTR, pBaseDis); //获取Object对象    pBaseDis->QueryInterface( IID_CATIAClashes, (void **)&pCATIAClashes );//创建一个CATIClash并添加到CATIAClashs集中    CATIAClash* pCATIAClash = NULL;    pCATIAClashes->Add( pCATIAClash);    CATIClash* pClash = NULL;    pCATIAClash->QueryInterface( IID_CATIClash, (void **)&pClash );//设置CATIClash的参数并计算    CATListValCATBaseUnknown_var InstProduct1List;    InstProduct1List.Add(InstProduct1);    CATListValCATBaseUnknown_var InstProduct2List;    InstProduct2List.Add(InstProduct2);    pClash->SetGroupMode(CATGroupModeBetweenTwo);//设定选择方式    pClash->SetGroup(1, InstProduct1List);              //设定图44中的“选择:1”    pClash->SetGroup(2, InstProduct2List);              //设定图44中的“选择:2”    CATComputationCase iCase = CATComputationCaseClashContact;    pClash->SetComputationCase(iCase);  //设定干涉类型“接触+碰撞”    pClash->Compute();//读取计算结果    CATIClashResult* pResult = NULL;    pClash->GetResult(pResult);    int count = 0;    pResult->CountConflicts(count);//输出结果    for (int k=0;k
GetConflict(k,pResultConflict); CATIProduct*oFirstProduct=NULL; CATUnicodeString oShapeName1; CATIProduct*oSecondProduct=NULL; CATUnicodeString oShapeName2; pResultConflict->GetFirstProduct( oFirstProduct, oShapeName1); pResultConflict->GetSecondProduct( oSecondProduct, oShapeName2);/*其中,第K个相互干涉(碰撞和接触)的两个Product结点指针:oFirstProduct和oSecondProduct开发者可以捕获干涉记录中相互干涉的对象,然后依据该结果并根据一定的标准去进行后续的开发可输出结果例如:cout<<”FirstProductNumber:”<
GetPartNumber()<

分析:本处的编程方式可理解为“先形式,后内容”,即首先创建一个干涉的空壳实例,然后设定各种参数,最终完成干涉结果的检查。大家可以有意地分段测试函数,查看效果。同时,这里用到一种以CATIA为前缀的接口,这种接口(如CATIASection:断面剖切)的实现很多会涉及GetTechnologicalObject对象的获取,而编程均属于上述方式。

 

转载于:https://my.oschina.net/fenglinwansu/blog/2872631

你可能感兴趣的文章
冒泡排序和选择排序
查看>>
Add Auto Login computer by Registy(自动登陆计算机通过增加注册表键值方法)
查看>>
Python 标准库中的装饰器
查看>>
数论12——浅谈指数与对数
查看>>
几种重要的网络演化模型
查看>>
override与重载(overload)的区别
查看>>
maven项目 jsp报错
查看>>
UVA699 dfs and map
查看>>
###20175311MyCP(课下作业,必做)
查看>>
WCF 第二章 契约 同步请求回复操作
查看>>
Python3 Socket网络编程
查看>>
山泉戒
查看>>
Message Decoding
查看>>
EL表达式产生了DOM对象
查看>>
iOS开发数据库篇—FMDB简单介绍
查看>>
app测试更多机型系统解决方法
查看>>
winxp sp2下安装.net framework失败解决方法
查看>>
python-pcap模块解析mac地址
查看>>
LeeCode-Rotate Array
查看>>
JS封装动画框架,网易轮播图,旋转轮播图
查看>>