#include "StdAfx.h" #include "TDbObjectPointer.h" #include "commonRoad.h" #include "CADEnt.h" #include "RoolBackNew.h" ArAllStep CDataRoolBack::m_steps; // 清理所有保存的步骤 void CDataRoolBack::ClearAllStep() { ClearAcaryAll(m_steps); } // 新添加一步 void CDataRoolBack::AddNewStep() { m_steps.append(RoolStep()); } // 添加一个删除的数据 void CDataRoolBack::AddRemoveData(AcDbObjectId &idRemoved) { m_steps.last().arObjRemed.append(idRemoved); } // 添加一个新添加的数据 void CDataRoolBack::AddNewData(AcDbObjectId &idNew) { m_steps.last().arObjAdded.append(idNew); } // 回退一步 // 清理所有的数据,被删除的回复出来,新添加的删除掉。 void CDataRoolBack::RoolAStep() { RoolStep &rs = m_steps.last(); ArObjID &arIdRem = rs.arObjRemed; ArObjID &arIdNew = rs.arObjAdded; int i = 0; for (i = (int)arIdNew.length() - 1; i > -1; i--) { AcDbObjectPointer pObj; if (pObj.open(arIdNew[i], AcDb::kForWrite, false) == Acad::eOk) { pObj->erase(true); // 删除 } } for (i = (int)arIdRem.length() - 1; i > -1; i--) { AcDbObjectPointer pObj; if (pObj.open(arIdRem[i], AcDb::kForWrite, true) == Acad::eOk) { pObj->erase(false); // 回复出来 } } m_steps.removeLast();// 删除掉最后一个 } AcDbObjectId RoolBackAddNewData(AcDbEntity *pEnt) { ASSERT(pEnt != NULL); AcDbObjectId objectId = AddToModelSpace(pEnt); CDataRoolBack::AddNewData(objectId); return objectId; } void RoolBackAddRemoveData(CCADEnt *pEnt) { ASSERT(pEnt != NULL); if (!pEnt->IsErased()) { AcDbObjectId id = pEnt->ObjId(); if (pEnt->Erase()) { CDataRoolBack::AddRemoveData(id); } } }