2 * @file image3DDequeUR.cxx
3 * @brief This file contains the implementation of the Image3DDequeUR class.
5 * @author Diego CACERES (diego.caceres[AT]creatis.insa-lyon.fr)
9 #include "image3DDequeUR.h"
13 // ----------------------------------------------------------------------------------
14 Image3DDequeUR::Image3DDequeUR() {
15 this->m_GlobalPath = "/home/caceres/temporal/";
16 this->m_CurrentURPos = -1;
18 // ----------------------------------------------------------------------------------
20 Image3DDequeUR::~Image3DDequeUR() {
21 this->CleanHardDisk();
23 // ----------------------------------------------------------------------------------
25 void Image3DDequeUR::AddImagesToURContainer(VTKImageDataPointerType imgUndo,
26 VTKImageDataPointerType imgRedo, ImageMManager* imMManager) {
27 this->CleanURContainerFromIndex(this->m_CurrentURPos + 1);
29 ImageInfoUR* imageInfo = new ImageInfoUR();
30 imageInfo->SetImageName(this->GetImageName(this->m_ImgURDeque.size()));
31 imageInfo->SetImages(imgUndo, imgRedo);
32 imageInfo->SetImageMManager(imMManager);
34 this->m_ImgURDeque.push_back(imageInfo);
35 this->m_CurrentURPos = this->m_ImgURDeque.size() - 1;
39 // ----------------------------------------------------------------------------------
41 ImageInfoUR* Image3DDequeUR::Undo() {
42 ImageInfoUR* imgRet = NULL;
43 int imgURDequeSize = this->m_ImgURDeque.size();
44 if ((this->m_ImgURDeque.size() > 0) && (this->m_CurrentURPos != -1)
45 && (this->m_CurrentURPos < imgURDequeSize)) {
46 imgRet = this->m_ImgURDeque[m_CurrentURPos];
47 this->m_CurrentURPos--;
51 // ----------------------------------------------------------------------------------
53 ImageInfoUR* Image3DDequeUR::Redo() {
54 ImageInfoUR* imgRet = NULL;
55 this->m_CurrentURPos++;
56 int imgURDequeSize = this->m_ImgURDeque.size();
57 if ((this->m_ImgURDeque.size() > 0) && (this->m_CurrentURPos != -1)
58 && (this->m_CurrentURPos < imgURDequeSize)) {
59 imgRet = this->m_ImgURDeque[m_CurrentURPos];
62 this->m_CurrentURPos--;
66 // ----------------------------------------------------------------------------------
68 void Image3DDequeUR::CleanURContainerFromIndex(const int& index) {
70 for (unsigned int i = index; i < this->m_ImgURDeque.size(); i++) {
71 this->m_ImgURDeque[i]->RemoveImagesFromMemory(this->m_GlobalPath);
72 this->m_ImgURDeque[i]->RemoveImagesFromDisk(this->m_GlobalPath);
75 for (int i = 0; i < count; i++) {
76 this->m_ImgURDeque.pop_back();
79 // ----------------------------------------------------------------------------------
81 void Image3DDequeUR::ManageMemory() {
82 int imgURDequeSize = this->m_ImgURDeque.size();
83 for (int i = 0; i < imgURDequeSize; i++) {
84 if (this->m_ImgURDeque[i]->GetStatus()) {
85 this->m_ImgURDeque[i]->RemoveImagesFromMemory(this->m_GlobalPath);
88 //Adding CurrentUndoPos to memory
89 if ((this->m_CurrentURPos != -1)
90 && !(this->m_ImgURDeque[this->m_CurrentURPos]->GetStatus())) {
91 this->m_ImgURDeque[this->m_CurrentURPos]->LoadImagesToMemory(
94 int currentRedoPos = this->m_CurrentURPos + 1;
95 if ((currentRedoPos < imgURDequeSize)
96 && !(this->m_ImgURDeque[currentRedoPos]->GetStatus())) {
97 this->m_ImgURDeque[currentRedoPos]->LoadImagesToMemory(
101 // ----------------------------------------------------------------------------------
102 void Image3DDequeUR::SetGlobalPath(const StringType& globalPath) {
103 this->m_GlobalPath = globalPath;
105 // ----------------------------------------------------------------------------------
106 void Image3DDequeUR::CleanHardDisk() {
107 for (unsigned int i = 0; i < this->m_ImgURDeque.size(); i++) {
108 this->m_ImgURDeque[i]->RemoveImagesFromDisk(this->m_GlobalPath);
111 // ----------------------------------------------------------------------------------
112 Image3DDequeUR::StringType Image3DDequeUR::GetGlobalPath() {
113 return (this->m_GlobalPath);
115 // ----------------------------------------------------------------------------------
116 Image3DDequeUR::StringType Image3DDequeUR::GetImageName(const int & pos) {
117 //Giving a name to an image using the date and time
118 if (this->m_IDImages.empty()) {
120 struct tm * timeinfo;
123 timeinfo = localtime(&rawtime);
124 strftime(buffer, 80, "%H%M%S_%a_%d_%b_%y_", timeinfo);
125 StringType date(buffer);
126 StringType aux(buffer);
127 this->m_IDImages = "img_" + aux;
129 std::stringstream ss; //create a stringstream
130 ss << pos; //add number to the stream
131 StringType imageName = this->m_IDImages + ss.str();
134 // ----------------------------------------------------------------------------------