+
+std::vector<vtkPolyData*> MeshManagerModel::GetAllPolyDatas()
+{
+ std::vector<vtkPolyData*> polydatas;
+ for(int i = 0; i < _meshes.size(); i++){
+ polydatas.push_back(_meshes.at(i)->GetMeshBase());
+ }
+ return polydatas;
+}
+
+int MeshManagerModel::GetCurrentMesh()
+{
+ return currentMesh;
+}
+
+void MeshManagerModel::Undo()
+{
+ if(history->UndoSize() > 0)
+ {
+ if(memoryMode == false){
+ RestoreState(history->Undo(new ManagerState(_meshes, meshId, lastModified)));
+ RefreshOutputs(true);
+ }
+ else if(history->UndoSize() > 1){
+ RestoreStateMemoryMode(history->UndoKeepCurrent());
+ }
+ }
+}
+
+void MeshManagerModel::Redo()
+{
+ if(history->RedoSize() > 0)
+ {
+ if(memoryMode == false){
+ RestoreState(history->Redo(new ManagerState(_meshes, meshId, lastModified)));
+ RefreshOutputs(true);
+ }
+ else{
+ RestoreStateMemoryMode(history->RedoKeepCurrent());
+ }
+ }
+}
+
+void MeshManagerModel::Save()
+{
+ history->Save(new ManagerState(_meshes, meshId, currentMesh));
+}
+
+void MeshManagerModel::SaveMemoryMode()
+{
+ if(_meshes.size() == 1 && memoryMode)
+ {
+ std::vector<std::shared_ptr<MeshModel>> savedMesh;
+ savedMesh.push_back(std::make_shared<MeshModel>(_meshes.at(0).get()));
+ history->Save(new ManagerState(savedMesh, meshId, 0, referencePoint, referenceNormal));
+ }
+ else{
+ printf("PG MeshManagerModel::SaveMemoryMode WARNING Mesh vector has invalid size or memoryMode is not set \n");
+ }
+}
+
+void MeshManagerModel::RestoreState(ManagerState* state)
+{
+ if(state != NULL)
+ {
+ _meshes = state->GetMeshes();
+ meshId = state->GetMeshId();
+ currentMesh = state->GetModifiedPos();
+ lastModified = state->GetModifiedPos();
+ delete state;
+ }
+ else{
+ printf("PG MeshManagerModel::RestoreState WARNING State is NULL \n");
+ }
+}
+
+void MeshManagerModel::RestoreStateMemoryMode(ManagerState* state){
+ if(_meshes.size() == 1 && state != NULL)
+ {
+ vtkPoints* statePoints = vtkPoints::New();
+ statePoints->DeepCopy(state->GetMeshes().at(0)->GetMeshBase()->GetPoints());
+ _meshes.at(0)->GetMeshBase()->SetPoints(statePoints);
+ _meshes.at(0)->GetMeshBase()->GetPoints()->Modified();
+ _meshes.at(0)->GetMeshBase()->Modified();
+ referencePoint = state->GetReferencePoint();
+ referenceNormal = state->referenceNormal;
+ }else{
+ printf("PG MeshManagerModel::RestoreStateMemoryMode WARNING Mesh vector has invalid size or state is NULL\n");
+ }
+}
+
+//
+//Manager State
+//
+MeshManagerModel::ManagerState::ManagerState(std::vector<std::shared_ptr<MeshModel>> meshesToSave, int meshId, int modifiedPos)
+{
+ savedMeshes = meshesToSave;
+ savedId = meshId;
+ savedModifiedPos = modifiedPos;
+}
+
+MeshManagerModel::ManagerState::ManagerState(std::vector<std::shared_ptr<MeshModel>> meshesToSave, int meshId, int modifiedPos, std::vector<double> refPoint, std::vector<double> refNormal)
+{
+ savedMeshes = meshesToSave;
+ savedId = meshId;
+ savedModifiedPos = modifiedPos;
+ referencePoint = refPoint;
+ referenceNormal = refNormal;
+}
+
+MeshManagerModel::ManagerState::~ManagerState()
+{
+ savedMeshes.clear();
+}
+
+std::vector<std::shared_ptr<MeshModel>>& MeshManagerModel::ManagerState::GetMeshes()
+{
+ return savedMeshes;
+}
+
+int MeshManagerModel::ManagerState::GetMeshId()
+{
+ return savedId;
+}
+int MeshManagerModel::ManagerState::GetModifiedPos()
+{
+ return savedModifiedPos;
+}
+
+std::vector<double>& MeshManagerModel::ManagerState::GetReferencePoint()
+{
+ return referencePoint;
+}