]> Creatis software - creaMaracasVisu.git/blobdiff - lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx
changes in qt for volume rendering with gpu support, if you are working with volume...
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / ViewerWidgets / imageplanewidget.cxx
index 4e81652ff7f21402b8702a03c4864e9d62917965..3d53fb596edf48341132f34b4ca7ff5b359c4bef 100644 (file)
@@ -1,14 +1,27 @@
 #include "imageplanewidget.h"
 
+#include "vtkSmartPointer.h"
+#include "vector"
+#include "vtkImageActor.h"
+#include "vtkImageAppendComponents.h"
+#include "vtkRenderWindowInteractor.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 +31,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;
@@ -93,3 +147,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();
+}