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;
}
}
CAD好帮手
-
近期文章
分类目录
简洁版
链接表
功能
分享统计


杭州格原
对于某些proxy对象,仅仅unlockLayer是删不掉的。