objectarx2023开发记录(二)--用户交互

本文内容:获取绘制的实体,并输出多段线实体的顶点坐标,保留四位数。

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、结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值