包装纸袋公司 发表于 2022-5-25 13:55:03

怎么按长度 大于多少 选择线段

objcetArx 如何快速选择 长度大于多少的线段。 选择集里面那个那个组合是线段的长度?

e2002 发表于 2022-5-26 10:57:22

线段长度并不是对象的直接特性,你只能通过Class的Length方法,对已经获得的 SelectionSet遍历,然后创建一个符合你要求的新的 SelectionSet

包装纸袋公司 发表于 2022-5-26 17:06:08

e2002 发表于 2022-5-26 10:57
线段长度并不是对象的直接特性,你只能通过Class的Length方法,对已经获得的 SelectionSet遍历,然后创建一 ...

谢谢了 找了好久

gzxl 发表于 2022-5-26 17:46:42

本帖最后由 gzxl 于 2022-5-26 17:47 编辑

大概这样吧,可以参照下

ads_name sset, newss;
int result = acedSSGet(NULL, NULL, NULL, NULL, sset);
if (result != RTNORM) { return; }
Adesk::Int32 length = 0;
acedSSLength(sset, &length);
Acad::ErrorStatus es = Acad::eOk;
double dLength = 10.0; // 过滤线段的长度,假设为10米
acedSSAdd(NULL, NULL, newss);
for (int i = 0; i < length; i++)
{
    ads_name ename;
    acedSSName(sset, i, ename);
    AcDbObjectId objId = AcDbObjectId::kNull;
    es = acdbGetObjectId(objId, ename);
    if (es != Acad::eOk) { continue; }
    AcDbEntity* pEnt = NULL;
    es = acdbOpenObject(pEnt, objId, AcDb::kForRead);
    if (es != Acad::eOk) { continue; }
    if (pEnt->isKindOf(AcDbCurve::desc()))
    {
      AcDbCurve* pCurve = AcDbCurve::cast(pEnt);
      AcGePoint3d entPt;
      pCurve->getEndPoint(entPt);
      double length = 0.0;
      pCurve->getDistAtPoint(entPt, length);
      if (length >= dLength)
            acedSSAdd(ename, newss, newss);
      pCurve->close();
    }
    pEnt->close();
}
acedSSFree(sset);
acedSSSetFirst(newss, NULL); // 测试亮响
// ...
acedSSFree(newss);

包装纸袋公司 发表于 2022-5-27 11:52:06

gzxl 发表于 2022-5-26 17:46
大概这样吧,可以参照下

谢谢 找到了
页: [1]
查看完整版本: 怎么按长度 大于多少 选择线段