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