82 lines
1.6 KiB
C++
82 lines
1.6 KiB
C++
#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<AcDbObject> pObj;
|
|
if (pObj.open(arIdNew[i], AcDb::kForWrite, false) == Acad::eOk)
|
|
{
|
|
pObj->erase(true); // 删除
|
|
}
|
|
}
|
|
|
|
for (i = (int)arIdRem.length() - 1; i > -1; i--)
|
|
{
|
|
AcDbObjectPointer<AcDbObject> 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);
|
|
}
|
|
}
|
|
} |