本文内容:获取绘制的实体,并输出多段线实体的顶点坐标,保留四位数。
1、结合开发记录(一)的内容,新建一个arx项目,并修改启动命令为Dt,在对应函数中,写入如下代码:
// Put your command code here
ads_name ss;
int rt = acedSSGet(NULL, NULL, NULL, NULL, ss);
if (rt == RTNORM)
{
acutPrintf(TEXT("选择成功\n"));
}
int length;
acedSSLength(ss, &length);
for (int i = 0; i < length; i++)
{
ads_name entres;
acedSSName(ss, i, entres);//获取实体名称
AcDbObjectId entId;
acdbGetObjectId(entId, entres);//获取实体对象ID
AcDbEntity* pEnt;
acdbOpenObject(pEnt, entId, AcDb::kForRead);//打开实体对象
AcDbPolyline* pPolyline = AcDbPolyline::cast(pEnt);//获取多段线
//AcGePoint3d pt;
int num = pPolyline->numVerts();//获取多段线顶点数量
for (int j = 0; j < num; j++)
{
AcGePoint2d pt;//二维坐标值
if(pPolyline->getPointAt(j,pt)==eOk)//获取序号为j的顶点坐标值
{
acutPrintf(TEXT("XYZ:%.4f,%.4f\n"), pt.x, pt.y);
}
}
pEnt->close();
pPolyline->close();
acedSSFree(entres);
}
acedSSFree(ss);
//end
2、代码关键函数解析
(1)acedSSGet()函数,用于获取选择集实体。通过设定选择方式,将选择集实体存储在ads_name对象中。
(2)acedSSLength()函数,用于获取选择集所含的实体数。
(3)acedSSName()函数。用于获取实体的名称。
(4)acdbGetObjectId()函数。通过实体名称,结合该函数,可获取实体对象ID。
(5)acdbOpenObject()函数,用于打开实体,获取多段线指针。
(6)AcDbPolyline* pPolyline = AcDbPolyline::cast(pEnt);//获取多段线指针
(7)numVerts()函数,获取多段线顶点数量信息。
(8)通过顶点数,遍历每个顶点,获取其坐标。
(9)getPointAt()函数,获取多段线单个顶点的坐标值。
(10)最后,使用完实体指针和ads_name对象后,记得关闭和释放资源。
代码如下:(若不释放资源,所选实体将无法进行删除操作)
pEnt->close();
pPolyline->close();
acedSSFree(entres);
3、结果展示:

3550

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



