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(VTKImageDataPointerType 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 this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
37 void Image3DDequeUR::AddImageToRedoContainer(VTKImageDataPointerType img,
38 const RegionS& region) {
40 /*if (this->m_ImgRedoDeque.size() > 0) {
41 this->m_ImgRedoDeque.back()->RemoveImageFromMemory(this->m_GlobalPath);
44 ImageInfoUR* imageInfo = new ImageInfoUR();
45 imageInfo->SetImageName(
46 this->GetImageName(this->m_ImgRedoDeque.size(), false));
47 imageInfo->SetImage(img);
48 imageInfo->SetRegion(region);
49 imageInfo->SaveImageAsMHD(this->m_GlobalPath);
51 this->m_ImgRedoDeque.push_back(imageInfo);
52 this->m_CurrentUndoPos = this->m_ImgRedoDeque.size() - 1;*/
55 void Image3DDequeUR::CleanUndoContainerFromIndex(const int& index) {
56 for (int i = index; i < this->m_ImgUndoDeque.size(); i++) {
57 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
58 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
59 this->m_ImgUndoDeque.pop_back();
63 void Image3DDequeUR::CleanRedoContainerFromIndex(const int& index) {
64 for (int i = index; i < this->m_ImgRedoDeque.size(); i++) {
65 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
66 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
67 this->m_ImgRedoDeque.pop_back();
72 ImageInfoUR* Image3DDequeUR::Undo() {
73 ImageInfoUR* imgRet = NULL;
74 if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) {
75 std::cout<<"Controooool"<<std::endl;
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 std::cout << "imageName: " << imgRet->GetImageName() << std::endl;
83 this->m_CurrentUndoPos--;
85 if (this->m_CurrentUndoPos != -1) {
87 StringType fullPath = this->m_GlobalPath
88 + this->m_ImgUndoDeque[m_CurrentUndoPos]->GetImageName();
89 this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory(
96 ImageInfoUR* Image3DDequeUR::Redo() {
98 ImageInfoUR* imgRet = new ImageInfoUR();
100 if (this->m_ImgUndoDeque.size() > 0) {
101 if ((m_CurrentUndoPos - 1) != -1) {
102 this->m_ImgUndoDeque[m_CurrentUndoPos - 1]->RemoveImageFromMemory(
105 this->m_CurrentUndoPos++; //ready to do undo
106 if (this->m_CurrentUndoPos < ((int) this->m_ImgUndoDeque.size())) {
107 this->m_ImgUndoDeque[m_CurrentUndoPos]->LoadImageMHDToMemory(
110 //end of undo management
113 if ((this->m_ImgRedoDeque.size() > 0) && (this->m_CurrentRedoPos != -1)) {
114 if ((this->m_CurrentRedoPos + 1) < this->m_ImgRedoDeque.size()) {
115 this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)]->RemoveImageFromMemory(
118 imgRet = this->m_ImgRedoDeque[this->m_CurrentRedoPos];
119 this->m_CurrentRedoPos--;
120 if (this->m_CurrentRedoPos != -1) {
121 this->m_ImgRedoDeque[m_CurrentRedoPos]->LoadImageMHDToMemory(
124 //end of redo management
129 void Image3DDequeUR::CleanContainers() {
130 for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
131 this->m_ImgUndoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
132 this->m_ImgUndoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
134 for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
135 this->m_ImgRedoDeque[i]->RemoveImageFromMemory(this->m_GlobalPath);
136 this->m_ImgRedoDeque[i]->RemoveImageFromDisk(this->m_GlobalPath);
138 this->m_ImgRedoDeque.clear();
139 this->m_ImgUndoDeque.clear();
142 void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) {
143 this->m_GlobalPath = globalPath;
146 StringType Image3DDequeUR::GetGlobalPath() {
147 return (this->m_GlobalPath);
150 StringType Image3DDequeUR::GetImageName(const int & pos, const bool& undo) {
151 //Giving a name to an image using the date and time
152 if (this->m_IDImages.empty()) {
154 struct tm * timeinfo;
157 timeinfo = localtime(&rawtime);
158 strftime(buffer, 80, "%H%M%S_%a_%d_%b_%y_", timeinfo);
159 StringType date(buffer);
160 StringType aux(buffer);
161 this->m_IDImages = "img_" + aux;
163 std::stringstream ss; //create a stringstream
164 ss << pos; //add number to the stream
171 StringType imageName = this->m_IDImages + imgType + ss.str();
172 imageName.append(".mhd");