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)里面,怎樣獲得約束組即是關鍵所在。總結
…
總結
以上是生活随笔為你收集整理的ARX二次开发 遍历删除所有的约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql集群多管理节点_项目进阶 之
- 下一篇: win7ie11调用java失败,Win