1 #include "image3DDequeUR.h"
3 Image3DDequeUR::Image3DDequeUR() {
4 this->m_GlobalPath = "/tmp/";
5 this->m_CurrentUndoPos = -1;
6 this->m_CurrentRedoPos = -1;
9 Image3DDequeUR::~Image3DDequeUR() {
13 void Image3DDequeUR::AddImageToUndoContainer(ImageType* img,
14 const RegionS& region) {
16 if (this->m_ImgUndoDeque.size() > 0) {
17 this->m_ImgUndoDeque.back().RemoveImageFromMemory(this->m_GlobalPath);
20 ImageInfoUR imageInfo;
21 imageInfo.SetImageName(this->GetImageName());
22 imageInfo.SetImage(img);
23 imageInfo.SetRegion(region);
24 imageInfo.SaveImageAsMHD(this->m_GlobalPath);
25 //cleaning deque from current position
26 this->CleanUndoContainerFromIndex(this->m_CurrentUndoPos);
27 this->CleanRedoContainerFromIndex(0);
28 this->m_ImgRedoDeque.clear();
30 this->m_ImgUndoDeque.push_back(imageInfo);
31 this->m_CurrentUndoPos = this->m_ImgUndoDeque.size() - 1;
34 void Image3DDequeUR::AddImageToRedoContainer(ImageType* img,
35 const RegionS& region) {
37 if (this->m_ImgRedoDeque.size() > 0) {
38 this->m_ImgRedoDeque.back().RemoveImageFromMemory(this->m_GlobalPath);
41 ImageInfoUR imageInfo;
42 imageInfo.SetImageName(this->GetImageName());
43 imageInfo.SetImage(img);
44 imageInfo.SetRegion(region);
45 imageInfo.SaveImageAsMHD(this->m_GlobalPath);
47 this->m_ImgRedoDeque.push_back(imageInfo);
48 this->m_CurrentUndoPos = this->m_ImgRedoDeque.size() - 1;
51 void Image3DDequeUR::CleanUndoContainerFromIndex(const unsigned int& index) {
52 for (int i = this->m_ImgUndoDeque.size() - 1; i > this->m_CurrentUndoPos;
54 this->m_ImgUndoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
55 this->m_ImgUndoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
56 this->m_ImgUndoDeque.pop_back();
60 void Image3DDequeUR::CleanRedoContainerFromIndex(const unsigned int& index) {
61 for (int i = this->m_ImgRedoDeque.size() - 1; i > this->m_CurrentRedoPos;
63 this->m_ImgRedoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
64 this->m_ImgRedoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
65 this->m_ImgRedoDeque.pop_back();
70 ImageInfoUR Image3DDequeUR::Undo() {
72 if ((this->m_ImgUndoDeque.size() > 0) && (this->m_CurrentUndoPos != -1)) {
73 //removing from memory
74 if ((this->m_CurrentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
75 this->m_ImgUndoDeque[(m_CurrentUndoPos + 1)].RemoveImageFromMemory(
78 ImageInfoUR imgRet = this->m_ImgUndoDeque[m_CurrentUndoPos];
79 this->m_CurrentUndoPos--;
81 if (this->m_CurrentUndoPos != -1) {
83 std::string fullPath = this->m_GlobalPath
84 + this->m_ImgUndoDeque[m_CurrentUndoPos].GetImageName();
85 this->m_ImgUndoDeque[m_CurrentUndoPos].LoadImageMHDToMemory(
92 ImageInfoUR Image3DDequeUR::Redo() {
96 if (this->m_ImgUndoDeque.size() > 0) {
97 if ((m_CurrentUndoPos - 1) != -1) {
98 this->m_ImgUndoDeque[m_CurrentUndoPos - 1].RemoveImageFromMemory(
101 this->m_CurrentUndoPos++; //ready to do undo
102 if (this->m_CurrentUndoPos < ((int) this->m_ImgUndoDeque.size())) {
103 this->m_ImgUndoDeque[m_CurrentUndoPos].LoadImageMHDToMemory(
106 //end of undo management
109 if ((this->m_ImgRedoDeque.size() > 0) && (this->m_CurrentRedoPos != -1)) {
110 if ((this->m_CurrentRedoPos + 1) < this->m_ImgRedoDeque.size()) {
111 this->m_ImgRedoDeque[(m_CurrentRedoPos + 1)].RemoveImageFromMemory(
114 imgRet = this->m_ImgRedoDeque[this->m_CurrentRedoPos];
115 this->m_CurrentRedoPos--;
116 if (this->m_CurrentRedoPos != -1) {
117 this->m_ImgRedoDeque[m_CurrentRedoPos].LoadImageMHDToMemory(
120 //end of redo management
125 void Image3DDequeUR::CleanContainers() {
126 for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
127 this->m_ImgUndoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
128 this->m_ImgUndoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
130 for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
131 this->m_ImgRedoDeque[i].RemoveImageFromMemory(this->m_GlobalPath);
132 this->m_ImgRedoDeque[i].RemoveImageFromDisk(this->m_GlobalPath);
134 this->m_ImgRedoDeque.clear();
135 this->m_ImgUndoDeque.clear();
138 void Image3DDequeUR::SetGlobalPath(const std::string& globalPath) {
139 this->m_GlobalPath = globalPath;
142 std::string Image3DDequeUR::GetGlobalPath() {
143 return (this->m_GlobalPath);
146 std::string Image3DDequeUR::GetImageName() {
147 //Giving a name to an image using the date and time
149 struct tm * timeinfo;
152 timeinfo = localtime(&rawtime);
153 strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
154 std::string date(buffer);
155 std::string aux(buffer);
156 std::string imageName = "img_" + aux;