/* * 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); } } //virtual void ImageUndoRedo::Redo() { ImageInfoUR* imageInfo = this->m_ImagesDeque->Redo(); this->DrawUR(imageInfo); } void ImageUndoRedo::SetImage(VTKImageDataPointerType image) { this->m_CurrentImage = image; this->m_CurrentImage->Update(); this->m_OriginalImage = VTKImageDataPointerType::New(); this->m_OriginalImage->DeepCopy(m_CurrentImage); } //virtual void ImageUndoRedo::SetUndoImage(const RegionSType& region) { VTKImageDataPointerType imgResult = this->GetImageRegion(region, this->m_OriginalImage); this->m_ImagesDeque->AddImageToUndoContainer(imgResult, region); } //virtual void ImageUndoRedo::SetRedoImage(const RegionSType& region) { VTKImageDataPointerType imgResult = this->GetImageRegion(region, this->m_CurrentImage); this->m_ImagesDeque->AddImageToRedoContainer(imgResult, region); } ImageUndoRedo::VTKImageDataPointerType ImageUndoRedo::GetImageRegion( const RegionSType& region, VTKImageDataPointerType img) { VTKExtractVOIPointerType extract = VTKExtractVOIPointerType::New(); VTKImageDataPointerType imgResult = VTKImageDataPointerType::New(); extract->SetVOI(region.minX, region.maxX, region.minY, region.maxY, region.minZ, region.maxZ); extract->SetSampleRate(1, 1, 1); extract->SetInput(this->m_OriginalImage); imgResult = extract->GetOutput(); return (imgResult); } void ImageUndoRedo::SetOriginalImage(VTKImageDataPointerType img) { this->m_OriginalImage = img; } void ImageUndoRedo::SetCurrentImage(VTKImageDataPointerType img) { this->m_CurrentImage = img; } //virtual void ImageUndoRedo::DrawUR(ImageInfoUR* imageInfo) { VTKImageDataPointerType img = imageInfo->GetImage(); for (int i = imageInfo->GetRegion().minX, x = 0; i <= imageInfo->GetRegion().maxX; i++, x++) { for (int j = imageInfo->GetRegion().minY, y = 0; j <= imageInfo->GetRegion().maxY; j++, y++) { for (int k = imageInfo->GetRegion().minZ, z = 0; k <= imageInfo->GetRegion().maxZ; k++, z++) { float value = img->GetScalarComponentAsFloat(i, j, k, 0); this->m_CurrentImage->SetScalarComponentFromFloat(i, j, k, 0, value); } //rof } //rof } //rof this->m_CurrentImage->Modified(); }