]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx
DFCH: Manual paint changes :)
[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::addImageToContainer(ImageType* img,
13                 const RegionS& region) {
14         //managing memory
15         if (this->m_ImgDeque.size() > 0) {
16                 this->m_ImgDeque.back().removeImageFromMemory();
17                 this->m_ImgDeque.back().setStatus(false);
18         } //fi
19           //This is to take actual Date
20         time_t rawtime;
21         struct tm * timeinfo;
22         char buffer[80];
23         time(&rawtime);
24         timeinfo = localtime(&rawtime);
25         strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
26         std::string date(buffer);
27         //end
28         std::string aux(buffer);
29         std::string imageName = "img_" + aux;
30         ImageInfoUR imageInfo;
31         imageInfo.setImageName(imageName);
32         imageInfo.setImage(img);
33         imageInfo.setRegion(region);
34         imageInfo.setStatus(true);
35         //saving to disk
36         std::string fullpath = this->m_globalPath + imageName;
37         this->saveImageAsMHD(img, fullpath);
38         //Adding to deque
39         this->m_ImgDeque.push_back(imageInfo);
40 }
41 //virtual
42 void Image3DDequeUR::loadImageToPMemory(const unsigned int& index) {
43         creaImageIO::ImageReader reader;
44         std::string fullPath = this->m_globalPath
45                         + this->m_ImgDeque[index].getImageName();
46         this->m_ImgDeque[index].setImage(reader.ReadImage(fullPath));
47 }
48 //virtual
49 void Image3DDequeUR::removeImageFromPMemory(const unsigned int& index) {
50         this->m_ImgDeque[index].removeImageFromMemory();
51 }
52 //virtual
53 void Image3DDequeUR::saveImageAsMHD(ImageType* img,
54                 const std::string& filename) {
55         vtkMetaImageWriter* w = vtkMetaImageWriter::New();
56         w->SetInput(img);
57         w->SetCompression(false);
58         w->SetFileDimensionality(img->GetDataDimension());
59         w->SetFileName(filename.c_str());
60         w->Update();
61         w->Write();
62         w->Delete();
63 }
64
65 //ATENCIIIOOOON TIENE QUE HACER POP PARA PONER EL REDO
66 //virtual
67 ImageInfoUR Image3DDequeUR::undo() {
68         if (this->m_currentUndoPos == -1) {
69                 ImageInfoUR retAux;
70                 return (retAux);
71         } //fi
72         ImageInfoUR imgRet = m_ImgDeque[(unsigned int) m_currentUndoPos];
73         this->m_currentUndoPos--;
74         return (imgRet);
75 }
76 //virtual
77 ImageInfoUR Image3DDequeUR::redo() {
78         if (this->m_currentUndoPos != (this->m_ImgDeque.size() - 1)) {
79                 this->m_currentUndoPos++;
80                 return (m_ImgDeque[(unsigned int) m_currentUndoPos]);
81         } //fi
82         ImageInfoUR retAux;
83         return (retAux);
84 }
85 void Image3DDequeUR::setGlobalPath(const std::string& globalPath) {
86         this->m_globalPath = globalPath;
87 }
88 void Image3DDequeUR::removeFirstImageFromContainer() {
89         this->m_ImgDeque.pop_front();
90 }
91 void Image3DDequeUR::removeLastImageFromContainer() {
92         this->m_ImgDeque.pop_back();
93 }
94 void Image3DDequeUR::cleanContainer() {
95         this->m_ImgDeque.clear();
96 }
97 void Image3DDequeUR::cleanContainerFromIndex(const unsigned int& index) {
98         for (unsigned int i = this->m_ImgDeque.size(); i >= index; i--) {
99                 this->m_ImgDeque.pop_back();
100         }
101 }
102 std::string Image3DDequeUR::getGlobalPath() {
103         return (this->m_globalPath);
104 }
105 void Image3DDequeUR::setUndoPointerOnTop() {
106         this->m_currentUndoPos = this->m_ImgDeque.size() - 1;
107 }