]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Interaction/ImageInteractorStyle.cxx
MPR objects updated
[cpPlugins.git] / lib / cpExtensions / Interaction / ImageInteractorStyle.cxx
index d0a313760b8bac6e1c8096b8eed35f85a8b78dda..f2781dcfb6f2e633915c4a2a73d2899c0ca2d866 100644 (file)
@@ -1,7 +1,47 @@
 #include <cpExtensions/Interaction/ImageInteractorStyle.h>
 
+#include <vtkCamera.h>
+#include <vtkCommand.h>
 #include <vtkImageActor.h>
+#include <vtkImageMapper3D.h>
+#include <vtkImageSliceMapper.h>
+#include <vtkPropCollection.h>
+#include <vtkProperty.h>
 #include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
+
+// -------------------------------------------------------------------------
+/* TODO
+   cpExtensions::Interaction::ImageInteractorStyle::TSeedWidget::
+   TSeedWidget( vtkRenderWindowInteractor* interactor, vtkImageActor* actor )
+   {
+   this->Placer = vtkSmartPointer< vtkImageActorPointPlacer >::New( );
+   this->Handle = vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
+   this->Representation = vtkSmartPointer< vtkSeedRepresentation >::New( );
+   this->Widget = vtkSmartPointer< SeedWidget >::New( );
+
+   this->Placer->SetImageActor( actor );
+   this->Handle->GetProperty( )->SetColor( 1, 0, 0 );
+   this->Handle->SetPointPlacer( this->Placer );
+   this->Representation->SetHandleRepresentation( this->Handle );
+   this->Widget->SetRepresentation( this->Representation );
+   this->Widget->SetInteractor( interactor );
+   }
+   
+   // -------------------------------------------------------------------------
+   void cpExtensions::Interaction::ImageInteractorStyle::TSeedWidget::
+   On( )
+   {
+   this->Widget->On( );
+   }
+   
+   // -------------------------------------------------------------------------
+   void cpExtensions::Interaction::ImageInteractorStyle::TSeedWidget::
+   Off( )
+   {
+   this->Widget->Off( );
+   }
+*/
 
 // -------------------------------------------------------------------------
 cpExtensions::Interaction::ImageInteractorStyle::
@@ -11,22 +51,128 @@ New( )
   return( new Self );
 }
 
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::ImageInteractorStyle::
+SetCurrentRenderer( vtkRenderer* r )
+{
+  this->Superclass::SetCurrentRenderer( r );
+
+  if( !( this->m_Configured ) )
+  {
+    auto lst = this->m_PropPicker->GetPickList( );
+    if( lst == NULL )
+      return;
+    if( lst->GetNumberOfItems( ) == 1 )
+    {
+      auto actor = dynamic_cast< vtkImageActor* >( lst->GetItemAsObject( 0 ) );
+      if( actor != NULL )
+      {
+        this->_ConfigureCamera( actor );
+        this->Modified( );
+
+      } // fi
+
+    } // fi
+
+  } // fi
+}
+
 // -------------------------------------------------------------------------
 void cpExtensions::Interaction::ImageInteractorStyle::
 AssociateImageActor( vtkImageActor* actor )
 {
   if( actor != NULL )
   {
+    // Update picker
+    this->m_PropPicker->GetPickList( )->RemoveAllItems( );
     this->m_PropPicker->AddPickList( actor );
+    this->m_Configured = false;
+    this->_ConfigureCamera( actor );
+
+    // Ok, done
     this->Modified( );
 
   } // fi
 }
 
+// -------------------------------------------------------------------------
+/*
+void cpExtensions::Interaction::ImageInteractorStyle::
+SeedWidgetOn( )
+{
+  if( this->m_SeedWidget != NULL ) delete this->m_SeedWidget;
+
+  this->m_PropPicker->GetPickList( )->InitTraversal( );
+  this->m_SeedWidget = new TSeedWidget(
+    this->Interactor,
+    dynamic_cast< vtkImageActor* >(
+      this->m_PropPicker->GetPickList( )->GetNextProp( )
+      )
+    );
+  this->m_SeedWidget->On( );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::ImageInteractorStyle::
+SeedWidgetOff( )
+{
+  if( this->m_SeedWidget != NULL )
+  {
+    this->m_SeedWidget->Off( );
+    delete this->m_SeedWidget;
+    this->m_SeedWidget = NULL;
+
+  } // fi
+}
+*/
+
+// -------------------------------------------------------------------------
+/*
+void cpExtensions::Interaction::ImageInteractorStyle::
+SetSeedWidgetCommand( vtkCommand* cmd )
+{
+  if( cmd == NULL || this->m_SeedWidget == NULL )
+    return;
+  this->m_SeedWidget->Widget->
+    AddObserver( vtkCommand::PlacePointEvent, cmd );
+}
+
+// -------------------------------------------------------------------------
+unsigned int cpExtensions::Interaction::ImageInteractorStyle::
+GetNumberOfSeeds( ) const
+{
+  if( this->m_SeedWidget != NULL )
+    return( this->m_SeedWidget->Representation->GetNumberOfSeeds( ) );
+  else
+    return( 0 );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::ImageInteractorStyle::
+GetSeedAsPoint( unsigned int id, double pos[ 3 ] ) const
+{
+  if( this->m_SeedWidget != NULL )
+    this->m_SeedWidget->Representation->GetSeedWorldPosition( id, pos );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::ImageInteractorStyle::
+GetSeedAsIndex( unsigned int id, int idx[ 3 ] ) const
+{
+     if( this->m_SeedWidget != NULL )
+     this->m_SeedWidget->Representation->GetSeedWorldPosition( id, pos );
+}
+*/
+
 // -------------------------------------------------------------------------
 cpExtensions::Interaction::ImageInteractorStyle::
 ImageInteractorStyle( )
-  : Superclass( )
+  : Superclass( ),
+    m_Configured( false )
+    /*
+      ,
+      m_SeedWidget( NULL )
+    */
 {
   this->m_PropPicker = vtkSmartPointer< vtkPropPicker >::New( );
   this->m_PropPicker->PickFromListOn( );
@@ -36,6 +182,54 @@ ImageInteractorStyle( )
 cpExtensions::Interaction::ImageInteractorStyle::
 ~ImageInteractorStyle( )
 {
+  // if( this->m_SeedWidget != NULL ) delete this->m_SeedWidget;
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::ImageInteractorStyle::
+_ConfigureCamera( vtkImageActor* actor )
+{
+  if( this->CurrentRenderer != NULL )
+  {
+    // Update camera
+    auto camera = this->CurrentRenderer->GetActiveCamera( );
+    auto mapper = dynamic_cast< vtkImageSliceMapper* >( actor->GetMapper( ) );
+    if( mapper != NULL && camera != NULL )
+    {
+      double bounds[ 6 ];
+      actor->GetBounds( bounds );
+      camera->ParallelProjectionOn( );
+      camera->SetFocalPoint( double( 0 ), double( 0 ), double( 0 ) );
+      int orientation = mapper->GetOrientation( );
+      switch( orientation )
+      {
+      case 0:
+      {
+        camera->SetPosition( double( 1 ), double( 0 ), double( 0 ) );
+        camera->SetViewUp  ( double( 0 ), double( 1 ), double( 0 ) );
+      }
+      break;
+      case 1:
+      {
+        camera->SetPosition( double( 0 ), double( 1 ), double( 0 ) );
+        camera->SetViewUp  ( double( 0 ), double( 0 ), double( -1 ) );
+      }
+      break;
+      case 2:
+      {
+        camera->SetPosition( double( 0 ), double( 0 ), double( 1 ) );
+        camera->SetViewUp  ( double( 0 ), double( 1 ), double( 0 ) );
+      }
+      break;
+      default:
+        break;
+      } // hctiws
+      this->CurrentRenderer->ResetCamera( );
+      this->m_Configured = true;
+
+    } // fi
+
+  } // fi
 }
 
 // -------------------------------------------------------------------------