X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FimageUndoRedo%2Fimage3DDequeUR.cxx;h=10de209d1616c468e91738390a0487b77ddf5683;hb=d0338585b83d4b0422ad465dedd0f885b3441600;hp=2f6cdb73ddc9e8f71f0f0c551741874d6b84b42f;hpb=5803fbdbe835916b1f5c9d9f730bae967f9e22b4;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx index 2f6cdb7..10de209 100755 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/image3DDequeUR.cxx @@ -1,7 +1,9 @@ #include "image3DDequeUR.h" +#include +#include Image3DDequeUR::Image3DDequeUR() { - this->m_GlobalPath = "/tmp/"; + this->m_GlobalPath = "/home/caceres/temporal/"; this->m_CurrentUndoPos = -1; this->m_CurrentRedoPos = -1; } @@ -14,20 +16,22 @@ void Image3DDequeUR::AddImageToUndoContainer(ImageType* img, const RegionS& region) { //managing memory if (this->m_ImgUndoDeque.size() > 0) { - this->m_ImgUndoDeque.back().RemoveImageFromMemory(this->m_GlobalPath); + this->m_ImgUndoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath); } //fi //Adding image - ImageInfoUR imageInfo; - imageInfo.SetImageName(this->GetImageName()); - imageInfo.SetImage(img); - imageInfo.SetRegion(region); - imageInfo.SaveImageAsMHD(this->m_GlobalPath); + ImageInfoUR* imageInfo = new ImageInfoUR(); + imageInfo->SetImageName( + this->GetImageName(this->m_ImgUndoDeque.size(), true)); + imageInfo->SetImage(img); + imageInfo->SetRegion(region); + imageInfo->SaveImageAsMHD(this->m_GlobalPath); //cleaning deque from current position - this->CleanUndoContainerFromIndex(this->m_CurrentUndoPos); + this->CleanUndoContainerFromIndex(this->m_CurrentUndoPos + 1); this->CleanRedoContainerFromIndex(0); this->m_ImgRedoDeque.clear(); //Adding to deque this->m_ImgUndoDeque.push_back(imageInfo); + std::cout<<"Parceeeeeeeee: aaa " << this->m_ImgUndoDeque.size()<m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1; } //virtual @@ -35,72 +39,71 @@ void Image3DDequeUR::AddImageToRedoContainer(ImageType* img, const RegionS& region) { //managing memory if (this->m_ImgRedoDeque.size() > 0) { - this->m_ImgRedoDeque.back().RemoveImageFromMemory(this->m_GlobalPath); + this->m_ImgRedoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath); } //fi //adding image - ImageInfoUR imageInfo; - imageInfo.SetImageName(this->GetImageName()); - imageInfo.SetImage(img); - imageInfo.SetRegion(region); - imageInfo.SaveImageAsMHD(this->m_GlobalPath); + ImageInfoUR* imageInfo = new ImageInfoUR(); + imageInfo->SetImageName( + this->GetImageName(this->m_ImgRedoDeque.size(), false)); + imageInfo->SetImage(img); + imageInfo->SetRegion(region); + imageInfo->SaveImageAsMHD(this->m_GlobalPath); //Adding to deque this->m_ImgRedoDeque.push_back(imageInfo); this->m_CurrentUndoPos = this->m_ImgRedoDeque.size() - 1; } //virtual -void Image3DDequeUR::CleanUndoContainerFromIndex(const unsigned int& index) { - for (int i = this->m_ImgUndoDeque.size() - 1; i > this->m_CurrentUndoPos; - i--) { - this->m_ImgUndoDeque[i].RemoveImageFromMemory(this->m_GlobalPath); - this->m_ImgUndoDeque[i].RemoveImageFromDisk(this->m_GlobalPath); +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 unsigned int& index) { - for (int i = this->m_ImgRedoDeque.size() - 1; i > this->m_CurrentRedoPos; - i--) { - this->m_ImgRedoDeque[i].RemoveImageFromMemory(this->m_GlobalPath); - this->m_ImgRedoDeque[i].RemoveImageFromDisk(this->m_GlobalPath); +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 -ImageInfoUR Image3DDequeUR::Undo() { - ImageInfoUR imgRet; +ImageInfoUR* Image3DDequeUR::Undo() { + ImageInfoUR* imgRet = new ImageInfoUR(); if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) { //removing from memory if ((this->m_CurrentUndoPos + 1) < this->m_ImgUndoDeque.size()) { - this->m_ImgUndoDeque[(m_CurrentUndoPos + 1)].RemoveImageFromMemory( + this->m_ImgUndoDeque[(m_CurrentUndoPos + 1)]->RemoveImageFromMemory( this->m_GlobalPath); } //fi - ImageInfoUR imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos]; + imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos]; this->m_CurrentUndoPos--; //adding to memory if (this->m_CurrentUndoPos != -1) { //Loading image std::string fullPath = this->m_GlobalPath - + this->m_ImgUndoDeque[m_CurrentUndoPos].GetImageName(); - this->m_ImgUndoDeque[m_CurrentUndoPos].LoadImageMHDToMemory( + + this->m_ImgUndoDeque[m_CurrentUndoPos]->GetImageName(); + this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory( this->m_GlobalPath); } //fi } //fi return (imgRet); } //virtual -ImageInfoUR Image3DDequeUR::Redo() { +ImageInfoUR* Image3DDequeUR::Redo() { - ImageInfoUR imgRet; + ImageInfoUR* imgRet = new ImageInfoUR(); //managing undo deque if (this->m_ImgUndoDeque.size() > 0) { if ((m_CurrentUndoPos - 1) != -1) { - this->m_ImgUndoDeque[m_CurrentUndoPos - 1].RemoveImageFromMemory( + this->m_ImgUndoDeque[m_CurrentUndoPos - 1]->RemoveImageFromMemory( this->m_GlobalPath); } //fi this->m_CurrentUndoPos++; //ready to do undo if (this->m_CurrentUndoPos < ((int) this->m_ImgUndoDeque.size())) { - this->m_ImgUndoDeque[m_CurrentUndoPos].LoadImageMHDToMemory( + this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory( this->m_GlobalPath); } //fi //end of undo management @@ -108,13 +111,13 @@ ImageInfoUR Image3DDequeUR::Redo() { //managing redo if ((this->m_ImgRedoDeque.size() > 0) && (this->m_CurrentRedoPos != -1)) { if ((this->m_CurrentRedoPos + 1) < this->m_ImgRedoDeque.size()) { - this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)].RemoveImageFromMemory( + this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)]->RemoveImageFromMemory( this->m_GlobalPath); } //fi imgRet = this->m_ImgRedoDeque[this->m_CurrentRedoPos]; this->m_CurrentRedoPos--; if (this->m_CurrentRedoPos != -1) { - this->m_ImgRedoDeque[m_CurrentRedoPos].LoadImageMHDToMemory( + this->m_ImgRedoDeque[m_CurrentRedoPos]->LoadImageMHDToMemory( this->m_GlobalPath); } //fi //end of redo management @@ -124,12 +127,12 @@ ImageInfoUR Image3DDequeUR::Redo() { //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); + 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); + 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(); @@ -143,16 +146,30 @@ std::string Image3DDequeUR::GetGlobalPath() { return (this->m_GlobalPath); } -std::string Image3DDequeUR::GetImageName() { +std::string Image3DDequeUR::GetImageName(const int & pos, const bool& undo) { //Giving a name to an image using the date and time - 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); - std::string aux(buffer); - std::string imageName = "img_" + aux; + 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); + std::string date(buffer); + std::string aux(buffer); + this->m_IDImages = "img_" + aux; + } + std::stringstream ss; //create a stringstream + ss << pos; //add number to the stream + std::string imgType; + if (undo) { + imgType = "undo"; + } + else + { + imgType = "redo"; + } + std::string imageName = this->m_IDImages + imgType + ss.str(); + imageName.append(".mhd"); return (imageName); }