X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FmanualPaint%2Fimage3DDequeUR.cxx;h=c5c4e221a6e15509d9402a538c9c0dc84d4e1c8c;hb=88093b6babcea6732523216d1b884c2f254db655;hp=38b6fa2d9d4a0e4353cbbd664847aecf337079c8;hpb=07c470d8eed4bd0b96f829c7dc9f63cc5d714869;p=creaMaracasVisu.git 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); +}