ARX二次开发 遍历删除所有的约束


前言

AutoCAD自从2010版本开始,就多了参数化约束的功能,这个功能在三维软件中是很常用的,而从事多年AutoCAD平面制图的人很少用到,对其功能不是很了解。与此同时,对于二次开发人员,操作约束的参考示例例子更是不多,本文抛砖引玉,简单介绍。


提示:首先截几个AutoCAD2014的图,然后上代码进行示例操作

一、操作约束的菜单

在这里插入图片描述
autocad2014中的约束分为几何约束和标注约束

1.几何约束:它控制的是对象彼此之间的关系,比如相切、平行、垂直、共线等等。

2.标注约束:它控制的是对象的具体尺寸,比如距离、长度、半径值等等。

一般情况下,我们建议大家先使用几何约束确定图形的形状,再使用标注约束,确定图形的尺寸。

约束可以设置成可见,也可以设置成不可见,具体还有很多自定义设置,如下图:
在这里插入图片描述
在这里插入图片描述

二、使用约束的意义

下述说明摘抄自网友:

由于传统的cad系统是面向具体的几何形状,属于交互式绘图,要想改变图形大小的尺寸,可能需要对原有的整个图形进行修改或重建,这就增加了设计人员的工作负担,大大降低了工作效率。
而使用参数化的图形,要绘制与该图结构相同,但是尺寸大小不同的图形时,只需根据需要更改对象的尺寸,整个图形将自动随尺寸参数而变化,但形状不变。参数化技术适合应用于绘制结构相似的图形而要绘制参数化图形,“约束”是不可少的要素,约束是应用于二维几何图形的一种关联和限制方法。

其实很多建模工作流都有异曲同工之妙,例如AutoCad的动态快、Revit的族参数化建模、ArchiCAD的GDL参数化建模等等。

三、遍历删除约束

//spaceId是当前workingDataSpace 的ID
Acad::ErrorStatus DeleteAllConstraints(const AcDbObjectId& spaceId)
{
	AcDbObjectId networkId = AcDbAssocNetwork::getInstanceFromObject(spaceId, true);

	if (networkId.isNull())
	{
		return Acad::eNullObjectId;
	}

	AcDbObjectPointer<AcDbAssocNetwork> pNetwork(networkId, kForRead);
	if (pNetwork.openStatus() != Acad::eOk)
	{
		return Acad::eNullObjectId;
	}

	const AcDbObjectIdArray& actionsInNetwork = pNetwork->getActions();

	for (int nCount = 0; nCount < actionsInNetwork.length(); ++nCount)
	{
		const AcDbObjectId& idAction = actionsInNetwork[nCount];
		if (idAction == AcDbObjectId::kNull)
			continue;

		if ( actionsInNetwork[nCount].objectClass() == NULL ||
			!actionsInNetwork[nCount].objectClass()->isDerivedFrom(
			AcDbAssoc2dConstraintGroup::desc()))
			continue;

		AcDbObjectPointer<AcDbAssoc2dConstraintGroup> pAction(idAction, kForWrite);
		if (pAction.openStatus() != Acad::eOk)
			continue;

		AcDbAssoc2dConstraintGroup* pConstGrp =	static_cast<AcDbAssoc2dConstraintGroup*>(pAction.object());
		if (!pConstGrp)
			continue;

		pConstGrp->erase();
	}

	return Acad::eOk;
}

## 2.关键说明

AcDbAssoc2dConstraintGroup:

所有的约束关系都保存在约束组(AcDbAssoc2dConstraintGroup)里面,怎样获得约束组即是关键所在。

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值