1 #include "image3DDequeUR.h"
5 Image3DDequeUR::Image3DDequeUR() {
6 this->m_GlobalPath = "/home/caceres/temporal/";
7 this->m_CurrentUndoPos = -1;
8 this->m_CurrentRedoPos = -1;
11 Image3DDequeUR::~Image3DDequeUR() {
15 void Image3DDequeUR::AddImageToUndoContainer(ImageType* img,
16 const RegionS& region) {
18 if (this->m_ImgUndoDeque.size() > 0) {
19 this->m_ImgUndoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath);
22 ImageInfoUR* imageInfo = new ImageInfoUR();
23 imageInfo->SetImageName(
24 this->GetImageName(this->m_ImgUndoDeque.size(), true));
25 imageInfo->SetImage(img);
26 imageInfo->SetRegion(region);
27 imageInfo->SaveImageAsMHD(this->m_GlobalPath);
28 //cleaning deque from current position
29 this->CleanUndoContainerFromIndex(this->m_CurrentUndoPos + 1);
30 this->CleanRedoContainerFromIndex(0);
31 this->m_ImgRedoDeque.clear();
33 this->m_ImgUndoDeque.push_back(imageInfo);
34 std::cout<<"Parceeeeeeeee: aaa " << this->m_ImgUndoDeque.size()<<std::endl;
35 this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
38 void Image3DDequeUR::AddImageToRedoContainer(ImageType* img,
39 const RegionS& region) {
41 if (this->m_ImgRedoDeque.size() > 0) {
42 this->m_ImgRedoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath);
45 ImageInfoUR* imageInfo = new ImageInfoUR();
46 imageInfo->SetImageName(
47 this->GetImageName(this->m_ImgRedoDeque.size(), false));
48 imageInfo->SetImage(img);
49 imageInfo->SetRegion(region);
50 imageInfo->SaveImageAsMHD(this->m_GlobalPath);
52 this->m_ImgRedoDeque.push_back(imageInfo);
53 this->m_CurrentUndoPos = this->m_ImgRedoDeque.size() - 1;
56 void Image3DDequeUR::CleanUndoContainerFromIndex(const int& index) {
57 for (int i = index; i < this->m_ImgUndoDeque.size(); i++) {
58 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
59 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
60 this->m_ImgUndoDeque.pop_back();
64 void Image3DDequeUR::CleanRedoContainerFromIndex(const int& index) {
65 for (int i = index; i < this->m_ImgRedoDeque.size(); i++) {
66 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
67 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
68 this->m_ImgRedoDeque.pop_back();
73 ImageInfoUR* Image3DDequeUR::Undo() {
74 ImageInfoUR* imgRet = new ImageInfoUR();
75 if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) {
76 //removing from memory
77 if ((this->m_CurrentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
78 this->m_ImgUndoDeque[(m_CurrentUndoPos + 1)]->RemoveImageFromMemory(
81 imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos];
82 this->m_CurrentUndoPos--;
84 if (this->m_CurrentUndoPos != -1) {
86 std::string fullPath = this->m_GlobalPath
87 + this->m_ImgUndoDeque[m_CurrentUndoPos]->GetImageName();
88 this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory(
95 ImageInfoUR* Image3DDequeUR::Redo() {
97 ImageInfoUR* imgRet = new ImageInfoUR();
99 if (this->m_ImgUndoDeque.size() > 0) {
100 if ((m_CurrentUndoPos - 1) != -1) {
101 this->m_ImgUndoDeque[m_CurrentUndoPos - 1]->RemoveImageFromMemory(
104 this->m_CurrentUndoPos++; //ready to do undo
105 if (this->m_CurrentUndoPos < ((int) this->m_ImgUndoDeque.size())) {
106 this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory(
109 //end of undo management
112 if ((this->m_ImgRedoDeque.size() > 0) && (this->m_CurrentRedoPos != -1)) {
113 if ((this->m_CurrentRedoPos + 1) < this->m_ImgRedoDeque.size()) {
114 this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)]->RemoveImageFromMemory(
117 imgRet = this->m_ImgRedoDeque[this->m_CurrentRedoPos];
118 this->m_CurrentRedoPos--;
119 if (this->m_CurrentRedoPos != -1) {
120 this->m_ImgRedoDeque[m_CurrentRedoPos]->LoadImageMHDToMemory(
123 //end of redo management
128 void Image3DDequeUR::CleanContainers() {
129 for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
130 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
131 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
133 for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
134 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
135 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
137 this->m_ImgRedoDeque.clear();
138 this->m_ImgUndoDeque.clear();
141 void Image3DDequeUR::SetGlobalPath(const std::string& globalPath) {
142 this->m_GlobalPath = globalPath;
145 std::string Image3DDequeUR::GetGlobalPath() {
146 return (this->m_GlobalPath);
149 std::string Image3DDequeUR::GetImageName(const int & pos, const bool& undo) {
150 //Giving a name to an image using the date and time
151 if (this->m_IDImages.empty()) {
153 struct tm * timeinfo;
156 timeinfo = localtime(&rawtime);
157 strftime(buffer, 80, "%H%M%S_%a_%d_%b_%y_", timeinfo);
158 std::string date(buffer);
159 std::string aux(buffer);
160 this->m_IDImages = "img_" + aux;
162 std::stringstream ss; //create a stringstream
163 ss << pos; //add number to the stream
172 std::string imageName = this->m_IDImages + imgType + ss.str();
173 imageName.append(".mhd");