]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/interface/wxWindows/widgets/imageUndoRedo/imageUndoRedo.cxx
2f80bd6594ff3352d3a53f0e57b1eb5c917d7c88
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / imageUndoRedo / imageUndoRedo.cxx
1 /*
2  * imageUndoRedo.cxx
3  *
4  *  Created on: Sep 26, 2011
5  *      Author: caceres
6  */
7
8 #include "imageUndoRedo.h"
9
10 ImageUndoRedo::ImageUndoRedo() {
11         this->m_ImagesDeque = new IDequeType();
12 }
13 //virtual
14 ImageUndoRedo::~ImageUndoRedo() {
15
16 }
17 //virtual
18 void ImageUndoRedo::Undo() {
19         ImageInfoUR* imageInfo = this->m_ImagesDeque->Undo();
20         if (imageInfo != NULL)
21         {
22                 //this->SetRedoImage(imageInfo->GetRegion());
23                 this->DrawUR(imageInfo);
24         }
25 }
26 //virtual
27 void ImageUndoRedo::Redo() {
28         ImageInfoUR* imageInfo = this->m_ImagesDeque->Redo();
29         this->DrawUR(imageInfo);
30 }
31 void ImageUndoRedo::SetImage(VTKImageDataPointerType image) {
32         this->m_CurrentImage = image;
33         this->m_CurrentImage->Update();
34         this->m_OriginalImage = VTKImageDataPointerType::New();
35         this->m_OriginalImage->DeepCopy(m_CurrentImage);
36 }
37 //virtual
38 void ImageUndoRedo::SetUndoImage(ImageMManagerType* imMManager) {
39         ImageMManagerType* newImageManager = new ImageMManagerType(imMManager);
40         RegionSType region = newImageManager->GetModifiedRegion();
41         VTKImageDataPointerType imgResult = this->GetImageRegion(region,
42                         this->m_OriginalImage);
43         this->m_ImagesDeque->AddImageToUndoContainer(imgResult, newImageManager);
44 }
45 //virtual
46 void ImageUndoRedo::SetRedoImage(const ImageMManagerType* imMManager) {
47         /*RegionSType region = imMManager.GetModifiedRegion();
48          VTKImageDataPointerType imgResult = this->ImageMManagerType(region,
49          this->m_CurrentImage);
50          this->m_ImagesDeque->AddImageToRedoContainer(imgResult, imMManager);*/
51 }
52
53 ImageUndoRedo::VTKImageDataPointerType ImageUndoRedo::GetImageRegion(
54                 const RegionSType& region, VTKImageDataPointerType img) {
55         VTKExtractVOIPointerType extract = VTKExtractVOIPointerType::New();
56         extract->SetVOI(region.minX, region.maxX, region.minY, region.maxY,
57                         region.minZ, region.maxZ);
58         extract->SetSampleRate(1, 1, 1);
59         extract->SetInput(this->m_OriginalImage);
60         VTKImageDataPointerType imgResult = extract->GetOutput();
61         imgResult->Update();
62         return (imgResult);
63 }
64
65 void ImageUndoRedo::SetOriginalImage(VTKImageDataPointerType img) {
66         this->m_OriginalImage = img;
67 }
68 void ImageUndoRedo::SetCurrentImage(VTKImageDataPointerType img) {
69         this->m_CurrentImage = img;
70 }
71 //virtual
72 void ImageUndoRedo::DrawUR(ImageInfoUR* imageInfo) {
73         VTKImageDataPointerType img = imageInfo->GetImage();
74         RegionSType region = imageInfo->GetImageMManager()->GetModifiedRegion();
75         ImageMManager::PixelModMap map =
76                         imageInfo->GetImageMManager()->GetModificationMap();
77         std::cout << "Region " << "(" << region.maxX << "," << region.maxY << ","
78                         << region.maxZ << ")" << std::endl;
79         if (img != NULL) {
80                 for (int i = region.minX, x = 0; i <= region.maxX; i++, x++) {
81                         for (int j = region.minY, y = 0; j <= region.maxY; j++, y++) {
82                                 for (int k = region.minZ, z = 0; k <= region.maxZ; k++, z++) {
83                                         if (map[i][j][k]) {
84                                                 float value = img->GetScalarComponentAsFloat(i, j, k,
85                                                                 0);
86                                                 this->m_CurrentImage->SetScalarComponentFromFloat(i, j,
87                                                                 k, 0, value);
88                                         }
89                                 } //rof
90                         } //rof
91                 } //rof
92                 this->m_CurrentImage->Modified();
93         }
94 }
95