]> Creatis software - creaMaracasVisu.git/blob - lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx
3d53fb596edf48341132f34b4ca7ff5b359c4bef
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / ViewerWidgets / imageplanewidget.cxx
1 #include "imageplanewidget.h"
2
3 #include "vtkSmartPointer.h"
4 #include "vector"
5 #include "vtkImageActor.h"
6 #include "vtkImageAppendComponents.h"
7 #include "vtkRenderWindowInteractor.h"
8
9 using namespace std;
10
11 ImagePlaneWidget::ImagePlaneWidget()
12 {
13     _img = 0;
14     _xwidget = 0;
15     _ywidget = 0;
16     _zwidget = 0;
17     m_Interactor = 0;
18     _imageactorx = 0;
19     _imageactory = 0;
20     _imageactorz = 0;
21 }
22
23 void ImagePlaneWidget::initialize(vtkRenderWindowInteractor* interactor){
24     m_Interactor = interactor;
25     // Plane widget
26     _xwidget = vtkImagePlaneWidget::New( );
27     _ywidget = vtkImagePlaneWidget::New( );
28     _zwidget = vtkImagePlaneWidget::New( );
29
30
31     _xwidget->SetInteractor( interactor );
32     _ywidget->SetInteractor( interactor );
33     _zwidget->SetInteractor( interactor );
34
35 }
36 bool ImagePlaneWidget::showImageActors(bool show){
37     if(show && m_Interactor){
38         if(!_imageactorx){
39             initializeImageActors();
40         }
41         m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorx);
42         m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactory);
43         m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorz);
44         return true;
45     }else if(_imageactorx){
46         m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->RemoveViewProp(_imageactorx);
47         m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->RemoveViewProp(_imageactory);
48         m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->RemoveViewProp(_imageactorz);
49         return true;
50     }
51
52     return false;
53 }
54
55 void ImagePlaneWidget::initializeImageActors(){
56
57     int *w_ext = _img->GetWholeExtent();
58     //cout<<w_ext[0]<<" "<<w_ext[1]<<" "<<w_ext[2]<<" "<<w_ext[3]<<" "<<w_ext[4]<<" "<<w_ext[5]<<" "<<endl;
59     _imageactorx = vtkImageActor::New();
60     _imageactorx->SetInput(_img);
61     xslice =  (w_ext[4] + w_ext[5])/2;
62     _imageactorx->SetDisplayExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], xslice, xslice);
63
64
65     _imageactory = vtkImageActor::New();
66     _imageactory->SetInput(_img);
67     yslice =  (w_ext[2] + w_ext[3])/2;
68     _imageactory->SetDisplayExtent(w_ext[0], w_ext[1], yslice, yslice, w_ext[4], w_ext[5]);
69
70     _imageactorz = vtkImageActor::New();
71     _imageactorz->SetInput(_img);
72     zslice =  (w_ext[0] + w_ext[1])/2;
73     _imageactorz->SetDisplayExtent(zslice, zslice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]);
74
75
76 }
77
78 void ImagePlaneWidget::setImage(vtkImageData* img){
79     _img = img;
80     this->invariant();
81
82     int *dims = _img->GetDimensions( );
83     unsigned int sliceX = dims[0]/2;
84     unsigned int sliceY = dims[1]/2;
85     unsigned int sliceZ = dims[2]/2;
86
87     // Set input X,Y and Z plane
88     _xwidget->Off( );
89     _xwidget->SetInput( _img );
90     _xwidget->SetPlaneOrientationToXAxes( );
91     _xwidget->SetSliceIndex( sliceX );
92     //_xwidget->TextureInterpolateOff();
93     _xwidget->SetResliceInterpolateToLinear();
94     _xwidget->On( );
95     _xwidget->DisplayTextOn();
96
97
98     _ywidget->Off( );
99     _ywidget->SetInput( _img );
100     _ywidget->SetPlaneOrientationToYAxes( );
101     _ywidget->SetSliceIndex( sliceY );
102     //_ywidget->TextureInterpolateOff();
103     _ywidget->SetResliceInterpolateToLinear();
104     _ywidget->DisplayTextOn();
105     _ywidget->On( );
106
107     _zwidget->Off( );
108     _zwidget->SetInput( _img );
109     _zwidget->SetPlaneOrientationToZAxes( );
110     _zwidget->SetSliceIndex( sliceZ );
111     //_zwidget->TextureInterpolateOff();
112     _zwidget->SetResliceInterpolateToLinear();
113     _zwidget->DisplayTextOn();
114     _zwidget->On( );     
115 }
116
117 void ImagePlaneWidget::SetLookupTable(vtkLookupTable *lookuptable){
118     this->invariant();
119     _xwidget->SetLookupTable(lookuptable);
120     _ywidget->SetLookupTable(lookuptable);
121     _zwidget->SetLookupTable(lookuptable);
122 }
123
124 void ImagePlaneWidget::SetColorTable(vtkColorTransferFunction *colortransfer){
125     SetLookupTable((vtkLookupTable*)colortransfer);
126 }
127
128 void ImagePlaneWidget::showPlanes(bool show){
129     this->invariant();
130     if(show){
131         _xwidget->On();
132         _ywidget->On();
133         _zwidget->On();
134     }else{
135         _xwidget->Off();
136         _ywidget->Off();
137         _zwidget->Off();
138     }
139 }
140
141
142 void ImagePlaneWidget::invariant(){
143     if(_img == NULL){
144         throw "Image data is not initialized";
145     }
146     if(!_xwidget ||!_ywidget || !_zwidget){
147         throw "The widgets are not initialized";
148     }
149 }
150
151
152 void ImagePlaneWidget::setSliceXImageActor(int value){
153     int *w_ext = _img->GetWholeExtent();
154     xslice = value;
155     _imageactorx->SetDisplayExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], xslice, xslice);
156     m_Interactor->Render();
157 }
158 void ImagePlaneWidget::setSliceYImageActor(int value){
159     int *w_ext = _img->GetWholeExtent();
160     yslice = value;
161     _imageactory->SetDisplayExtent(w_ext[0], w_ext[1], yslice, yslice, w_ext[4], w_ext[5]);
162     m_Interactor->Render();
163 }
164 void ImagePlaneWidget::setSliceZImageActor(int value){
165     int *w_ext = _img->GetWholeExtent();
166     zslice = value;
167     _imageactorz->SetDisplayExtent(zslice, zslice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]);
168     m_Interactor->Render();
169 }