ObjectARX如何获取点周围的封闭区域

在ObjectARX二次开发中,有两种方式可以获取点周围的闭合区域,

  1. 程序中向AutoCAD发送“-boundary”命令,获取边界集合。
  2. 在R18以上平台,使用acedTraceBoundary 函数。

方法一

下述例程可以获取点周围闭合区域边界的选择集,注意选择集里为多段线实体。

void CmdFindBoundary()
{
	ads_point ptInput;
	ads_name entPrevious;
	ads_name entLast;
	ads_name ssBoundary;
	acdbEntLast(entPrevious);	//在获取闭合区域之前文档的最后一个实体名
	if (RTNORM == acedGetPoint(NULL, _T("\n请点取一个内部点"), ptInput))
	{
		acedSSAdd(NULL, NULL, ssBoundary);
		acedCommand(RTSTR, _T("-BOUNDARY"), RTSTR, _T("A"), RTSTR, _T("I"), RTSTR, _T("Y"), RTSTR, _T("O"), RTSTR, _T("P"), RTSTR, _T(""), RTPOINT, ptInput, RTSTR, _T(""), RTNONE);
		while (RTNORM == acdbEntNext(entPrevious, entLast))
		{
			acedSSAdd(entLast, ssBoundary, ssBoundary); //该集合将所有多段线边界都添加进来
			ads_name_set(entLast, entPrevious);
		}

		int32_t lLenSS=0;
		acedSSLength(ssBoundary, &lLenSS);
		if (lLenSS)
		{			
			ads_name ent;
			for (int32_t i = 0; i < lLenSS; i++)
			{
				acedSSName(ssBoundary, i, ent);
				acedRedraw(ent, 3);  //高亮显示边界
			}

			acedGetPoint(NULL, _T("\n请点取任意一点结束命令"), ptInput);
		}
		acedSSFree(ssBoundary);

	}
}

方法二

利用下述接口,该接口仅暴露在R18以上平台,使用非常容易,大家参见帮助文档即可。

Acad::ErrorStatus acedTraceBoundary(
const AcGePoint3d& seedPoint,
bool detectIslands,
AcDbVoidPtrArray& resultingBoundarySet
);



写作不易,觉得文章拿得出手,就请点个赞吧!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Santiago

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值