背景:由于使用acedSSGet()函数自主选择得到的选择集,包含除多段线以外的实体,在进行多段线处理时,容易造成CAD软件崩溃等问题,需要辨别出多段线类型,再进行处理。

isKindOf()函数,用于辨别实体的类型,参数填写多段线类型即可实现多段线的提取。
AcDbEntity* pEnt;
acdbOpenObject(pEnt,ssId,AcDb::kForRead);
if (pEnt->isKindOf(AcDbPolyline::desc()))
{
AcDbPolyline* pPolyline;
pPolyline = AcDbPolyline::cast(pEnt);
int num = pPolyline->numVerts();
acutPrintf(TEXT("num:%d\n"), num);
for (int j = 0; j < num; j++)
{
AcGePoint2d pt;
if (pPolyline->getPointAt(j, pt) == eOk)
{
acutPrintf(TEXT("XY:%g,%g\n"), pt.x, pt.y);
}
}
pPolyline->close();
}
pEnt->close();
解析:
(1)先通过AcDbEntity实体指针对象,打开实体。
(2)然后调用isKindOf()函数,判断是否为多段线,若是进行多段线顶点坐标提取。使用isKindOf()函数前,必须保证实体已经打开。
(3)释放指针资源。
结果展示:

只输出两个多段线的坐标,圆弧、圆的实体被剔除不显示。目标达成!
1648

被折叠的 条评论
为什么被折叠?



