]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx
DFCH: Undo/Redo 65% :) :) Tener cuidado con el manejo de la pila :)
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / image3DDequeUR.cxx
index 38b6fa2d9d4a0e4353cbbd664847aecf337079c8..c5c4e221a6e15509d9402a538c9c0dc84d4e1c8c 100644 (file)
@@ -1,7 +1,8 @@
 #include "image3DDequeUR.h"
 
 Image3DDequeUR::Image3DDequeUR() {
-       this->m_currentPos = 0;
+       this->m_globalPath = "/tmp/";
+       this->m_currentPos = -1;
 }
 //virtual
 Image3DDequeUR::~Image3DDequeUR() {
@@ -10,19 +11,78 @@ Image3DDequeUR::~Image3DDequeUR() {
 //virtual
 void Image3DDequeUR::addImageToContainer(ImageType* img,
                const RegionS& region) {
+       //managing memory
+       if (this->m_ImgDeque.size() > 0) {
+               this->m_ImgDeque.back().removeImageFromMemory();
+               this->m_ImgDeque.back().setStatus(false);
+       } //fi
+         //This is to take actual Date
+       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);
+       //end
+       std::string aux(buffer);
+       std::string imageName = "img_" + aux;
+       ImageInfoUR imageInfo;
+       imageInfo.setImageName(imageName);
+       imageInfo.setImage(img);
+       imageInfo.setRegion(region);
+       imageInfo.setStatus(true);
+       //saving to disk
+       std::string fullpath = this->m_globalPath + imageName;
+       this->saveImageAsMHD(img, fullpath);
+       //Adding to deque
+       this->m_ImgDeque.push_back(imageInfo);
+       this->m_currentPos = this->m_ImgDeque.size() - 1;
+
 }
 //virtual
-void Image3DDequeUR::loadImageToPMemory() {
+void Image3DDequeUR::loadImageToPMemory(const unsigned int& index) {
+       creaImageIO::ImageReader reader;
+       std::string fullPath = this->m_globalPath
+                       + this->m_ImgDeque[index].getImageName();
+       this->m_ImgDeque[index].setImage(reader.ReadImage(fullPath));
 }
 //virtual
-void Image3DDequeUR::removeImageFromPMemory() {
-
+void Image3DDequeUR::removeImageFromPMemory(const unsigned int& index) {
+       this->m_ImgDeque[index].removeImageFromMemory();
 }
+//virtual
+void Image3DDequeUR::saveImageAsMHD(ImageType* img,
+               const std::string& filename) {
+       vtkMetaImageWriter* w = vtkMetaImageWriter::New();
+       w->SetInput(img);
+       w->SetCompression(false);
+       w->SetFileDimensionality(img->GetDataDimension());
+       w->SetFileName(filename.c_str());
+       w->Update();
+       w->Write();
+       w->Delete();
+}
+
+//ATENCIIIOOOON TIENE QUE HACER POP PARA PONER EL REDO
+//virtual
 ImageType* Image3DDequeUR::undo() {
-       return NULL;
+       if (this->m_currentPos == -1) {
+               return NULL;
+       } //fi
+       this->m_currentPos--;
+       return (NULL);
 }
+//virtual
 ImageType* Image3DDequeUR::redo() {
-       return NULL;
+       if (this->m_currentPos ==  ( this->m_ImgDeque.size() - 1 )) {
+               return NULL;
+       } //fi
+       this->m_currentPos++;
+       return (NULL);
+}
+void Image3DDequeUR::setGlobalPath(const std::string& globalPath) {
+       this->m_globalPath = globalPath;
 }
 void Image3DDequeUR::removeFirstImageFromContainer() {
        this->m_ImgDeque.pop_front();
@@ -34,7 +94,10 @@ void Image3DDequeUR::cleanContainer() {
        this->m_ImgDeque.clear();
 }
 void Image3DDequeUR::cleanContainerFromIndex(const unsigned int& index) {
-       for (int i = this->m_ImgDeque.size(); i >= index; i--) {
+       for (unsigned int i = this->m_ImgDeque.size(); i >= index; i--) {
                this->m_ImgDeque.pop_back();
        }
 }
+std::string Image3DDequeUR::getGlobalPath() {
+       return (this->m_globalPath);
+}