]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx
DFCH: Changes in CMakeList (CreaImageIO dependences removed)
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualPaint / image3DDequeUR.cxx
1 #include "image3DDequeUR.h"
2
3 Image3DDequeUR::Image3DDequeUR() {
4         this->m_globalPath = "/tmp/";
5         this->m_currentUndoPos = -1;
6 }
7 //virtual
8 Image3DDequeUR::~Image3DDequeUR() {
9
10 }
11 //virtual
12 void Image3DDequeUR::AddImageToUndoContainer(ImageType* img,
13                 const RegionS& region) {
14         //managing memory
15         if (this->m_ImgUndoDeque.size() > 0) {
16                 this->m_ImgUndoDeque.back().RemoveImageFromMemory();
17         } //fi
18         ImageInfoUR imageInfo;
19         imageInfo.SetImageName(this->GetImageName());
20         imageInfo.SetImage(img);
21         imageInfo.SetRegion(region);
22         //saving to disk
23         std::string fullpath = this->m_globalPath + imageInfo.GetImageName()
24                         + "_UNDO.MHD";
25         this->SaveImageAsMHD(img, fullpath);
26         //Adding to deque
27         this->m_ImgUndoDeque.push_back(imageInfo);
28         this->m_currentUndoPos = this->m_ImgUndoDeque.size() - 1;
29 }
30 //virtual
31 void Image3DDequeUR::AddImageToRedoContainer(ImageType* img,
32                 const RegionS& region) {
33         //managing memory
34         if (this->m_ImgRedoDeque.size() > 0) {
35                 this->m_ImgRedoDeque.back().RemoveImageFromMemory();
36         } //fi
37         ImageInfoUR imageInfo;
38         imageInfo.SetImageName(this->GetImageName());
39         imageInfo.SetImage(img);
40         imageInfo.SetRegion(region);
41         //saving to disk
42         std::string fullpath = this->m_globalPath + imageInfo.GetImageName()
43                         + "_REDO.MHD";
44         this->SaveImageAsMHD(img, fullpath);
45         //Adding to deque
46         this->m_ImgRedoDeque.push_back(imageInfo);
47 }
48 //virtual
49 void Image3DDequeUR::LoadUndoImageToPMemory(const unsigned int& index) {
50
51 }
52 //virtual
53 void Image3DDequeUR::RemoveUndoImageFromPMemory(const unsigned int& index) {
54         this->m_ImgUndoDeque[index].RemoveImageFromMemory();
55 }
56 //virtual
57 void Image3DDequeUR::LoadRedoImageToPMemory(const unsigned int& index) {
58
59 }
60 //virtual
61 void Image3DDequeUR::RemoveRedoImageFromPMemory(const unsigned int& index) {
62         this->m_ImgRedoDeque[index].RemoveImageFromMemory();
63 }
64 //virtual
65 void Image3DDequeUR::SaveImageAsMHD(ImageType* img,
66                 const std::string& filename) {
67         vtkMetaImageWriter* w = vtkMetaImageWriter::New();
68         w->SetInput(img);
69         w->SetCompression(false);
70         w->SetFileDimensionality(img->GetDataDimension());
71         w->SetFileName(filename.c_str());
72         w->Update();
73         w->Write();
74         w->Delete();
75 }
76
77 //virtual
78 ImageInfoUR Image3DDequeUR::Undo() {
79         ImageInfoUR imgRet;
80         if (this->m_currentUndoPos < (this->m_ImgUndoDeque.size() + 1)) {
81                 this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].RemoveImageFromMemory();
82         } //fi
83         if (this->m_currentUndoPos != -1) {
84                 //removing from memory
85                 if ((this->m_currentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
86                         this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].RemoveImageFromMemory();
87                 } //fi
88                 ImageInfoUR imgRet =
89                                 this->m_ImgUndoDeque[(unsigned int) m_currentUndoPos];
90                 this->m_currentUndoPos--;
91                 //adding to memory
92                 if (this->m_currentUndoPos != -1) {
93                         this->LoadUndoImageToPMemory((unsigned int) m_currentUndoPos);
94                 } //fi
95         } //fi
96         return (imgRet);
97 }
98 //virtual
99 ImageInfoUR Image3DDequeUR::Redo() {
100         ImageInfoUR imgRet;
101         if (this->m_currentUndoPos >= (this->m_ImgRedoDeque.size() - 1)
102                         && (this->m_ImgRedoDeque.size() > 0)) {
103                 this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos)].RemoveImageFromMemory();
104                 this->m_currentUndoPos++;
105                 this->LoadUndoImageToPMemory((unsigned int) m_currentUndoPos);
106                 imgRet = this->m_ImgRedoDeque.back();
107                 this->m_ImgRedoDeque.pop_back();
108                 if (this->m_ImgRedoDeque.size() > 0) {
109                         LoadRedoImageToPMemory(
110                                         (unsigned int) (this->m_ImgRedoDeque.size() - 1));
111                 } //fi
112         } //fi
113         return (imgRet);
114 }
115
116 void Image3DDequeUR::CleanContainers() {
117         for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
118                 this->m_ImgUndoDeque[i].RemoveImageFromMemory();
119         } //rof
120         for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
121                 this->m_ImgRedoDeque[i].RemoveImageFromMemory();
122         } //rof
123         this->m_ImgRedoDeque.clear();
124         this->m_ImgUndoDeque.clear();
125 }
126
127 void Image3DDequeUR::SetGlobalPath(const std::string& globalPath) {
128         this->m_globalPath = globalPath;
129 }
130
131 std::string Image3DDequeUR::GetGlobalPath() {
132         return (this->m_globalPath);
133 }
134
135 std::string Image3DDequeUR::GetImageName() {
136         //Giving a name to an image using the date and time
137         time_t rawtime;
138         struct tm * timeinfo;
139         char buffer[80];
140         time(&rawtime);
141         timeinfo = localtime(&rawtime);
142         strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
143         std::string date(buffer);
144         std::string aux(buffer);
145         std::string imageName = "img_" + aux;
146         return (imageName);
147 }