#pragma once #include "PeriodicLattice.h" #include #include //结构体用于保存操作的信息 struct CommandInfo { //操作的类型 //CommandType type; //更行范围 BBox bbox; //更新数据表 std::vector idxList; //表对应数据 std::vector valList; }; //结构体用于保存详细参数 struct MeshDataInfo { double isopStep; //等值线间隔 int markStep; //标注间隔 double zMin; double zMax; double isoplethMin; //最小等值线 double isoplethMax; //最大等值线 }; //用于Object和View中的Undo/Redo class OMUndoRedo { public: OMUndoRedo(void); ~OMUndoRedo(void); void Start(); void Add(const BBox& bbox, const std::vector& idxList, const std::vector& valList); void AddMeshInfo(double isopStep, int markStep, double zMin, double zMax, double isoplethMin, double isoplethMax); void End(); void Undo(); void Redo(); unsigned int GetUndoCurStep(); unsigned int GetUndoCount(); //删除所有的undo列表以及内存 void ClearUndoList(); private: //保存undo消息的集合 std::vector m_vInfos; std::vector m_vDataInfos; //指向当前Vector中对应的Index uint32_t m_curStep; //指向当前Vector中 MeshDataInfo 对应的Index uint32_t m_curDataStep; //数据总数,大于这个数就释放前面的 uint64_t m_numData; //临时 CommandInfo* m_pCmdinfo; MeshDataInfo* m_pDataInfo; //正在进行添加undo bool m_bWoring; std::map m_data; };