]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtk2DBaseView.cxx
#3155 creaMaracasVisu Feature New Normal - ViewerPlane ComplexBox
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtk2DBaseView.cxx
index 45a387a363f244dc823acce94a70a3ccb5bb518b..1110fc11f1d824b8a0e012978bf8ce28f062370a 100644 (file)
@@ -1,8 +1,34 @@
+/*# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Sant�)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+# Previous Authors : Laurent Guigues, Jean-Pierre Roux
+# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------ */
+
 #include "wxVtk2DBaseView.h"
 
 #include "vtkInfoTextImage.h"
 #include "vtkInteractorStyleBaseView2D.h"
 #include "vtkInfoTextImageInteractor.h"
+#include "vtkImageActor.h"
 
 
 wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
@@ -15,70 +41,123 @@ wxVtk2DBaseView::wxVtk2DBaseView(wxWindow *parent)
 //EED 5mai2009
 //-------------------------------------------------------------------
 wxVtk2DBaseView::~wxVtk2DBaseView()
-{      
-       if (_vtkIinfoTextImage!=NULL) 
+{
+       if (_vtkIinfoTextImage!=NULL)
        {
-          delete _vtkIinfoTextImage; 
+          delete _vtkIinfoTextImage;
        }
-
-       if (_imageViewer2XYZ!=NULL) 
+       if (_imageViewer2XYZ!=NULL)
        {
-          delete _imageViewer2XYZ; 
+          delete _imageViewer2XYZ;
        }
 }
 
 //-------------------------------------------------------------------
-void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) //       virtual 
+void wxVtk2DBaseView::TransformCoordinate_spacing_ViewToModel(double &X,double &Y, double &Z) //       virtual
 {
 //EEDx5
        double spc[3];
 //     GetVtkBaseData()->GetImageData()->GetSpacing(spc);
-       this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
-
+//JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
+       vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
+       if(image)
+       {
+               image->GetSpacing(spc);
+       }else{
+               spc[0] = 1;
+               spc[1] = 1;
+               spc[2] = 1;
+       }
        X = X / spc[0];
        Y = Y / spc[1];
        Z = Z / spc[2];
-
 }
 
 //-------------------------------------------------------------------
-void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //       virtual 
+void wxVtk2DBaseView::TransformCoordinate_spacing_ModelToView(double &X,double &Y, double &Z) //       virtual
 {
 //EEDx5
        double spc[3];
 //     GetVtkBaseData()->GetImageData()->GetSpacing(spc);
-       this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
-
+//JCP 04/08/10 W/O Image this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput()->GetSpacing(spc);
+       vtkImageData* image = this->_imageViewer2XYZ->GetVtkImageViewer2()->GetInput();
+       if(image){
+               image->GetSpacing(spc);
+       }else{
+               spc[0] = 1;
+               spc[1] = 1;
+               spc[2] = 1;
+       }
+//
        X=X*spc[0];
        Y=Y*spc[1];
        Z=Z*spc[2];
-
 }
 
 //-------------------------------------------------------------------
 void wxVtk2DBaseView::ResetView()
 {
-       double spx,spy,spz;
-       int x1,x2,y1,y2,z1,z2;
+       printf("EED wxVtk2DBaseView::ResetView");
+       double spx = 0,spy = 0,spz = 0;
+       int x1 = 1,x2 = 1,y1 = 1,y2 = 1,z1 = 1,z2 = 1;
        wxVtkBaseView::Configure();
-       
        wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
        vtkImageData *imageData = GetVtkBaseData()->GetImageData();
-       imageData->UpdateInformation();
-       imageData->SetUpdateExtent( imageData->GetWholeExtent());
-       imageData->Update();
-
-       _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
-       imageData->GetSpacing (spx,spy,spz);
-       imageData->GetExtent (x1,x2,y1,y2,z1,z2);
+       if(imageData)
+       {
+               imageData->UpdateInformation();
+               imageData->SetUpdateExtent( imageData->GetWholeExtent());
+               imageData->Update();
+               _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
+               imageData->GetSpacing (spx,spy,spz);
+               imageData->GetExtent (x1,x2,y1,y2,z1,z2);
+       }
+printf("//EED wxVtk2DBaseView::ResetView %d %d    %d %d     %d %d \n",x1,x2,y1,y2,z1,z2);
        _imageViewer2XYZ -> SetExtentDimension(x1,x2,y1,y2,z1,z2);
        _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
 
+//EED 24oct2010
+    _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
+
        _imageViewer2XYZ->GetVtkImageViewer2()->Render();
-       SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
-       
+
+       //////////////
+       //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
+       //
+       // Previous version
+       // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
+       //
+       // Actual version
+       vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
+
+       manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
+       style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
+
+       vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
+       style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
+
+       SetInteractorStyleImage( style2D );
+
+       // RaC
+       //////////////
+
 }
 
+//-------------------------------------------------------------------
+void wxVtk2DBaseView::SetImageToVtkViewer(vtkImageData *imageData)
+{
+       int ext[6];
+       imageData->Update();
+       imageData->GetWholeExtent(ext);
+       if (_imageViewer2XYZ!=NULL)
+       {
+               _imageViewer2XYZ->SetExtentDimension( ext[0],ext[1],ext[2],ext[3],ext[4],ext[5] );
+               _imageViewer2XYZ->GetVtkImageViewer2()->SetInput( imageData );
+       } // if _imageViewer2XYZ
+
+       GetRenderer()->GetActiveCamera()->SetClippingRange(0.01, 1000000);
+
+}
 
 //-------------------------------------------------------------------
 void wxVtk2DBaseView::Configure(bool okimage)
@@ -93,31 +172,52 @@ void wxVtk2DBaseView::Configure(bool okimage)
                _imageViewer2XYZ = new vtkImageViewer2_XYZ();
                wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
                _imageViewer2XYZ -> GetVtkImageViewer2()->SetupInteractor ( iren );
-               SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
-       }
 
+               //////////////
+               //RaC 04-2010 Look for the description of new changes in vtkInteractorStyleBaseView2D constructor.
+               //
+               // Previous version
+               // SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
+               //
+               // Actual version
+               vtkInteractorStyleBaseView2D *style2D = vtkInteractorStyleBaseView2D::New();
+
+               manualInteractorWindowLevel *_manualinteractorwindowlevel= new manualInteractorWindowLevel();
+               style2D->SetInteractorWindowLevel( _manualinteractorwindowlevel );
+
+               vtkInteractorScrollZ *_vtkInteractorScrollZ = new vtkInteractorScrollZ();
+               style2D->SetInteractorScrollZ(_vtkInteractorScrollZ);
+
+               SetInteractorStyleImage( style2D );
+
+               // RaC
+               //////////////
+       }
 
        vtkImageData *imageData = GetVtkBaseData()->GetMarImageData()->GetImageData();
-       if (imageData!=NULL){
+       if (imageData!=NULL)
+       {
                imageData->UpdateInformation();
                imageData->SetUpdateExtent( imageData->GetWholeExtent());
                imageData->Update();
                if (okimage==true){
                        imageData->GetSpacing (spx,spy,spz);
                        imageData->GetExtent (x1,x2,y1,y2,z1,z2);
-
-
-                       _imageViewer2XYZ->GetVtkImageViewer2()->SetInput(imageData );
+                       SetImageToVtkViewer(imageData);
                        _imageViewer2XYZ->SetExtentDimension(x1,x2,y1,y2,z1,z2);
+                       
+/*EED Borrame,  now is syncroniced in vtkBaseData for all windows                      
                        double range[2];
-                         imageData->GetScalarRange(range);
-                         if (range[1]<20000){
+                       imageData->GetScalarRange(range);
+                       if (range[1]<20000){
                                 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( (range[1]-range[0])/2 );
                                 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( (range[1]+range[0])/4 );
-                         } else {
+                       } else {
                                 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow( 1000 );
                                 _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel( 500 );
-                         }
+                       }
+*/ 
+                       
 // EED 31 Janvier 2007
 //vtkImageActor *vtkimageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor ();
 //vtkimageactor->InterpolateOff ();
@@ -130,90 +230,97 @@ void wxVtk2DBaseView::Configure(bool okimage)
 //_collookup->SetTableValue(255 , 0 , 1 , 0 , 1 );
 //_imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel ()->SetLookupTable(_collookup );
 
-
 // EED 17 Oct 2007
 //                     SetInteractorStyleImage( vtkInteractorStyleBaseView2D::New() );
 
+                       vtkImageViewer2 *IV2            =       _imageViewer2XYZ->GetVtkImageViewer2();
+                       vtkCamera               *camera         =       IV2->GetRenderer()->GetActiveCamera();
 
-                       vtkImageViewer2 *IV2=_imageViewer2XYZ->GetVtkImageViewer2();
-                       vtkCamera *camera = IV2->GetRenderer()->GetActiveCamera();
-
-//EED 17Avril2009      
-/*                     
-                       camera->SetViewUp               ( spx*0                 , -spy*1                        , spz*0         );
-                       camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    ); 
-                       camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
-*/ 
-                       camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
-                       camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     ); 
-                       camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         ); 
+//EED 17Avril2009
+//EED 21 mars 2012     FLIP problem  ..PLOP..
                        
+                       // XY
+                       camera->SetViewUp               ( spx*0                 , -spy*1                , spz*0         );
+                       camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , -spz*10000    );
+                       camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         );
+/*
+                       camera->SetViewUp               ( spx*0                 , spy*1                 , spz*0         );
+                       camera->SetPosition             ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*10000     );
+                       camera->SetFocalPoint   ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0         );
+*/
+
                        
                        camera->SetClippingRange( 0.01                  , 1000000 );
                        camera->ComputeViewPlaneNormal();
                        camera->SetParallelScale( spx*(x2-x1)/3.0 );
-                       
+
                        // text information over the graphic window
-                       _vtkIinfoTextImage              = new vtkInfoTextImage();
-                       _vtkIinfoTextImageInteractor    = new vtkInfoTextImageInteractor();
+                       if(_vtkIinfoTextImage == NULL){
+                               _vtkIinfoTextImage                                      = new vtkInfoTextImage();
+                               _vtkIinfoTextImageInteractor            = new vtkInfoTextImageInteractor();
+                               ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
+                       }
                        _vtkIinfoTextImage->SetWxVtk2DBaseView(this);
                        _vtkIinfoTextImage->SetMarImageData( GetVtkBaseData()->GetMarImageData() );
-                       _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);     
+                       _vtkIinfoTextImageInteractor->SetModelVtkInfoTextImage(_vtkIinfoTextImage);
                        _vtkIinfoTextImage->Configure();
-                       ((vtkInteractorStyleBaseView*)this->GetInteractorStyleBaseView())->AddInteractorStyleMaracas(_vtkIinfoTextImageInteractor);
+
                } // okimage
        } // imageData
-
 }
 
 //-------------------------------------------------------------------
 
-int    wxVtk2DBaseView::GetActualSlice()  // virtual 
+int wxVtk2DBaseView::GetActualSlice()  // virtual
 {
-   return (int)(_vtkbasedata->GetZ());
+   return (int)(GetVtkBaseData()->GetZ());
 }
 
 //-------------------------------------------------------------------
 void wxVtk2DBaseView::SetActualSlice(int slice)  // Virtual
 {
-   _vtkbasedata->SetZ(slice);
+   GetVtkBaseData()->SetZ(slice);
 }
 
 //-------------------------------------------------------------------
-
-vtkBaseData *wxVtk2DBaseView::GetVtkBaseData()
+void wxVtk2DBaseView::UpdateColorWindowLevel()
 {
-   return _vtkbasedata;
-}
-
-//-------------------------------------------------------------------
-
-void wxVtk2DBaseView::SetVtkBaseData(vtkBaseData *vtkbasedata)
-{
-   _vtkbasedata=vtkbasedata;
+       //EED 24oct2010
+       //EED 02nov2012
+       
+//     vtkImageViewer2 *vtkimageviewer2        = _imageViewer2XYZ->GetVtkImageViewer2();               
+       
+       vtkImageMapToWindowLevelColors* imagemaptowindowlevel = _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel();
+       imagemaptowindowlevel->SetWindow( GetVtkBaseData()->GetColorWindow() );
+       imagemaptowindowlevel->SetLevel( GetVtkBaseData()->GetColorLevel() );
+       
+// EED Borrame
+//     vtkimageviewer2->SetColorWindow( GetVtkBaseData()->GetColorWindow() );
+//     vtkimageviewer2->SetColorLevel(  GetVtkBaseData()->GetColorLevel() );
+       _imageViewer2XYZ->GetVtkImageViewer2()->GetWindowLevel()->Modified();
 }
 
 //-------------------------------------------------------------------
-
 void wxVtk2DBaseView::Refresh()
 {
-   int z = (int)(GetVtkBaseData()->GetZ());
-  _imageViewer2XYZ->SetZSlice( z ); 
-
-   wxVtkBaseView::Refresh();
+       int z = (int)(GetVtkBaseData()->GetZ());
+       _imageViewer2XYZ->SetZSlice( z );
+//EED 2016/02/19
+       vtkImageActor *imageactor = _imageViewer2XYZ->GetVtkImageViewer2()->GetImageActor();
+       imageactor->SetInterpolate( GetVtkBaseData()->GetInterpolate() );
+       //EED 01nov2012
+       UpdateColorWindowLevel();       
+       wxVtkBaseView::Refresh();
 }
 
 //-------------------------------------------------------------------
-
 void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *interactorstylebaseview)
 {
        SetInteractorStyleBaseView(interactorstylebaseview);
-
        wxVTKRenderWindowInteractor *iren = GetWxVTKRenderWindowInteractor();
        interactorstylebaseview->SetInteractor ( iren );
        iren->SetInteractorStyle(interactorstylebaseview);
-       interactorstylebaseview->SetwxVtkBaseView(this);        
-
+       interactorstylebaseview->SetwxVtkBaseView(this);
        vtkMaracasImageViewer2Callback * cbk = vtkMaracasImageViewer2Callback::New();
        cbk->IV = _imageViewer2XYZ->GetVtkImageViewer2();
        interactorstylebaseview->AddObserver( vtkCommand::WindowLevelEvent, cbk );
@@ -223,10 +330,11 @@ void wxVtk2DBaseView::SetInteractorStyleImage(vtkInteractorStyleBaseView *intera
 }
 
 //---------------------------------------------------------------------------
-vtkRenderer* wxVtk2DBaseView::GetRenderer()    // virtual 
+vtkRenderer* wxVtk2DBaseView::GetRenderer()    // virtual
 {
    return _imageViewer2XYZ->GetVtkImageViewer2()->GetRenderer();
 }
+
 //---------------------------------------------------------------------------
 vtkRenderWindow* wxVtk2DBaseView::GetRenWin()          // virtual
 {
@@ -234,10 +342,48 @@ vtkRenderWindow* wxVtk2DBaseView::GetRenWin()             // virtual
 }
 
 //-------------------------------------------------------------------
-
 void wxVtk2DBaseView::GetSpacing(double spc[3])  // virtual
 {
    vtkImageData *imageData     = GetVtkBaseData()->GetImageData();
-   imageData->GetSpacing(spc);
+   if(imageData)
+   {
+       imageData->GetSpacing(spc);
+   }else{
+        spc[0] = 0;
+        spc[1] = 0;
+        spc[2] = 0;
+   }
+}
+
+//-------------------------------------------------------------------
+void wxVtk2DBaseView::setColorTransferFunction(vtkColorTransferFunction* colortable)
+{
+       if(_imageViewer2XYZ!=NULL)
+       {
+               _imageViewer2XYZ->setColorTransferFunction(colortable);
+               this->Refresh();
+       }
+}
+
+//-------------------------------------------------------------------
+void wxVtk2DBaseView::SetColorWindow(double level)
+{
+//     _imageViewer2XYZ->GetVtkImageViewer2()->SetColorWindow(level);
+       GetVtkBaseData()->SetColorWindow(level);        
+       this->Refresh();
+}
+
+//-------------------------------------------------------------------
+void wxVtk2DBaseView::SetColorLevel(double level)
+{
+//     _imageViewer2XYZ->GetVtkImageViewer2()->SetColorLevel(level);
+       GetVtkBaseData()->SetColorLevel(level);
+       this->Refresh();
+}
+
+//-------------------------------------------------------------------
+int wxVtk2DBaseView::GetDirection() // virtual
+{
+    return 2;
 }