CAA二次开发对两个part进行Booler操作,运行错误,代码贴出,请大神帮忙解决

qq_35831339 2017-08-18 06:04:08
//获取CATBody
CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
CATDocument *pDoc = pEditor->GetDocument();
CATIDocRoots* piDocRootsOnDoc = NULL;
HRESULT rc = pDoc->QueryInterface(IID_CATIDocRoots,
(void**) &piDocRootsOnDoc);
/////获得Product的Root,是第一个元素
CATListValCATBaseUnknown_var* pRootProducts = piDocRootsOnDoc->GiveDocRoots();
CATIProduct_var spRootProduct = NULL_var;
if (pRootProducts && pRootProducts->Size()) //如果pRootProduct不为空,获得第一个元素
{
spRootProduct = (*pRootProducts)[1];
delete pRootProducts;
pRootProducts = NULL;
}
piDocRootsOnDoc->Release();
piDocRootsOnDoc = NULL;
////// Get CATIProduct handle on the root product.
CATIProduct *piProductOnRoot = NULL;
rc = spRootProduct->QueryInterface(IID_CATIProduct,
(void**) &piProductOnRoot);


CATIProduct_var spRef = piProductOnRoot ->GetReferenceProduct();

CATBody_var ResultBody;
if ( NULL_var != spRef )
{
CATILinkableObject * piLinkableObject = NULL;
HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );

if(SUCCEEDED(rc))
{
CATDocument * pDocument = NULL ;
pDocument = piLinkableObject->GetDocument();

CATIContainerOfDocument * pIContainerOfDocumentOnDoc = NULL;
rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocumentOnDoc);
if(SUCCEEDED(rc))
{
CATIContainer * pContainer = NULL ;
rc = pIContainerOfDocumentOnDoc->GetSpecContainer(pContainer);
if(SUCCEEDED(rc))
{
CATIPrtContainer *pSpecContainer = NULL;
rc = pContainer->QueryInterface(IID_CATIPrtContainer, (void**)&pSpecContainer) ;
if(SUCCEEDED(rc))
{
CATIPrtPart_var spPart = pSpecContainer->GetPart();
pSpecContainer->Release();
pSpecContainer = NULL ;

CATIPartRequest *pPartAsRequest = 0;
rc = spPart->QueryInterface(IID_CATIPartRequest, (void**)&pPartAsRequest) ;
if(SUCCEEDED(rc))
{
CATLISTV(CATBaseUnknown_var) BodyList;
pPartAsRequest->GetSolidBodies(CATUnicodeString(" "), BodyList);
for(int curSetIdx=1; curSetIdx<=BodyList.Size(); curSetIdx++)
{
CATBaseUnknown_var CurrentSet = BodyList[curSetIdx] ;
CATIBodyRequest *pBodyRequestOnCurrentSet = NULL;

rc = CurrentSet->QueryInterface(IID_CATIBodyRequest, (void**)&pBodyRequestOnCurrentSet);


CATLISTV(CATBaseUnknown_var) pListResult;
rc = pBodyRequestOnCurrentSet->GetResults(CATUnicodeString(" "), pListResult);

CATBaseUnknown_var CurrentFeat = pListResult[1] ;
CATIGeometricalElement *pGeomEltOnCurFeat = 0;
rc = CurrentFeat->QueryInterface(IID_CATIGeometricalElement, (void**)&pGeomEltOnCurFeat);
ResultBody = pGeomEltOnCurFeat->GetBodyResult();
}
}
}
}
}
}
}


//下面是进行布尔操作
CATSoftwareConfiguration * pConfig = new CATSoftwareConfiguration();
//CATCGMJournalList *pJournal = new CATCGMJournalList();

CATTopData topdata(pConfig);

CATGeoFactory* piGeomFactory = CATCreateCGMContainer() ;

CATDynBoolean* pOperatorBool = CATCreateDynBoolean(piGeomFactory,&topdata,CATBoolUnion,CATBodyVector.at(0),CATBodyVector.at(1));
if(pOperatorBool!=NULL)
{
pOperatorBool->Run();
MessageBox(NULL,_T("success2!"),_T("通知消息"),NULL);
CATBody* resultBody = pOperatorBool->GetResult();
if(resultBody==NULL)
{
MessageBox(NULL,_T("fail!"),_T("通知消息"),NULL);
}
}
...全文
916 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
didibababiu 2018-12-18
  • 打赏
  • 举报
回复
CATIA二次开发教程分享(CAA RADE教程) 教程不加密,任意播放,任意复制 需要的拿走,关于catia二次开发的,可以用来开发自己的catia小插件 https://pan.baidu.com/s/1yNgsTuQTC7wtvZ8abocJOw
赵4老师 2017-08-22
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
qq_35831339 2017-08-22
  • 打赏
  • 举报
回复
两个body须在同一part下
qq_35831339 2017-08-18
  • 打赏
  • 举报
回复
不知道是获取CATBoy出错,还是布尔运算参数有问题,求解答

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧