zoukankan      html  css  js  c++  java
  • C++ ARX二次开发-BREP库

    一、本节课程
    C++ ARX二次开发-BREP库

    二、本节要讲解的知识点
    通过两个命令来演示BREP库的使用:获取圆柱体中圆柱面的特征参数;获取任何三维实体的边的采样曲线。

    三、具体内容
    1、思路:组合体(Complex)、壳(Shell)、面(Face)、边(Edge)和顶点(Vertex)都是BREP的常用对象。BREP访问组合体、壳、面、边、顶点,使用遍历的方法,可以通过子实体访问到某一个具体的对象。

    2、实现:
    (1)建立了一个新的项目,并且需要引用BREP库的LIB,INC目录,在附加依赖项里面链接对应的库。

    (2)添加两个命令:

    ACED_ARXCOMMAND_ENTRY_AUTO(CBrepTestApp, yunyouMyGroup, GetCylinderInfo, GetCylinderInfo, ACRX_CMD_MODAL, NULL)

    ACED_ARXCOMMAND_ENTRY_AUTO(CBrepTestApp, yunyouMyGroup, GetBoundayCurves, GetBoundayCurves, ACRX_CMD_MODAL, NULL)

    static void yunyouMyGroupGetCylinderInfo () {

    AcDbEntity *pEnt=NULL;

    AcGePoint3d pickPoint;

    if (CSelectUtil::PromptSelctEnts(TEXT(" 选择三维实体:"),AcDb3dSolid::desc(),pEnt,pickPoint))

    {

    //建立一个BREP对象

     AcBrBrep brepEnt;

     brepEnt.set(*pEnt);

     //创建一个面的遍历器

     AcBr::ErrorStatus returnValue=AcBr::eOk;

     AcBrBrepFaceTraverser  brepFaceTrav;

     returnValue=brepFaceTrav.setBrep(brepEnt);

     while ((!brepFaceTrav.done()) &&(returnValue==AcBr::eOk) )

     {

     AcBrFace brFace;

     AcBr::ErrorStatus es=brepFaceTrav.getFace(brFace);

     if (es==AcBr::eOk)

     {

     AcGeSurface *pAcGeSurface;

     brFace.getSurface(pAcGeSurface);

     AcGeExternalBoundedSurface *ebSurf=(AcGeExternalBoundedSurface*)pAcGeSurface;

     if(ebSurf!=NULL && ebSurf->isCylinder())

     {

     AcGeCylinder *pCylinder=(AcGeCylinder*)ebSurf;

     acutPrintf(TEXT(" 圆柱面的信息:"));

     acutPrintf(TEXT(" 半径:%.2f"),pCylinder->radius());

     AcGePoint3d center=pCylinder->origin();

     acutPrintf(TEXT(" 中心点:(%.2f,%2.f,%.2f)"),center.x,center.y,center.z);

     AcGeVector3d axis=pCylinder->axisOfSymmetry();

     acutPrintf(TEXT(" 轴线向量:(%.2f,%2.f,%.2f)"),axis.x,axis.y,axis.z);

     }

     delete pAcGeSurface;

     }

     returnValue=brepFaceTrav.next();

     }

     pEnt->close();

    }

    }

    static void yunyouMyGroupGetBoundayCurves () {

    AcDbEntity *pEnt=NULL;

    AcGePoint3d pickPoint;

    if (CSelectUtil::PromptSelctEnts(TEXT(" 选择三维实体:"),AcDb3dSolid::desc(),pEnt,pickPoint))

    {

    //建立一个BREP对象

    AcBrBrep brepEnt;

    brepEnt.set(*pEnt);

    //创建一个面的遍历器

    AcBr::ErrorStatus returnValue=AcBr::eOk;

    AcBrBrepEdgeTraverser  brepEdgeTrav;

    returnValue=brepEdgeTrav.setBrep(brepEnt);

    if(returnValue==AcBr::eOk)

    {

    while ((!brepEdgeTrav.done()) &&(returnValue==AcBr::eOk) )

    {

    AcBrEdge brEdge;

    brepEdgeTrav.getEdge(brEdge);

    AcGeCurve3d *pGeCurve=NULL;

    if (brEdge.getCurve(pGeCurve)==AcBr::eOk)

    {

    AcGeCurve3d *pNativeCurve=NULL;

    Adesk::Boolean bRet=((AcGeExternalCurve3d*)pGeCurve)->isNativeCurve(pNativeCurve);

    int numSample=180;

    AcGePoint3dArray points;

    pNativeCurve->getSamplePoints(numSample,points);

    if (pNativeCurve->isClosed()&& points.length()>0)

    {

    points.append(points[0]);

    }

    delete pNativeCurve;

    delete pGeCurve;

    if (points.length()>2)

    {

    CPolylineUtil::Add3dPolyline(points);

    }

    }

    returnValue =brepEdgeTrav.next();

    }

    }

    pEnt->close();

    }

    }

    记得包含头文件:

    #include "SelectUtil.h"

    #include "brbrep.h"

    #include "brbftrav.h"

    #include "brbetrav.h"

    #include "brface.h"

    #include "bredge.h"

    #include "PolylineUtil.h"

    3、如何添加现有项:

    解决方案资源管理器->右键->添加现有项,(事先从已有的代码目录中拷贝需要的头文件和源文件到目标项目中),选择.H和.CPP文件,添加即可。

    4、测试效果:(1) GETCYLINDERINFO命令的效果:

    命令: GETCYLINDERINFO

    选择三维实体:

    圆柱面的信息:

    半径:814.03

    中心点:(7005.37,968,1249.41)

    轴线向量:(0.00, 0,1.00)

    (2) GetBoundayCurves命令的效果
    ————————————————
    版权声明:本文为CSDN博主「云幽学院」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/liujiangtaocsu/article/details/82917720

  • 相关阅读:
    《大数据之路:阿里巴巴大数据实践》——7-章 数据挖掘
    《如何做到毫秒级从百亿大表任意维度筛选数据?》
    《大数据之路:阿里巴巴大数据实践》——6-章 数据服务
    《【原创】推荐系统
    给机器学习面试者的十项建议 | 面试官角度
    干货 | NLP算法岗大厂面试经验与路线图分享
    目标检测任务中的训练宝典 |实用技巧
    食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理
    一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)
    CVPR 2019细粒度图像分类竞赛中国团队DeepBlueAI获冠军 | 技术干货分享
  • 原文地址:https://www.cnblogs.com/mjgw/p/12392595.html
Copyright © 2011-2022 走看看