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) {
53 void Image3DDequeUR::RemoveUndoImageFromPMemory(const unsigned int& index) {
54 this->m_ImgUndoDeque[index].RemoveImageFromMemory();
57 void Image3DDequeUR::LoadRedoImageToPMemory(const unsigned int& index) {
61 void Image3DDequeUR::RemoveRedoImageFromPMemory(const unsigned int& index) {
62 this->m_ImgRedoDeque[index].RemoveImageFromMemory();
65 void Image3DDequeUR::SaveImageAsMHD(ImageType* img,
66 const std::string& filename) {
67 vtkMetaImageWriter* w = vtkMetaImageWriter::New();
69 w->SetCompression(false);
70 w->SetFileDimensionality(img->GetDataDimension());
71 w->SetFileName(filename.c_str());
78 ImageInfoUR Image3DDequeUR::Undo() {
80 if (this->m_currentUndoPos < (this->m_ImgUndoDeque.size() + 1)) {
81 this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].RemoveImageFromMemory();
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();
89 this->m_ImgUndoDeque[(unsigned int) m_currentUndoPos];
90 this->m_currentUndoPos--;
92 if (this->m_currentUndoPos != -1) {
93 this->LoadUndoImageToPMemory((unsigned int) m_currentUndoPos);
99 ImageInfoUR Image3DDequeUR::Redo() {
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));
116 void Image3DDequeUR::CleanContainers() {
117 for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
118 this->m_ImgUndoDeque[i].RemoveImageFromMemory();
120 for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
121 this->m_ImgRedoDeque[i].RemoveImageFromMemory();
123 this->m_ImgRedoDeque.clear();
124 this->m_ImgUndoDeque.clear();
127 void Image3DDequeUR::SetGlobalPath(const std::string& globalPath) {
128 this->m_globalPath = globalPath;
131 std::string Image3DDequeUR::GetGlobalPath() {
132 return (this->m_globalPath);
135 std::string Image3DDequeUR::GetImageName() {
136 //Giving a name to an image using the date and time
138 struct tm * timeinfo;
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;