]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVtkMPR3DView.cxx
#3474 Refresh optimization DrawAxisTree3D Box
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / wxVtkMPR3DView.cxx
index 3703011e6b5c35dbfc04b34c2d52cf076a99ff3c..23b6ce1ad4b199dde4a41aa3525362bc8b08d38b 100644 (file)
@@ -41,6 +41,7 @@
 #include "vtkCellPicker.h"
 #include "vtkInteractorStyleBaseView.h"
 #include <vtkImageReslice.h>
+#include "vtkTexture.h"
 
 
 
@@ -142,14 +143,17 @@ wxVtkMPR3DView::wxVtkMPR3DView( wxVtk3DBaseView *wxvtk3Dbaseview )
 wxVtkMPR3DView::~wxVtkMPR3DView()
 {
        VisiblePointWidget( false );
-       VisiblePlaneWidget( false );
-       if(_pointWidget!=NULL){
+//     VisiblePlaneWidget( false );
+       if(_pointWidget!=NULL)
+       {
                _pointWidget->Delete();
        }
-       if(_planeWidget!=NULL){
+       if(_planeWidget!=NULL)
+       {
                _planeWidget->Delete();
        }
-       if(_vtkplane!=NULL){
+       if(_vtkplane!=NULL)
+       {
                _vtkplane->Delete();
                _probe->Delete();
                _contourMapper->Delete();
@@ -327,22 +331,74 @@ void wxVtkMPR3DView::SetImage()
        // -- Plane widget
        _probe->SetSource( imageData );
 #else
+
+
+//     double colorWindow      = _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow();
+//     double colorLevel       = _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel();
+
+       double spc[3];
+       vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
+       if(image)
+       {
+               image->GetSpacing(spc);
+       }else{
+               spc[0] = 0;
+               spc[1] = 0;
+               spc[2] = 0;
+       }
+       double x = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
+       double y = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
+       double z = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
+
+
+/*
+       if (mchange==NULL)
+       {
+               mchange = vtkImageChangeInformation::New();
+               mchange->SetInputData( imageData );
+               mchange->Modified();    //important
+               mchange->Update();    //important
+               _planeWidgetX->SetInputData( mchange->GetOutput() );
+               _planeWidgetY->SetInputData( mchange->GetOutput() );
+               _planeWidgetZ->SetInputData( mchange->GetOutput() );
+       } else {
+               mchange->SetInputData( imageData );
+               mchange->Modified();    //important
+               mchange->Update();    //important
+       }
+       
+*/
+
+
+
+
        _planeWidgetX->SetInputData( imageData );
        _planeWidgetY->SetInputData( imageData );
        _planeWidgetZ->SetInputData( imageData );
+//EED 2021-06-23       
+//     _planeWidgetX->SetWindowLevel(colorLevel,colorWindow,1);
+//     _planeWidgetY->SetWindowLevel(colorLevel,colorWindow,1);
+//     _planeWidgetY->SetWindowLevel(colorLevel,colorWindow,1);
+       _planeWidgetX->SetSlicePosition( x*spc[0] );
+       _planeWidgetY->SetSlicePosition( y*spc[1] );
+       _planeWidgetZ->SetSlicePosition( z*spc[2] );
+
+       _planeWidgetX->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
+       _planeWidgetY->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
+       _planeWidgetZ->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
+
+
        // -- Plane widget
        _probe->SetSourceData( imageData );
 #endif
-
        _vtkmpr3Ddataviewer->SetImage();
 }
 
 //-------------------------------------------------------------------
 vtkImagePlaneWidget* wxVtkMPR3DView::GetPlaneWidget(unsigned char activationkey, double r, double g, double b, vtkCellPicker* picker)
 {
-       vtkProperty* prop1                                      = 0;
-       vtkImagePlaneWidget* planeWidget        = 0;
-       planeWidget                                                     = vtkImagePlaneWidget::New();
+       vtkProperty* prop1                                      = NULL;
+       vtkImagePlaneWidget* planeWidget        = vtkImagePlaneWidget::New();
        planeWidget->SetInteractor( GetWxvtk3Dbaseview()->GetWxVTKRenderWindowInteractor() );
        planeWidget->EnabledOff();
        vtkImageData *image                                     = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
@@ -458,7 +514,7 @@ void wxVtkMPR3DView::FreePlaneInteraction(bool ok)
                        _planeWidgetY->InteractionOff();
                        _planeWidgetZ->InteractionOff();
                }
-       } // if _planeWidgetX
+       } // if _planeWidgetXVisiblePointWidget
 }
 
 
@@ -484,7 +540,6 @@ void wxVtkMPR3DView::RefreshView()   // virtual
 {
        double spc[3];
        vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
-
        if(image)
        {
                image->GetSpacing(spc);
@@ -493,18 +548,13 @@ void wxVtkMPR3DView::RefreshView()   // virtual
                spc[1] = 0;
                spc[2] = 0;
        }
-
 //     GetVtkMPR3DDataViewer()->Configure();
 
-
        //double nx=1,ny=0,nz=0; // JPRx
        Refresh();
-       double x=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
-       double y=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
-       double z=GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
-
-       SetColorWindow( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow() );
-       SetColorLevel( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel() );
+       double x = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetX();
+       double y = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetY();
+       double z = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetZ();
 
        double normal[3];
        // FreePlaneX
@@ -513,7 +563,7 @@ void wxVtkMPR3DView::RefreshView()   // virtual
        {
                _planeWidgetX->SetSlicePosition( x*spc[0] );
 //EED 2016/02/19
-//             _planeWidgetX->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
+               _planeWidgetX->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
                _planeWidgetX->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
        }
        // FreePlaneY
@@ -534,11 +584,12 @@ void wxVtkMPR3DView::RefreshView()   // virtual
                _planeWidgetZ->GetReslice()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
                _planeWidgetZ->GetTexture()->SetInterpolate( _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetInterpolate() );
        }
-               
-       x=x*spc[0];
-       y=y*spc[1];
-       z=z*spc[2];
-
+    
+       SetWindowColorLevel(_vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorWindow() , _vtkmpr3Ddataviewer->GetVtkMPRBaseData()->GetColorLevel() );
+    
+       x = x*spc[0];
+       y = y*spc[1];
+       z = z*spc[2];
        if(_pointWidget)
        {
 //EED 2017-01-01 Migration VTK7
@@ -565,7 +616,7 @@ void wxVtkMPR3DView::RefreshView()   // virtual
 #else
                _probe->Update();
 #endif
-       }
+       } //_pointWidget
 
        if (_wxvtkmpr3DviewCntrlPanel!=NULL)
        {
@@ -596,7 +647,8 @@ wxVtk3DBaseView* wxVtkMPR3DView::GetWxvtk3Dbaseview() throw (char*)
 //-------------------------------------------------------------------
 
 //-------------------------------------------------------------------
-void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){
+void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible)
+{
        /*if(visible == false)
                printf("CPR: wxVtkMPR3DView::VisibleImageActor-> visibleActor == false \n");
        else
@@ -606,7 +658,8 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){
        }
        */
        if (visible!=_vtkmpr3Ddataviewer->GetVisiblePosition(idPosition)){
-               if (visible==false){
+               if (visible==false)
+               {
                        _wxvtk3Dbaseview->GetRenderer()->RemoveActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition)  );
                } else {
 //EED 21/07/2013
@@ -620,7 +673,6 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){
 // This works in ViewerNV with nTymeView=6
 // Because the others modules (5) generate also more actors with an OutLineFilter -> Actor
 //showOutlineActor(false);
-
                        // step 1, step 2
                        vtkActorCollection *tmpCollection    = vtkActorCollection::New();
                        vtkActorCollection *collectionActors =  _wxvtk3Dbaseview->GetRenderer()->GetActors();
@@ -630,20 +682,16 @@ void wxVtkMPR3DView::VisibleImageActor(int idPosition, bool visible){
                                tmpCollection->AddItem ( (vtkActor*)collectionActors->GetItemAsObject(0)  );                    
                                _wxvtk3Dbaseview->GetRenderer()->RemoveActor( (vtkProp*)tmpCollection->GetItemAsObject(i) );
                        } // for
-
                        // step 3
                        _wxvtk3Dbaseview->GetRenderer()->AddActor( _vtkmpr3Ddataviewer->GetImageActor(idPosition)  );
-
                        // step 4
                         for (i=0; i<size; i++)
                        {
                                _wxvtk3Dbaseview->GetRenderer()->AddActor( (vtkProp*)tmpCollection->GetItemAsObject(i) );
                        } // for
                        tmpCollection->Delete();
-
                        // step 5 Refresh
                        _wxvtk3Dbaseview->GetRenderer()->GetRenderWindow()->Render();
-
                } // if visible
                _vtkmpr3Ddataviewer->SetVisiblePosition(idPosition,visible);
        } // if visible 
@@ -671,7 +719,6 @@ void wxVtkMPR3DView::VisiblePlaneWidget( bool visible )
                {
                        _planeWidget->On();
                        _contourPlaneActor->VisibilityOn();
-
                } else {
                        _planeWidget->Off();
                        _contourPlaneActor->VisibilityOff();                    
@@ -681,7 +728,7 @@ void wxVtkMPR3DView::VisiblePlaneWidget( bool visible )
 }
 
 //CPR: Method added 30 Nov 2009
-void wxVtkMPR3DView::showOutlineActor(bool value)
+void wxVtkMPR3DView::showOutlineBoxActor(bool value)
 {
        vtkActor* _outlineActor = _vtkmpr3Ddataviewer->GetOutlineActor();
        if(value == true)
@@ -692,6 +739,29 @@ void wxVtkMPR3DView::showOutlineActor(bool value)
        } // value
 }
 
+//-------------------------------------------------------------------
+void wxVtkMPR3DView::showOutlinePlaneActor(bool value)
+{
+       vtkProperty *prop1=NULL;
+       if(value == true)
+       {
+               prop1 = _planeWidgetX ->GetPlaneProperty();
+               prop1->SetOpacity(1);
+               prop1 = _planeWidgetY ->GetPlaneProperty();
+               prop1->SetOpacity(1);
+               prop1 = _planeWidgetZ ->GetPlaneProperty();
+               prop1->SetOpacity(1);           
+       } else {
+               prop1 = _planeWidgetX ->GetPlaneProperty();
+               prop1->SetOpacity(0);
+               prop1 = _planeWidgetY ->GetPlaneProperty();
+               prop1->SetOpacity(0);
+               prop1 = _planeWidgetZ ->GetPlaneProperty();
+               prop1->SetOpacity(0);
+       } // value
+}
+
+
 //-------------------------------------------------------------------
 void wxVtkMPR3DView::SetVtkMPR3DDataViewer(vtkMPR3DDataViewer *vtkmpr3Ddataviewer)
 {
@@ -705,18 +775,13 @@ void wxVtkMPR3DView::InitOrientationPointWidget()
 }
 
 //-------------------------------------------------------------------
-void wxVtkMPR3DView::SetColorWindow(double colorWindow)
+void wxVtkMPR3DView::SetWindowColorLevel(double colorWindow , double colorLevel)
 {
-       double colorLevel = _planeWidgetX->GetLevel();
        _planeWidgetX->SetWindowLevel(colorWindow,colorLevel);
+       _planeWidgetY->SetWindowLevel(colorWindow,colorLevel);
+       _planeWidgetZ->SetWindowLevel(colorWindow,colorLevel);
 }
 
-//-------------------------------------------------------------------
-void wxVtkMPR3DView::SetColorLevel(double colorLevel)
-{
-       double colorWindow = _planeWidgetX->GetWindow();
-       _planeWidgetX->SetWindowLevel(colorWindow,colorLevel);
-}
 
 //-------------------------------------------------------------------
 // EED 25 Janvier 2007 testLoic
@@ -831,13 +896,13 @@ void wxVtkMPR3DView::TestLoic1()
 //EED 2017-01-01 Migration VTK7
 #if VTK_MAJOR_VERSION <= 5
        _3DSliceMapper->SetInput(change->GetOutput( ) );
+       _3DSliceMapper->ImmediateModeRenderingOn( );
 #else
        _3DSliceMapper->SetInputData(change->GetOutput( ) );
 #endif
 
        _3DSliceMapper->SetLookupTable( _bwlookup );
        _3DSliceMapper->SetScalarRange( _range );
-       _3DSliceMapper->ImmediateModeRenderingOn( );
 
        vtkActor *_3DSliceActor = vtkActor::New( );
        _3DSliceActor->SetMapper( _3DSliceMapper );
@@ -963,15 +1028,20 @@ void wxVtkMPR3DView::SetBackGroundType(int type)
        if (_wxvtk3Dbaseview!=NULL)
        {
                if (type==0)
+               {
+                       _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOn();
+                       _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.33 , 0.33 , 0.33 );
+                       _wxvtk3Dbaseview->GetRenderer()->SetBackground2( 0.66 , 0.66 , 0.66 );
+               } // if type
+               else if (type==1)
                {
                        _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOff();
                        _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0 , 0 , 0 );
                } // if type
-               if (type==1)
+               else if (type==2)
                {
-                       _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOn();
-                       _wxvtk3Dbaseview->GetRenderer()->SetBackground( 0.33 , 0.33 , 0.33 );
-                       _wxvtk3Dbaseview->GetRenderer()->SetBackground2( 0.66 , 0.66 , 0.66 );
+                       _wxvtk3Dbaseview->GetRenderer()->GradientBackgroundOff();
+                       _wxvtk3Dbaseview->GetRenderer()->SetBackground( 1 , 1 , 1 );
                } // if type
                _wxvtk3Dbaseview->Refresh();
        }// if _wxvtk3Dbaseview