]> Creatis software - creaMaracasVisu.git/blobdiff - lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx
changes in viewer
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / ViewerWidgets / imageplanewidget.cxx
index 4e81652ff7f21402b8702a03c4864e9d62917965..ce56065bea322191dbfc9231c6a353f6c9638d2e 100644 (file)
@@ -1,14 +1,28 @@
 #include "imageplanewidget.h"
 
+#include "vtkSmartPointer.h"
+#include "vector"
+#include "vtkImageActor.h"
+#include "vtkImageAppendComponents.h"
+#include "vtkRenderWindowInteractor.h"
+#include "vtkTextProperty.h"
+
+using namespace std;
+
 ImagePlaneWidget::ImagePlaneWidget()
 {
     _img = 0;
     _xwidget = 0;
     _ywidget = 0;
     _zwidget = 0;
+    m_Interactor = 0;
+    _imageactorx = 0;
+    _imageactory = 0;
+    _imageactorz = 0;
 }
 
 void ImagePlaneWidget::initialize(vtkRenderWindowInteractor* interactor){
+    m_Interactor = interactor;
     // Plane widget
     _xwidget = vtkImagePlaneWidget::New( );
     _ywidget = vtkImagePlaneWidget::New( );
@@ -18,8 +32,49 @@ void ImagePlaneWidget::initialize(vtkRenderWindowInteractor* interactor){
     _xwidget->SetInteractor( interactor );
     _ywidget->SetInteractor( interactor );
     _zwidget->SetInteractor( interactor );
+
+}
+bool ImagePlaneWidget::showImageActors(bool show){
+    if(show && m_Interactor){
+        if(!_imageactorx){
+            initializeImageActors();
+        }
+        m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorx);
+        m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactory);
+        m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->AddViewProp(_imageactorz);
+        return true;
+    }else if(_imageactorx){
+        m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->RemoveViewProp(_imageactorx);
+        m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->RemoveViewProp(_imageactory);
+        m_Interactor->GetRenderWindow ()->GetRenderers ()->GetFirstRenderer ()->RemoveViewProp(_imageactorz);
+        return true;
+    }
+
+    return false;
 }
 
+void ImagePlaneWidget::initializeImageActors(){
+
+    int *w_ext = _img->GetWholeExtent();
+    //cout<<w_ext[0]<<" "<<w_ext[1]<<" "<<w_ext[2]<<" "<<w_ext[3]<<" "<<w_ext[4]<<" "<<w_ext[5]<<" "<<endl;
+    _imageactorx = vtkImageActor::New();
+    _imageactorx->SetInput(_img);
+    xslice =  (w_ext[4] + w_ext[5])/2;
+    _imageactorx->SetDisplayExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], xslice, xslice);
+
+
+    _imageactory = vtkImageActor::New();
+    _imageactory->SetInput(_img);
+    yslice =  (w_ext[2] + w_ext[3])/2;
+    _imageactory->SetDisplayExtent(w_ext[0], w_ext[1], yslice, yslice, w_ext[4], w_ext[5]);
+
+    _imageactorz = vtkImageActor::New();
+    _imageactorz->SetInput(_img);
+    zslice =  (w_ext[0] + w_ext[1])/2;
+    _imageactorz->SetDisplayExtent(zslice, zslice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]);
+
+
+}
 
 void ImagePlaneWidget::setImage(vtkImageData* img){
     _img = img;
@@ -35,29 +90,31 @@ void ImagePlaneWidget::setImage(vtkImageData* img){
     _xwidget->SetInput( _img );
     _xwidget->SetPlaneOrientationToXAxes( );
     _xwidget->SetSliceIndex( sliceX );
-    //_xwidget->TextureInterpolateOff();
+    _xwidget->TextureInterpolateOff();
     _xwidget->SetResliceInterpolateToLinear();
     _xwidget->On( );
     _xwidget->DisplayTextOn();
-
+    _xwidget->GetTextProperty()->SetColor(0.3, 0.3, 0.3);
 
     _ywidget->Off( );
     _ywidget->SetInput( _img );
     _ywidget->SetPlaneOrientationToYAxes( );
     _ywidget->SetSliceIndex( sliceY );
-    //_ywidget->TextureInterpolateOff();
+    _ywidget->TextureInterpolateOff();
     _ywidget->SetResliceInterpolateToLinear();
     _ywidget->DisplayTextOn();
+    _ywidget->GetTextProperty()->SetColor(0.3, 0.3, 0.3);
     _ywidget->On( );
 
     _zwidget->Off( );
     _zwidget->SetInput( _img );
     _zwidget->SetPlaneOrientationToZAxes( );
     _zwidget->SetSliceIndex( sliceZ );
-    //_zwidget->TextureInterpolateOff();
+    _zwidget->TextureInterpolateOff();
     _zwidget->SetResliceInterpolateToLinear();
     _zwidget->DisplayTextOn();
-    _zwidget->On( );     
+    _zwidget->On( );
+    _zwidget->GetTextProperty()->SetColor(0.3, 0.3, 0.3);
 }
 
 void ImagePlaneWidget::SetLookupTable(vtkLookupTable *lookuptable){
@@ -93,3 +150,23 @@ void ImagePlaneWidget::invariant(){
         throw "The widgets are not initialized";
     }
 }
+
+
+void ImagePlaneWidget::setSliceXImageActor(int value){
+    int *w_ext = _img->GetWholeExtent();
+    xslice = value;
+    _imageactorx->SetDisplayExtent(w_ext[0], w_ext[1], w_ext[2], w_ext[3], xslice, xslice);
+    m_Interactor->Render();
+}
+void ImagePlaneWidget::setSliceYImageActor(int value){
+    int *w_ext = _img->GetWholeExtent();
+    yslice = value;
+    _imageactory->SetDisplayExtent(w_ext[0], w_ext[1], yslice, yslice, w_ext[4], w_ext[5]);
+    m_Interactor->Render();
+}
+void ImagePlaneWidget::setSliceZImageActor(int value){
+    int *w_ext = _img->GetWholeExtent();
+    zslice = value;
+    _imageactorz->SetDisplayExtent(zslice, zslice, w_ext[2], w_ext[3], w_ext[4], w_ext[5]);
+    m_Interactor->Render();
+}