]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualPaint/image3DDequeUR.cxx
c5c4e221a6e15509d9402a538c9c0dc84d4e1c8c
[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_currentPos = -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         this->m_currentPos = this->m_ImgDeque.size() - 1;
41
42 }
43 //virtual
44 void Image3DDequeUR::loadImageToPMemory(const unsigned int& index) {
45         creaImageIO::ImageReader reader;
46         std::string fullPath = this->m_globalPath
47                         + this->m_ImgDeque[index].getImageName();
48         this->m_ImgDeque[index].setImage(reader.ReadImage(fullPath));
49 }
50 //virtual
51 void Image3DDequeUR::removeImageFromPMemory(const unsigned int& index) {
52         this->m_ImgDeque[index].removeImageFromMemory();
53 }
54 //virtual
55 void Image3DDequeUR::saveImageAsMHD(ImageType* img,
56                 const std::string& filename) {
57         vtkMetaImageWriter* w = vtkMetaImageWriter::New();
58         w->SetInput(img);
59         w->SetCompression(false);
60         w->SetFileDimensionality(img->GetDataDimension());
61         w->SetFileName(filename.c_str());
62         w->Update();
63         w->Write();
64         w->Delete();
65 }
66
67 //ATENCIIIOOOON TIENE QUE HACER POP PARA PONER EL REDO
68 //virtual
69 ImageType* Image3DDequeUR::undo() {
70         if (this->m_currentPos == -1) {
71                 return NULL;
72         } //fi
73         this->m_currentPos--;
74         return (NULL);
75 }
76 //virtual
77 ImageType* Image3DDequeUR::redo() {
78         if (this->m_currentPos ==  ( this->m_ImgDeque.size() - 1 )) {
79                 return NULL;
80         } //fi
81         this->m_currentPos++;
82         return (NULL);
83 }
84 void Image3DDequeUR::setGlobalPath(const std::string& globalPath) {
85         this->m_globalPath = globalPath;
86 }
87 void Image3DDequeUR::removeFirstImageFromContainer() {
88         this->m_ImgDeque.pop_front();
89 }
90 void Image3DDequeUR::removeLastImageFromContainer() {
91         this->m_ImgDeque.pop_back();
92 }
93 void Image3DDequeUR::cleanContainer() {
94         this->m_ImgDeque.clear();
95 }
96 void Image3DDequeUR::cleanContainerFromIndex(const unsigned int& index) {
97         for (unsigned int i = this->m_ImgDeque.size(); i >= index; i--) {
98                 this->m_ImgDeque.pop_back();
99         }
100 }
101 std::string Image3DDequeUR::getGlobalPath() {
102         return (this->m_globalPath);
103 }