1 #include "image3DDequeUR.h"
3 Image3DDequeUR::Image3DDequeUR() {
4 this->m_globalPath = "/tmp/";
5 this->m_currentUndoPos = -1;
8 Image3DDequeUR::~Image3DDequeUR() {
12 void Image3DDequeUR::addImageToUndoContainer(ImageType* img,
13 const RegionS& region) {
15 if (this->m_ImgUndoDeque.size() > 0) {
16 this->m_ImgUndoDeque.back().removeImageFromMemory();
18 ImageInfoUR imageInfo;
19 imageInfo.setImageName(this->getImageName());
20 imageInfo.setImage(img);
21 imageInfo.setRegion(region);
23 std::string fullpath = this->m_globalPath + imageInfo.getImageName()
25 this->saveImageAsMHD(img, fullpath);
27 this->m_ImgUndoDeque.push_back(imageInfo);
28 this->m_currentUndoPos = this->m_ImgUndoDeque.size() - 1;
31 void Image3DDequeUR::addImageToRedoContainer(ImageType* img,
32 const RegionS& region) {
34 if (this->m_ImgRedoDeque.size() > 0) {
35 this->m_ImgRedoDeque.back().removeImageFromMemory();
37 ImageInfoUR imageInfo;
38 imageInfo.setImageName(this->getImageName());
39 imageInfo.setImage(img);
40 imageInfo.setRegion(region);
42 std::string fullpath = this->m_globalPath + imageInfo.getImageName()
44 this->saveImageAsMHD(img, fullpath);
46 this->m_ImgRedoDeque.push_back(imageInfo);
49 void Image3DDequeUR::loadUndoImageToPMemory(const unsigned int& index) {
50 creaImageIO::ImageReader reader;
51 std::string fullPath = this->m_globalPath
52 + this->m_ImgUndoDeque[index].getImageName();
53 this->m_ImgUndoDeque[index].setImage(reader.ReadImage(fullPath));
56 void Image3DDequeUR::removeUndoImageFromPMemory(const unsigned int& index) {
57 this->m_ImgUndoDeque[index].removeImageFromMemory();
60 void Image3DDequeUR::loadRedoImageToPMemory(const unsigned int& index) {
61 creaImageIO::ImageReader reader;
62 std::string fullPath = this->m_globalPath
63 + this->m_ImgRedoDeque[index].getImageName();
64 this->m_ImgRedoDeque[index].setImage(reader.ReadImage(fullPath));
67 void Image3DDequeUR::removeRedoImageFromPMemory(const unsigned int& index) {
68 this->m_ImgRedoDeque[index].removeImageFromMemory();
71 void Image3DDequeUR::saveImageAsMHD(ImageType* img,
72 const std::string& filename) {
73 vtkMetaImageWriter* w = vtkMetaImageWriter::New();
75 w->SetCompression(false);
76 w->SetFileDimensionality(img->GetDataDimension());
77 w->SetFileName(filename.c_str());
84 ImageInfoUR Image3DDequeUR::undo() {
86 if (this->m_currentUndoPos < (this->m_ImgUndoDeque.size() + 1)) {
87 this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].removeImageFromMemory();
89 if (this->m_currentUndoPos != -1) {
90 //removing from memory
91 if ((this->m_currentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
92 this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].removeImageFromMemory();
95 this->m_ImgUndoDeque[(unsigned int) m_currentUndoPos];
96 this->m_currentUndoPos--;
98 if (this->m_currentUndoPos != -1) {
99 this->loadUndoImageToPMemory((unsigned int) m_currentUndoPos);
105 ImageInfoUR Image3DDequeUR::redo() {
107 if (this->m_currentUndoPos >= (this->m_ImgRedoDeque.size() - 1)
108 && (this->m_ImgRedoDeque.size() > 0)) {
109 this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos)].removeImageFromMemory();
110 this->m_currentUndoPos++;
111 this->loadUndoImageToPMemory((unsigned int) m_currentUndoPos);
112 imgRet = this->m_ImgRedoDeque.back();
113 this->m_ImgRedoDeque.pop_back();
114 if (this->m_ImgRedoDeque.size() > 0) {
115 loadRedoImageToPMemory(
116 (unsigned int) (this->m_ImgRedoDeque.size() - 1));
122 void Image3DDequeUR::cleanContainers() {
123 for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
124 this->m_ImgUndoDeque[i].removeImageFromMemory();
126 for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
127 this->m_ImgRedoDeque[i].removeImageFromMemory();
129 this->m_ImgRedoDeque.clear();
130 this->m_ImgUndoDeque.clear();
133 void Image3DDequeUR::setGlobalPath(const std::string& globalPath) {
134 this->m_globalPath = globalPath;
137 std::string Image3DDequeUR::getGlobalPath() {
138 return (this->m_globalPath);
141 std::string Image3DDequeUR::getImageName() {
142 //Giving a name to an image using the date and time
144 struct tm * timeinfo;
147 timeinfo = localtime(&rawtime);
148 strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
149 std::string date(buffer);
150 std::string aux(buffer);
151 std::string imageName = "img_" + aux;