]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx
DFCH: ManualPaint + imageUndoRedo -> 50% tested. (Save Images undo and redo) :) :)
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / imageUndoRedo / image3DDequeUR.cxx
index 2f6cdb73ddc9e8f71f0f0c551741874d6b84b42f..10de209d1616c468e91738390a0487b77ddf5683 100755 (executable)
@@ -1,7 +1,9 @@
 #include "image3DDequeUR.h"
+#include <iostream>
+#include <sstream>
 
 Image3DDequeUR::Image3DDequeUR() {
-       this->m_GlobalPath = "/tmp/";
+       this->m_GlobalPath = "/home/caceres/temporal/";
        this->m_CurrentUndoPos = -1;
        this->m_CurrentRedoPos = -1;
 }
@@ -14,20 +16,22 @@ void Image3DDequeUR::AddImageToUndoContainer(ImageType* img,
                const RegionS& region) {
        //managing memory
        if (this->m_ImgUndoDeque.size() > 0) {
-               this->m_ImgUndoDeque.back().RemoveImageFromMemory(this->m_GlobalPath);
+               this->m_ImgUndoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath);
        } //fi
          //Adding image
-       ImageInfoUR imageInfo;
-       imageInfo.SetImageName(this->GetImageName());
-       imageInfo.SetImage(img);
-       imageInfo.SetRegion(region);
-       imageInfo.SaveImageAsMHD(this->m_GlobalPath);
+       ImageInfoUR* imageInfo = new ImageInfoUR();
+       imageInfo->SetImageName(
+                       this->GetImageName(this->m_ImgUndoDeque.size(), true));
+       imageInfo->SetImage(img);
+       imageInfo->SetRegion(region);
+       imageInfo->SaveImageAsMHD(this->m_GlobalPath);
        //cleaning deque from current position
-       this->CleanUndoContainerFromIndex(this->m_CurrentUndoPos);
+       this->CleanUndoContainerFromIndex(this->m_CurrentUndoPos + 1);
        this->CleanRedoContainerFromIndex(0);
        this->m_ImgRedoDeque.clear();
        //Adding to deque
        this->m_ImgUndoDeque.push_back(imageInfo);
+       std::cout<<"Parceeeeeeeee: aaa " << this->m_ImgUndoDeque.size()<<std::endl;
        this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
 }
 //virtual
@@ -35,72 +39,71 @@ void Image3DDequeUR::AddImageToRedoContainer(ImageType* img,
                const RegionS& region) {
        //managing memory
        if (this->m_ImgRedoDeque.size() > 0) {
-               this->m_ImgRedoDeque.back().RemoveImageFromMemory(this->m_GlobalPath);
+               this->m_ImgRedoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath);
        } //fi
          //adding image
-       ImageInfoUR imageInfo;
-       imageInfo.SetImageName(this->GetImageName());
-       imageInfo.SetImage(img);
-       imageInfo.SetRegion(region);
-       imageInfo.SaveImageAsMHD(this->m_GlobalPath);
+       ImageInfoUR* imageInfo = new ImageInfoUR();
+       imageInfo->SetImageName(
+                       this->GetImageName(this->m_ImgRedoDeque.size(), false));
+       imageInfo->SetImage(img);
+       imageInfo->SetRegion(region);
+       imageInfo->SaveImageAsMHD(this->m_GlobalPath);
        //Adding to deque
        this->m_ImgRedoDeque.push_back(imageInfo);
        this->m_CurrentUndoPos = this->m_ImgRedoDeque.size() - 1;
 }
 //virtual
-void Image3DDequeUR::CleanUndoContainerFromIndex(const unsigned int& index) {
-       for (int i = this->m_ImgUndoDeque.size() - 1; i > this->m_CurrentUndoPos;
-                       i--) {
-               this->m_ImgUndoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
-               this->m_ImgUndoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
+void Image3DDequeUR::CleanUndoContainerFromIndex(const int& index) {
+       for (int i = index; i < this->m_ImgUndoDeque.size(); i++) {
+               this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
+               this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
                this->m_ImgUndoDeque.pop_back();
        }
 }
 //virtual
-void Image3DDequeUR::CleanRedoContainerFromIndex(const unsigned int& index) {
-       for (int i = this->m_ImgRedoDeque.size() - 1; i > this->m_CurrentRedoPos;
-                       i--) {
-               this->m_ImgRedoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
-               this->m_ImgRedoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
+void Image3DDequeUR::CleanRedoContainerFromIndex(const int& index) {
+       for (int i = index; i < this->m_ImgRedoDeque.size(); i++) {
+               this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
+               this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
                this->m_ImgRedoDeque.pop_back();
        }
 }
 
 //virtual
-ImageInfoUR Image3DDequeUR::Undo() {
-       ImageInfoUR imgRet;
+ImageInfoUR* Image3DDequeUR::Undo() {
+       ImageInfoUR* imgRet = new ImageInfoUR();
        if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) {
                //removing from memory
                if ((this->m_CurrentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
-                       this->m_ImgUndoDeque[(m_CurrentUndoPos + 1)].RemoveImageFromMemory(
+                       this->m_ImgUndoDeque[(m_CurrentUndoPos + 1)]->RemoveImageFromMemory(
                                        this->m_GlobalPath);
                } //fi
-               ImageInfoUR imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos];
+               imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos];
                this->m_CurrentUndoPos--;
                //adding to memory
                if (this->m_CurrentUndoPos != -1) {
                        //Loading image
                        std::string fullPath = this->m_GlobalPath
-                                       + this->m_ImgUndoDeque[m_CurrentUndoPos].GetImageName();
-                       this->m_ImgUndoDeque[m_CurrentUndoPos].LoadImageMHDToMemory(
+                                       + this->m_ImgUndoDeque[m_CurrentUndoPos]->GetImageName();
+                       this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory(
                                        this->m_GlobalPath);
                } //fi
        } //fi
        return (imgRet);
 }
 //virtual
-ImageInfoUR Image3DDequeUR::Redo() {
+ImageInfoUR* Image3DDequeUR::Redo() {
 
-       ImageInfoUR imgRet;
+       ImageInfoUR* imgRet = new ImageInfoUR();
        //managing undo deque
        if (this->m_ImgUndoDeque.size() > 0) {
                if ((m_CurrentUndoPos - 1) != -1) {
-                       this->m_ImgUndoDeque[m_CurrentUndoPos - 1].RemoveImageFromMemory(
+                       this->m_ImgUndoDeque[m_CurrentUndoPos - 1]->RemoveImageFromMemory(
                                        this->m_GlobalPath);
                } //fi
                this->m_CurrentUndoPos++; //ready to do undo
                if (this->m_CurrentUndoPos < ((int) this->m_ImgUndoDeque.size())) {
-                       this->m_ImgUndoDeque[m_CurrentUndoPos].LoadImageMHDToMemory(
+                       this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory(
                                        this->m_GlobalPath);
                } //fi
                  //end of undo management
@@ -108,13 +111,13 @@ ImageInfoUR Image3DDequeUR::Redo() {
          //managing redo
        if ((this->m_ImgRedoDeque.size() > 0) && (this->m_CurrentRedoPos != -1)) {
                if ((this->m_CurrentRedoPos + 1) < this->m_ImgRedoDeque.size()) {
-                       this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)].RemoveImageFromMemory(
+                       this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)]->RemoveImageFromMemory(
                                        this->m_GlobalPath);
                } //fi
                imgRet = this->m_ImgRedoDeque[this->m_CurrentRedoPos];
                this->m_CurrentRedoPos--;
                if (this->m_CurrentRedoPos != -1) {
-                       this->m_ImgRedoDeque[m_CurrentRedoPos].LoadImageMHDToMemory(
+                       this->m_ImgRedoDeque[m_CurrentRedoPos]->LoadImageMHDToMemory(
                                        this->m_GlobalPath);
                } //fi
                  //end of redo management
@@ -124,12 +127,12 @@ ImageInfoUR Image3DDequeUR::Redo() {
 //virtual
 void Image3DDequeUR::CleanContainers() {
        for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
-               this->m_ImgUndoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
-               this->m_ImgUndoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
+               this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
+               this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
        } //rof
        for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
-               this->m_ImgRedoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
-               this->m_ImgRedoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
+               this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
+               this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
        } //rof
        this->m_ImgRedoDeque.clear();
        this->m_ImgUndoDeque.clear();
@@ -143,16 +146,30 @@ std::string Image3DDequeUR::GetGlobalPath() {
        return (this->m_GlobalPath);
 }
 
-std::string Image3DDequeUR::GetImageName() {
+std::string Image3DDequeUR::GetImageName(const int & pos, const bool& undo) {
 //Giving a name to an image using the date and time
-       time_t rawtime;
-       struct tm * timeinfo;
-       char buffer[80];
-       time(&rawtime);
-       timeinfo = localtime(&rawtime);
-       strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
-       std::string date(buffer);
-       std::string aux(buffer);
-       std::string imageName = "img_" + aux;
+       if (this->m_IDImages.empty()) {
+               time_t rawtime;
+               struct tm * timeinfo;
+               char buffer[80];
+               time(&rawtime);
+               timeinfo = localtime(&rawtime);
+               strftime(buffer, 80, "%H%M%S_%a_%d_%b_%y_", timeinfo);
+               std::string date(buffer);
+               std::string aux(buffer);
+               this->m_IDImages = "img_" + aux;
+       }
+       std::stringstream ss; //create a stringstream
+       ss << pos; //add number to the stream
+       std::string imgType;
+       if (undo) {
+               imgType = "undo";
+       }
+       else
+       {
+               imgType = "redo";
+       }
+       std::string imageName = this->m_IDImages + imgType + ss.str();
+       imageName.append(".mhd");
        return (imageName);
 }