找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 15014|回复: 5
打印 上一主题 下一主题

[求助] CAA 如何获取split的分割面的边界 并将其投影到草图

[复制链接]
跳转到指定楼层
1
发表于 2013-11-13 09:34:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
CATI2DWFFactory_var sp2DWFactory=spSketch;
CATListValCATI2DWFGeometry_var sp2DGeometries;
CATISpecObject_var spProjection = sp2DWFactory->ProjectGeometry(spSpecBoundary,sp2DGeometries);
想通过上面的代码将split的分割面的边界投影到草图上,但是不知道如何才能获取到split的分割面的边界,哪位能帮个忙
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2013-11-30 15:04:15 | 只看该作者
本帖最后由 湖泊的话 于 2013-11-30 15:17 编辑

CATIGSMBoundary_var CreateBoundary( [td]const CATISpecObject_var [td]iElem,
const CATISpecObject_var [td]iSupport,
CATIGSMBoundaryPropag [td]iPropagationType [td]= BOUNDARY_TANGENT_PROPAG,
const CATISpecObject_var [td]iFrom [td]= NULL_var,
const CATISpecObject_var [td]iTo [td]= NULL_var,
CATGSMOrientation [td]iOrientationFrom [td]= CATGSMSameOrientation,
CATGSMOrientation [td]iOrientationTo [td]= CATGSMSameOrientation) = 0
抽取面的边界
3
发表于 2013-12-2 21:36:38 | 只看该作者
湖泊的话 发表于 2013-11-30 15:04
抽取面的边界

好长时间都没有人回答,自己琢磨了很久已经实现了。
具体方法如下:
先是获取Split特征的CATISplit接口,接口指针取名为 pSplit

    //设置当前工作对象为PartBody(零件文档中的“零件几何体”)
    pIPrtPart -> SetCurrentFeature(spSpecPartBody);

    //创建草图
    CATListValCATISpecObject_var spRefencePlanes = pIPrtPart->GetReferencePlanes();//1、2、3分别对应xy、yz、zx平面
    CATISketchFactory_var spSketchFactory = pSpecContainer;//pSpecContainer通过GetSpecContainer()获取
    CATISketch_var spSketch = spSketchFactory -> CreateSketch(spRefencePlanes[1]);
    CATISketchEditor_var spSketchEd = spSketch;
    CATI2DWFFactory_var sketch2DFactory = spSketch;

    //获取分割面BRep
    CATIMfGeometryAccess *pSplitAsGeomAccess = NULL;
    HRESULT hr = pSplit -> QueryInterface(IID_CATIMfGeometryAccess,(void**)&pSplitAsGeomAccess);
    CATLISTV(CATBaseUnknown_var) SplitBReps;
    if(SUCCEEDED(hr))
    {
        pSplitAsGeomAccess -> GetBReps(SplitBReps);
    }
    CATIBRepAccess *pSplitSurAccess = NULL;
    SplitBReps[1] -> QueryInterface(IID_CATIBRepAccess,(void**)&pSplitSurAccess);
    CATLISTV(CATBaseUnknown_var) FaceBrep = pSplitSurAccess -> GetBReps(2);

    //将边界投影到草图
    spSketchEd -> OpenEdition();
    CATListValCATI2DWFGeometry_var spList2D;
    CATISpecObject_var spProjection = sketch2DFactory -> ProjectGeometry(FaceBrep[1],spList2D);

    spSketchEd -> SaveEdition();
    spSketchEd -> CloseEdition();
    spSpecPart -> Update();

4
发表于 2013-12-2 22:02:06 | 只看该作者
cati_fuel 发表于 2013-12-2 21:36
好长时间都没有人回答,自己琢磨了很久已经实现了。
具体方法如下:
先是获取Split特征的CATISplit接口 ...

才发现自己注册了两个号

5
发表于 2013-12-4 10:24:43 | 只看该作者
cati_fuel 发表于 2013-12-2 21:36
好长时间都没有人回答,自己琢磨了很久已经实现了。
具体方法如下:
先是获取Split特征的CATISplit接口 ...

方法不错,不过在如下代码中:
if(SUCCEEDED(hr))
    {
        pSplitAsGeomAccess -> GetBReps(SplitBReps);
    }
    CATIBRepAccess *pSplitSurAccess = NULL;
    SplitBReps[1] -> QueryInterface(IID_CATIBRepAccess,(void**)&pSplitSurAccess);
如果获取SplitBReps失败,运行至“ SplitBReps[1] -> QueryInterface”处你的程序会崩掉的~
6
发表于 2013-12-9 18:21:30 | 只看该作者
湖泊的话 发表于 2013-12-4 10:24
方法不错,不过在如下代码中:
if(SUCCEEDED(hr))
    {

我做的是针对零件文档Part Design下的一个Addin,测试的时候,用函数GetBReps(SplitBReps)可以获取到唯一的一个BRep;为防止程序崩掉,可以先判断GetBReps()成功与否以及SplitBReps中是否有元素,然后再执行SplitBReps[1] -> QueryInterface()。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-27 14:22 , Processed in 0.045838 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表