CAD工具之家's Archivers

From boitboy on 2013-08-16 10:10:44

强制删除实体

Acad::ErrorStatus UnLockLayer(const AcDbObjectId layerId,bool& bLock,bool& bFrozen) { AcDbObject* pObj=NULL; Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,layerId,AcDb::kForWrite); if(es!=Acad::eOk) { return es; } if(!pObj->isKindOf(AcDbLayerTableRecord::desc())) { pObj->close(); return Acad::eNotThatKindOfClass; } AcDbLayerTableRecord *pLayerTableRecord=AcDbLayerTableRecord::cast(pObj); if(pLayerTableRecord==NULL) { pObj->close(); return Acad::eNullHandle; } bLock=pLayerTableRecord->isLocked(); bFrozen=pLayerTableRecord->isFrozen(); es=pLayerTableRecord->upgradeOpen(); if(es!=eOk) { pObj->close(); return es; } pLayerTableRecord->setIsLocked(false); pLayerTableRecord->setIsFrozen(false); pObj->close(); return Acad::eOk; } Acad::ErrorStatus LockLayer(const AcDbObjectId layerId,bool& bLock,bool& bFrozen) { AcDbObject* pObj=NULL; Acad::ErrorStatus es=acdbOpenAcDbObject(pObj,layerId,AcDb::kForWrite); if(es!=Acad::eOk) { return es; } if(!pObj->isKindOf(AcDbLayerTableRecord::desc())) { pObj->close(); return Acad::eNotThatKindOfClass; } AcDbLayerTableRecord *pLayerTableRecord=AcDbLayerTableRecord::cast(pObj); if(pLayerTableRecord==NULL) { pObj->close(); return Acad::eNullHandle; } es=pLayerTableRecord->upgradeOpen(); if(es!=eOk) { pObj->close(); return es; } pLayerTableRecord->setIsLocked(bLock); pLayerTableRecord->setIsFrozen(bFrozen); pObj->close(); return Acad::eOk; } //强制删除实体 Acad::ErrorStatus ForceEraseEntity(const AcDbObjectId objId) { AcDbEntityPointer spEnt(objId,AcDb::kForRead); Acad::ErrorStatus es=spEnt.openStatus(); if(es!=Acad::eOk) { return es; } es=spEnt->upgradeOpen(); if(es==Acad::eOk) { es=spEnt->erase(); return es; } else if(es==Acad::eOnLockedLayer) { bool bLock=false; bool bFrozen=false; es=UnLockLayer(spEnt->layerId(),bLock,bFrozen); if(es!=Acad::eOk) { return es; } es=spEnt->upgradeOpen(); if(es!=Acad::eOk) { LockLayer(spEnt->layerId(),bLock,bFrozen); return es; } es=spEnt->erase(); LockLayer(spEnt->layerId(),bLock,bFrozen); return es; } else { return es; } }

查看完整版本: 强制删除实体

From xinxirong on 2016-10-21 10:14:21

对于某些proxy对象,仅仅unlockLayer是删不掉的。

Tags:


©CAD工具之家
创办于:2013年5月24日