#include "image3DDequeUR.h" #include #include Image3DDequeUR::Image3DDequeUR() { this->m_GlobalPath = "/home/caceres/temporal/"; this->m_CurrentUndoPos = -1; this->m_CurrentRedoPos = -1; } //virtual Image3DDequeUR::~Image3DDequeUR() { this->CleanHardDisk(); } //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); //Adding to deque this->m_ImgUndoDeque.push_back(imageInfo); this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1; //Managing memory this->ManageMemory(); } //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) { int count = 0; for (unsigned 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); count++; } for (int i = 0; i < count; i++) { this->m_ImgUndoDeque.pop_back(); } //rof } //virtual void Image3DDequeUR::CleanRedoContainerFromIndex(const int& index) { } //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(); } //virtual void Image3DDequeUR::ManageMemory() { for (int i = 0; (unsigned int) i < this->m_ImgUndoDeque.size(); i++) { if (this->m_ImgUndoDeque[i]->GetStatus()) { this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath); } //fi } //rof //Adding CurrentUndoPos to memory if ((this->m_CurrentUndoPos != -1) && !(this->m_ImgUndoDeque[this->m_CurrentUndoPos]->GetStatus())) { this->m_ImgUndoDeque[this->m_CurrentUndoPos]->LoadImageMHDToMemory( this->m_GlobalPath); } //The same for the redo queue } void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) { this->m_GlobalPath = globalPath; } void Image3DDequeUR::CleanHardDisk() { for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) { this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_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); }