1 #include "imageplanewidget.h"
3 #include "vtkSmartPointer.h"
5 #include "vtkImageActor.h"
6 #include "vtkImageAppendComponents.h"
7 #include "vtkRenderWindowInteractor.h"
11 ImagePlaneWidget::ImagePlaneWidget()
23 void ImagePlaneWidget::initialize(vtkRenderWindowInteractor* interactor){
24 m_Interactor = interactor;
26 _xwidget = vtkImagePlaneWidget::New( );
27 _ywidget = vtkImagePlaneWidget::New( );
28 _zwidget = vtkImagePlaneWidget::New( );
31 _xwidget->SetInteractor( interactor );
32 _ywidget->SetInteractor( interactor );
33 _zwidget->SetInteractor( interactor );
36 bool ImagePlaneWidget::showImageActors(bool show){
37 if(show && m_Interactor){
39 initializeImageActors();
41 m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorx);
42 m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactory);
43 m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorz);
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);
55 void ImagePlaneWidget::initializeImageActors(){
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);
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]);
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]);
78 void ImagePlaneWidget::setImage(vtkImageData* img){
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;
87 // Set input X,Y and Z plane
89 _xwidget->SetInput( _img );
90 _xwidget->SetPlaneOrientationToXAxes( );
91 _xwidget->SetSliceIndex( sliceX );
92 //_xwidget->TextureInterpolateOff();
93 _xwidget->SetResliceInterpolateToLinear();
95 _xwidget->DisplayTextOn();
99 _ywidget->SetInput( _img );
100 _ywidget->SetPlaneOrientationToYAxes( );
101 _ywidget->SetSliceIndex( sliceY );
102 //_ywidget->TextureInterpolateOff();
103 _ywidget->SetResliceInterpolateToLinear();
104 _ywidget->DisplayTextOn();
108 _zwidget->SetInput( _img );
109 _zwidget->SetPlaneOrientationToZAxes( );
110 _zwidget->SetSliceIndex( sliceZ );
111 //_zwidget->TextureInterpolateOff();
112 _zwidget->SetResliceInterpolateToLinear();
113 _zwidget->DisplayTextOn();
117 void ImagePlaneWidget::SetLookupTable(vtkLookupTable *lookuptable){
119 _xwidget->SetLookupTable(lookuptable);
120 _ywidget->SetLookupTable(lookuptable);
121 _zwidget->SetLookupTable(lookuptable);
124 void ImagePlaneWidget::SetColorTable(vtkColorTransferFunction *colortransfer){
125 SetLookupTable((vtkLookupTable*)colortransfer);
128 void ImagePlaneWidget::showPlanes(bool show){
142 void ImagePlaneWidget::invariant(){
144 throw "Image data is not initialized";
146 if(!_xwidget ||!_ywidget || !_zwidget){
147 throw "The widgets are not initialized";
152 void ImagePlaneWidget::setSliceXImageActor(int value){
153 int *w_ext = _img->GetWholeExtent();
155 _imageactorx->SetDisplayExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], xslice, xslice);
156 m_Interactor->Render();
158 void ImagePlaneWidget::setSliceYImageActor(int value){
159 int *w_ext = _img->GetWholeExtent();
161 _imageactory->SetDisplayExtent(w_ext[0], w_ext[1], yslice, yslice, w_ext[4], w_ext[5]);
162 m_Interactor->Render();
164 void ImagePlaneWidget::setSliceZImageActor(int value){
165 int *w_ext = _img->GetWholeExtent();
167 _imageactorz->SetDisplayExtent(zslice, zslice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]);
168 m_Interactor->Render();