#include "image3DDequeUR.h"
+#include <iostream>
+#include <sstream>
Image3DDequeUR::Image3DDequeUR() {
- this->m_GlobalPath = "/tmp/";
+ this->m_GlobalPath = "/home/caceres/temporal/";
this->m_CurrentUndoPos = -1;
this->m_CurrentRedoPos = -1;
}
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()<<std::endl;
this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
}
//virtual
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
//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
//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();
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);
}