}
//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);
}
class Image3DDequeUR : public ImageDequeUR
{
private:
- ImageInfoDeque m_ImgDeque;
+ ImageInfoDeque m_ImgUndoDeque;
+ ImageInfoDeque m_ImgRedoDeque;
int m_currentUndoPos;
std::string m_globalPath;
public:
Image3DDequeUR();
virtual ~Image3DDequeUR();
- virtual void addImageToContainer(ImageType* img, const RegionS& region);
- virtual void loadImageToPMemory( const unsigned int& index );
- virtual void removeImageFromPMemory( const unsigned int& index );
+ virtual void addImageToUndoContainer(ImageType* img, const RegionS& region);
+ virtual void addImageToRedoContainer(ImageType* img, const RegionS& region);
+ virtual void loadUndoImageToPMemory( const unsigned int& index );
+ virtual void removeUndoImageFromPMemory( const unsigned int& index );
+ virtual void loadRedoImageToPMemory( const unsigned int& index );
+ virtual void removeRedoImageFromPMemory( const unsigned int& index );
virtual void saveImageAsMHD( ImageType* img, const std::string& filename );
- virtual ImageInfoUR undo();
- virtual ImageInfoUR redo();
+ virtual ImageInfoUR undo( );
+ virtual ImageInfoUR redo( );
+ void cleanContainers();
void setGlobalPath( const std::string& globalPath );
- void removeFirstImageFromContainer();
- void removeLastImageFromContainer();
- void cleanContainer();
- void setUndoPointerOnTop();
std::string getGlobalPath( );
-private:
- void cleanContainerFromIndex(const unsigned int& index);
+ std::string getImageName( );
};