/* * imageUndoRedo.cxx * * Created on: Sep 26, 2011 * Author: caceres */ #include "imageUndoRedo.h" ImageUndoRedo::ImageUndoRedo() { this->m_ImagesDeque = new IDequeType(); } //virtual ImageUndoRedo::~ImageUndoRedo() { } //virtual void ImageUndoRedo::Undo() { ImageInfoUR* imageInfo = this->m_ImagesDeque->Undo(); if (imageInfo != NULL) { //this->SetRedoImage(imageInfo->GetRegion()); this->DrawUR(imageInfo); this->UpdateUndoImage(); } } //virtual void ImageUndoRedo::Redo() { } void ImageUndoRedo::SetImage(VTKImageDataPointerType image) { this->m_CurrentImage = image; this->m_CurrentImage->Update(); this->UpdateUndoImage(); } //virtual void ImageUndoRedo::SetUndoImage(ImageMManagerType* imMManager) { ImageMManagerType* newImageManager = new ImageMManagerType(imMManager); if (newImageManager->ValidateRegion()) { RegionSType region = newImageManager->GetModifiedRegion(); VTKImageDataPointerType imgResult = this->GetImageRegion(region, this->m_UndoImage); this->m_ImagesDeque->AddImageToUndoContainer(imgResult, newImageManager); this->UpdateUndoImage(); } else { std::cerr << "INVALID REGION" << std::endl; } } //virtual void ImageUndoRedo::SetRedoImage(const ImageMManagerType* imMManager) { /*RegionSType region = imMManager.GetModifiedRegion(); VTKImageDataPointerType imgResult = this->ImageMManagerType(region, this->m_CurrentImage); this->m_ImagesDeque->AddImageToRedoContainer(imgResult, imMManager);*/ } void ImageUndoRedo::UpdateUndoImage() { this->m_CurrentImage->Update(); this->m_UndoImage = VTKImageDataPointerType::New(); this->m_UndoImage->DeepCopy(m_CurrentImage); this->m_UndoImage->Update(); } ImageUndoRedo::VTKImageDataPointerType ImageUndoRedo::GetImageRegion( const RegionSType& region, VTKImageDataPointerType img) { VTKExtractVOIPointerType extract = VTKExtractVOIPointerType::New(); extract->SetVOI(region.minX, region.maxX, region.minY, region.maxY, region.minZ, region.maxZ); extract->SetSampleRate(1, 1, 1); extract->SetInput(this->m_UndoImage); VTKImageDataPointerType imgResult = extract->GetOutput(); imgResult->Update(); return (imgResult); } void ImageUndoRedo::SetCurrentImage(VTKImageDataPointerType img) { this->m_CurrentImage = img; } //virtual void ImageUndoRedo::DrawUR(ImageInfoUR* imageInfo) { VTKImageDataPointerType img = imageInfo->GetImage(); RegionSType region = imageInfo->GetImageMManager()->GetModifiedRegion(); if (img != NULL) { for (int i = region.minX, x = 0; i <= region.maxX; i++, x++) { for (int j = region.minY, y = 0; j <= region.maxY; j++, y++) { for (int k = region.minZ, z = 0; k <= region.maxZ; k++, z++) { float value = img->GetScalarComponentAsFloat(x, y, z, 0); this->m_CurrentImage->SetScalarComponentFromFloat(i, j, k, 0, value); } //rof } //rof } //rof this->m_CurrentImage->Modified(); } this->m_ImagesDeque->ManageMemory(); }