#include "image3DDequeUR.h" #include #include Image3DDequeUR::Image3DDequeUR() { this->m_GlobalPath = "/home/caceres/temporal/"; this->m_CurrentUndoPos = -1; this->m_CurrentRedoPos = -1; } //virtual Image3DDequeUR::~Image3DDequeUR() { } //virtual void Image3DDequeUR::AddImageToUndoContainer(VTKImageDataPointerType img, ImageMManagerType* imMManager) { //Adding image ImageInfoUR* imageInfo = new ImageInfoUR(); imageInfo->SetImageName( this->GetImageName(this->m_ImgUndoDeque.size(), true)); imageInfo->SetImage(img); imageInfo->SetImageMManager(imMManager); ///--------------------------------------------------------------------------------------------------- // Uncoment the following line //imageInfo->SaveImageAsMHD(this->m_GlobalPath); ///------------------------------------------------------------------------------------------------ //Adding to deque this->m_ImgUndoDeque.push_back(imageInfo); this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1; } //virtual ImageInfoUR* Image3DDequeUR::Undo() { ImageInfoUR* imgRet = NULL; if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) { imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos]; this->m_CurrentUndoPos--; } //fi return (imgRet); } //virtual void Image3DDequeUR::AddImageToRedoContainer(VTKImageDataPointerType img, ImageMManagerType* imMManager) { } //virtual ImageInfoUR* Image3DDequeUR::Redo() { ImageInfoUR* imgRet = new ImageInfoUR(); return (imgRet); } //virtual 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 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 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); } //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); } //rof this->m_ImgRedoDeque.clear(); this->m_ImgUndoDeque.clear(); } void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) { this->m_GlobalPath = globalPath; } Image3DDequeUR::StringType Image3DDequeUR::GetGlobalPath() { return (this->m_GlobalPath); } Image3DDequeUR::StringType Image3DDequeUR::GetImageName(const int & pos, const bool& undo) { //Giving a name to an image using the date and time 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); StringType date(buffer); StringType aux(buffer); this->m_IDImages = "img_" + aux; } std::stringstream ss; //create a stringstream ss << pos; //add number to the stream StringType imgType; if (undo) { imgType = "undo"; } else { imgType = "redo"; } StringType imageName = this->m_IDImages + imgType + ss.str(); imageName.append(".mhd"); return (imageName); }