怎么按长度 大于多少 选择线段
objcetArx 如何快速选择 长度大于多少的线段。 选择集里面那个那个组合是线段的长度?线段长度并不是对象的直接特性,你只能通过Class的Length方法,对已经获得的 SelectionSet遍历,然后创建一个符合你要求的新的 SelectionSet e2002 发表于 2022-5-26 10:57
线段长度并不是对象的直接特性,你只能通过Class的Length方法,对已经获得的 SelectionSet遍历,然后创建一 ...
谢谢了 找了好久 本帖最后由 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);
gzxl 发表于 2022-5-26 17:46
大概这样吧,可以参照下
谢谢 找到了
页:
[1]