天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 48|回复: 0

‎使用 ObjectARX 从 AcDb2dPolyline 中删除顶点?‎

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
Removing a vertex from AcDb2dPolyline using ObjectARX?
‎使用 ObjectARX 从 AcDb2dPolyline 中删除顶点?‎


‎有没有办法从 AcDb2dPolyline/AcDb3dPolyline 中删除顶点(类似于 AcDbPolyline::removeVertexAt() ) ?‎

‎2d 和 3d 折线没有类似的移除功能,主要是因为存储机制不同。AcDbPolyline 可以更有效地将其顶点存储为单个实体中的数组,而对于 2d 和 3d 折线,顶点存储为单独的实体。因此,您将必须访问单个顶点实体并显式删除它。删除不会通过 2d/3d 折线图元本身发生。请尝试以下代码段。‎

‎查看以下代码片段:这将删除第一个顶点。‎

[code]void EraseVertex()

{

  ads_name name;  ads_point pt;

  // pick a polyline 2d

  int res = acedEntSel(_T("\nPick a 2dpolyline"), name, pt);

  // if ok

  if (res == RTNORM)

  {

    AcDbObjectId plineObjId;

    // convert the ename to an AcDbObjectId

    Acad::ErrorStatus es = acdbGetObjectId(plineObjId, name);   



    AcDbObjectPointer<AcDb2dPolyline> pPlineEnt(plineObjId, AcDb::kForRead);

    // if we have the right entity type

    if (pPlineEnt.openStatus() == Acad::eOk)

    {

      AcDbObjectIterator* pVertIter = pPlineEnt->vertexIterator();

      // select the 1st vertex in AcDb2dPolyline; regen to see change

      AcDbObjectPointer<AcDb2dVertex> pVertex(pVertIter->objectId(), AcDb::kForWrite);



      // check to see if it is not already erased

      if (es != Acad::eWasErased)

      {

        Adesk::Boolean bErased = pVertex->isErased();

        if (!bErased)

          es = pVertex->erase();

      }

    }

    delete pVertIter;

  }

}[/code]

 

 

 

 

‎使用 ObjectARX 从 AcDb2dPolyline 中删除顶点?‎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 13:27 , Processed in 0.164825 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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