]> 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 ff657c29a3f3435aa181c765e04677aa938bcfd4..23b6ce1ad4b199dde4a41aa3525362bc8b08d38b 100644 (file)
@@ -41,6 +41,7 @@
 #include "vtkCellPicker.h"
 #include "vtkInteractorStyleBaseView.h"
 #include <vtkImageReslice.h>
+#include "vtkTexture.h"
 
 
 
@@ -330,9 +331,63 @@ 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
@@ -342,9 +397,8 @@ void wxVtkMPR3DView::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();
@@ -486,7 +540,6 @@ void wxVtkMPR3DView::RefreshView()   // virtual
 {
        double spc[3];
        vtkImageData *image = GetVtkMPR3DDataViewer()->GetVtkMPRBaseData()->GetImageData();
-
        if(image)
        {
                image->GetSpacing(spc);
@@ -495,19 +548,14 @@ 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 normal[3];
        // FreePlaneX
        _planeWidgetX->GetNormal(normal);
@@ -515,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
@@ -536,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
@@ -567,7 +616,7 @@ void wxVtkMPR3DView::RefreshView()   // virtual
 #else
                _probe->Update();
 #endif
-       }
+       } //_pointWidget
 
        if (_wxvtkmpr3DviewCntrlPanel!=NULL)
        {
@@ -598,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
@@ -608,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
@@ -622,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();
@@ -632,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 
@@ -673,7 +719,6 @@ void wxVtkMPR3DView::VisiblePlaneWidget( bool visible )
                {
                        _planeWidget->On();
                        _contourPlaneActor->VisibilityOn();
-
                } else {
                        _planeWidget->Off();
                        _contourPlaneActor->VisibilityOff();                    
@@ -683,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)
@@ -694,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)
 {
@@ -707,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
@@ -833,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 );
@@ -965,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