From 88093b6babcea6732523216d1b884c2f254db655 Mon Sep 17 00:00:00 2001 From: Diego Caceres Date: Wed, 28 Sep 2011 09:08:26 +0000 Subject: [PATCH] DFCH: Undo/Redo 65% :) :) Tener cuidado con el manejo de la pila :) --- CMakeLists.txt | 8 ++ .../widgets/manualPaint/image3DDequeUR.cxx | 77 +++++++++++++++++-- .../widgets/manualPaint/image3DDequeUR.h | 13 +++- .../widgets/manualPaint/imageDequeUR.h | 5 +- .../widgets/manualPaint/imageInfoUR.cxx | 10 +-- .../widgets/manualPaint/imageInfoUR.h | 6 +- 6 files changed, 99 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cac057..0f41736 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,14 @@ FIND_PACKAGE(crea REQUIRED) IF (crea_FOUND) INCLUDE(${crea_USE_FILE}) ENDIF(crea_FOUND) + +#================================== +FIND_PACKAGE(creaImageIO REQUIRED) +IF (creaImageIO_FOUND) + INCLUDE(${creaImageIO_USE_FILE}) +ENDIF(creaImageIO_FOUND) +#================================== + CREA_PREVENT_IN_SOURCE_BUILD() #SET(USE_GDCM ON) diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx index 38b6fa2..c5c4e22 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx @@ -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); +} diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.h index f62aaca..db9a223 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.h @@ -9,23 +9,30 @@ #define IMAGE3DDEQUEUR_H_ #include "imageDequeUR.h" +#include +#include "vtkMetaImageWriter.h" +#include "creaImageIOImageReader.h" class Image3DDequeUR : public ImageDequeUR { private: ImageInfoDeque m_ImgDeque; unsigned int m_currentPos; + std::string m_globalPath; public: Image3DDequeUR(); - virtual ~ImageDequeUR(); + virtual ~Image3DDequeUR(); virtual void addImageToContainer(ImageType* img, const RegionS& region); - virtual void loadImageToPMemory(); - virtual void removeImageFromPMemory(); + virtual void loadImageToPMemory( const unsigned int& index ); + virtual void removeImageFromPMemory( const unsigned int& index ); + virtual void saveImageAsMHD( ImageType* img, const std::string& filename ); virtual ImageType* undo(); virtual ImageType* redo(); + void setGlobalPath( const std::string& globalPath ); void removeFirstImageFromContainer(); void removeLastImageFromContainer(); void cleanContainer(); + std::string getGlobalPath( ); private: void cleanContainerFromIndex(const unsigned int& index); }; diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageDequeUR.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageDequeUR.h index 3da0311..a12887e 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageDequeUR.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageDequeUR.h @@ -24,8 +24,9 @@ public: ImageDequeUR(); virtual ~ImageDequeUR(); virtual void addImageToContainer(ImageType* img, const RegionS& region); - virtual void loadImageToPMemory(); - virtual void removeImageFromPMemory(); + virtual void loadImageToPMemory( const unsigned int& index ); + virtual void removeImageFromPMemory( const unsigned int& index ); + virtual void saveImageAsMHD( ImageType* img, const std::string& filename ); virtual ImageType* undo(); virtual ImageType* redo(); private: diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.cxx index 9f0db9c..d91a428 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.cxx @@ -13,7 +13,7 @@ ImageInfoUR::ImageInfoUR() ImageInfoUR::~ImageInfoUR() { - this->deleteImage(); + this->removeImageFromMemory(); } void ImageInfoUR::setImageName(const std::string &imgName) @@ -24,9 +24,9 @@ void ImageInfoUR::setRegion(const RegionStructUR ®ion) { this->m_Region = region; } -void ImageInfoUR::setStatus(bool onDisk) +void ImageInfoUR::setStatus(const bool& onMemory) { - this->m_OnDisk = onDisk; + this->m_OnMemory = onMemory; } void ImageInfoUR::setImage(vtkImageData* img) { @@ -42,9 +42,9 @@ RegionStructUR ImageInfoUR::getRegion() } bool ImageInfoUR::getStatus() { - return( this->m_OnDisk ); + return( this->m_OnMemory ); } -void ImageInfoUR::deleteImage() +void ImageInfoUR::removeImageFromMemory() { this->m_Image->Delete(); } diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.h b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.h index 7a59b54..1cf91f3 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.h +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/imageInfoUR.h @@ -18,18 +18,18 @@ private: vtkImageData* m_Image; std::string m_ImageName; RegionStructUR m_Region; - bool m_OnDisk; + bool m_OnMemory; public: ImageInfoUR(); virtual ~ImageInfoUR(); void setImageName( const std::string &imgName ); void setRegion( const RegionStructUR ®ion ); - void setStatus( bool onDisk ); + void setStatus( const bool& onMemory ); void setImage( vtkImageData* img ); std::string getImageName( ); RegionStructUR getRegion( ); bool getStatus( ); - void deleteImage(); + void removeImageFromMemory(); }; -- 2.45.1