}
//virtual
-void Image3DDequeUR::addImageToContainer(ImageType* img,
+void Image3DDequeUR::addImageToUndoContainer(ImageType* img,
const RegionS& region) {
//managing memory
- if (this->m_ImgDeque.size() > 0) {
- this->m_ImgDeque.back().removeImageFromMemory();
- this->m_ImgDeque.back().setStatus(false);
+ if (this->m_ImgUndoDeque.size() > 0) {
+ this->m_ImgUndoDeque.back().removeImageFromMemory();
} //fi
- //This is to take actual Date
- time_t rawtime;
- struct tm * timeinfo;
- char buffer[80];
- time(&rawtime);
- timeinfo = localtime(&rawtime);
- strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
- std::string date(buffer);
- //end
- std::string aux(buffer);
- std::string imageName = "img_" + aux;
ImageInfoUR imageInfo;
- imageInfo.setImageName(imageName);
+ imageInfo.setImageName(this->getImageName());
imageInfo.setImage(img);
imageInfo.setRegion(region);
- imageInfo.setStatus(true);
//saving to disk
- std::string fullpath = this->m_globalPath + imageName;
+ std::string fullpath = this->m_globalPath + imageInfo.getImageName()
+ + "_UNDO.MHD";
this->saveImageAsMHD(img, fullpath);
//Adding to deque
- this->m_ImgDeque.push_back(imageInfo);
+ this->m_ImgUndoDeque.push_back(imageInfo);
+ this->m_currentUndoPos = this->m_ImgUndoDeque.size() - 1;
+}
+//virtual
+void Image3DDequeUR::addImageToRedoContainer(ImageType* img,
+ const RegionS& region) {
+ //managing memory
+ if (this->m_ImgRedoDeque.size() > 0) {
+ this->m_ImgRedoDeque.back().removeImageFromMemory();
+ } //fi
+ ImageInfoUR imageInfo;
+ imageInfo.setImageName(this->getImageName());
+ imageInfo.setImage(img);
+ imageInfo.setRegion(region);
+ //saving to disk
+ std::string fullpath = this->m_globalPath + imageInfo.getImageName()
+ + "_REDO.MHD";
+ this->saveImageAsMHD(img, fullpath);
+ //Adding to deque
+ this->m_ImgRedoDeque.push_back(imageInfo);
+}
+//virtual
+void Image3DDequeUR::loadUndoImageToPMemory(const unsigned int& index) {
+ creaImageIO::ImageReader reader;
+ std::string fullPath = this->m_globalPath
+ + this->m_ImgUndoDeque[index].getImageName();
+ this->m_ImgUndoDeque[index].setImage(reader.ReadImage(fullPath));
+}
+//virtual
+void Image3DDequeUR::removeUndoImageFromPMemory(const unsigned int& index) {
+ this->m_ImgUndoDeque[index].removeImageFromMemory();
}
//virtual
-void Image3DDequeUR::loadImageToPMemory(const unsigned int& index) {
+void Image3DDequeUR::loadRedoImageToPMemory(const unsigned int& index) {
creaImageIO::ImageReader reader;
std::string fullPath = this->m_globalPath
- + this->m_ImgDeque[index].getImageName();
- this->m_ImgDeque[index].setImage(reader.ReadImage(fullPath));
+ + this->m_ImgRedoDeque[index].getImageName();
+ this->m_ImgRedoDeque[index].setImage(reader.ReadImage(fullPath));
}
//virtual
-void Image3DDequeUR::removeImageFromPMemory(const unsigned int& index) {
- this->m_ImgDeque[index].removeImageFromMemory();
+void Image3DDequeUR::removeRedoImageFromPMemory(const unsigned int& index) {
+ this->m_ImgRedoDeque[index].removeImageFromMemory();
}
//virtual
void Image3DDequeUR::saveImageAsMHD(ImageType* img,
w->Delete();
}
-//ATENCIIIOOOON TIENE QUE HACER POP PARA PONER EL REDO
//virtual
ImageInfoUR Image3DDequeUR::undo() {
- if (this->m_currentUndoPos == -1) {
- ImageInfoUR retAux;
- return (retAux);
+ ImageInfoUR imgRet;
+ if (this->m_currentUndoPos < (this->m_ImgUndoDeque.size() + 1)) {
+ this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].removeImageFromMemory();
+ } //fi
+ if (this->m_currentUndoPos != -1) {
+ //removing from memory
+ if ((this->m_currentUndoPos + 1) < this->m_ImgUndoDeque.size()) {
+ this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos + 1)].removeImageFromMemory();
+ } //fi
+ ImageInfoUR imgRet =
+ this->m_ImgUndoDeque[(unsigned int) m_currentUndoPos];
+ this->m_currentUndoPos--;
+ //adding to memory
+ if (this->m_currentUndoPos != -1) {
+ this->loadUndoImageToPMemory((unsigned int) m_currentUndoPos);
+ } //fi
} //fi
- ImageInfoUR imgRet = m_ImgDeque[(unsigned int) m_currentUndoPos];
- this->m_currentUndoPos--;
return (imgRet);
}
//virtual
ImageInfoUR Image3DDequeUR::redo() {
- if (this->m_currentUndoPos != (this->m_ImgDeque.size() - 1)) {
+ ImageInfoUR imgRet;
+ if (this->m_currentUndoPos >= (this->m_ImgRedoDeque.size() - 1)
+ && (this->m_ImgRedoDeque.size() > 0)) {
+ this->m_ImgUndoDeque[(unsigned int) (m_currentUndoPos)].removeImageFromMemory();
this->m_currentUndoPos++;
- return (m_ImgDeque[(unsigned int) m_currentUndoPos]);
+ this->loadUndoImageToPMemory((unsigned int) m_currentUndoPos);
+ imgRet = this->m_ImgRedoDeque.back();
+ this->m_ImgRedoDeque.pop_back();
+ if (this->m_ImgRedoDeque.size() > 0) {
+ loadRedoImageToPMemory(
+ (unsigned int) (this->m_ImgRedoDeque.size() - 1));
+ } //fi
} //fi
- ImageInfoUR retAux;
- return (retAux);
+ return (imgRet);
+}
+
+void Image3DDequeUR::cleanContainers() {
+ for (unsigned int i = 0; i < this->m_ImgUndoDeque.size(); i++) {
+ this->m_ImgUndoDeque[i].removeImageFromMemory();
+ } //rof
+ for (unsigned int i = 0; i < this->m_ImgRedoDeque.size(); i++) {
+ this->m_ImgRedoDeque[i].removeImageFromMemory();
+ } //rof
+ this->m_ImgRedoDeque.clear();
+ this->m_ImgUndoDeque.clear();
}
+
void Image3DDequeUR::setGlobalPath(const std::string& globalPath) {
this->m_globalPath = globalPath;
}
-void Image3DDequeUR::removeFirstImageFromContainer() {
- this->m_ImgDeque.pop_front();
-}
-void Image3DDequeUR::removeLastImageFromContainer() {
- this->m_ImgDeque.pop_back();
-}
-void Image3DDequeUR::cleanContainer() {
- this->m_ImgDeque.clear();
-}
-void Image3DDequeUR::cleanContainerFromIndex(const unsigned int& index) {
- for (unsigned int i = this->m_ImgDeque.size(); i >= index; i--) {
- this->m_ImgDeque.pop_back();
- }
-}
+
std::string Image3DDequeUR::getGlobalPath() {
return (this->m_globalPath);
}
-void Image3DDequeUR::setUndoPointerOnTop() {
- this->m_currentUndoPos = this->m_ImgDeque.size() - 1;
+
+std::string Image3DDequeUR::getImageName() {
+ //Giving a name to an image using the date and time
+ time_t rawtime;
+ struct tm * timeinfo;
+ char buffer[80];
+ time(&rawtime);
+ timeinfo = localtime(&rawtime);
+ strftime(buffer, 80, "%a_%d_%b_%y_%H_%M_S", timeinfo);
+ std::string date(buffer);
+ std::string aux(buffer);
+ std::string imageName = "img_" + aux;
+ return (imageName);
}