1 #include "imageplanewidget.h"
3 #include "vtkSmartPointer.h"
5 #include "vtkImageActor.h"
6 #include "vtkImageAppendComponents.h"
7 #include "vtkRenderWindowInteractor.h"
8 #include "vtkTextProperty.h"
12 ImagePlaneWidget::ImagePlaneWidget()
24 void ImagePlaneWidget::initialize(vtkRenderWindowInteractor* interactor){
25 m_Interactor = interactor;
27 _xwidget = vtkImagePlaneWidget::New( );
28 _ywidget = vtkImagePlaneWidget::New( );
29 _zwidget = vtkImagePlaneWidget::New( );
32 _xwidget->SetInteractor( interactor );
33 _ywidget->SetInteractor( interactor );
34 _zwidget->SetInteractor( interactor );
37 bool ImagePlaneWidget::showImageActors(bool show){
38 if(show && m_Interactor){
40 initializeImageActors();
42 m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorx);
43 m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactory);
44 m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorz);
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);
56 void ImagePlaneWidget::initializeImageActors(){
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);
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]);
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]);
79 void ImagePlaneWidget::setImage(vtkImageData* img){
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;
88 // Set input X,Y and Z plane
90 _xwidget->SetInput( _img );
91 _xwidget->SetPlaneOrientationToXAxes( );
92 _xwidget->SetSliceIndex( sliceX );
93 _xwidget->TextureInterpolateOff();
94 _xwidget->SetResliceInterpolateToLinear();
96 _xwidget->DisplayTextOn();
97 _xwidget->GetTextProperty()->SetColor(0.3, 0.3, 0.3);
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);
110 _zwidget->SetInput( _img );
111 _zwidget->SetPlaneOrientationToZAxes( );
112 _zwidget->SetSliceIndex( sliceZ );
113 _zwidget->TextureInterpolateOff();
114 _zwidget->SetResliceInterpolateToLinear();
115 _zwidget->DisplayTextOn();
117 _zwidget->GetTextProperty()->SetColor(0.3, 0.3, 0.3);
120 void ImagePlaneWidget::SetLookupTable(vtkLookupTable *lookuptable){
122 _xwidget->SetLookupTable(lookuptable);
123 _ywidget->SetLookupTable(lookuptable);
124 _zwidget->SetLookupTable(lookuptable);
127 void ImagePlaneWidget::SetColorTable(vtkColorTransferFunction *colortransfer){
128 SetLookupTable((vtkLookupTable*)colortransfer);
131 void ImagePlaneWidget::showPlanes(bool show){
145 void ImagePlaneWidget::invariant(){
147 throw "Image data is not initialized";
149 if(!_xwidget ||!_ywidget || !_zwidget){
150 throw "The widgets are not initialized";
155 void ImagePlaneWidget::setSliceXImageActor(int value){
156 int *w_ext = _img->GetWholeExtent();
158 _imageactorx->SetDisplayExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], xslice, xslice);
159 m_Interactor->Render();
161 void ImagePlaneWidget::setSliceYImageActor(int value){
162 int *w_ext = _img->GetWholeExtent();
164 _imageactory->SetDisplayExtent(w_ext[0], w_ext[1], yslice, yslice, w_ext[4], w_ext[5]);
165 m_Interactor->Render();
167 void ImagePlaneWidget::setSliceZImageActor(int value){
168 int *w_ext = _img->GetWholeExtent();
170 _imageactorz->SetDisplayExtent(zslice, zslice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]);
171 m_Interactor->Render();