Files
envi-code/SourceCode/Code2026/tg_shs/shs_siteplan/RoolBackNew.cpp
T
2026-09-28 15:28:50 +08:00

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);
}
}
}