]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/VTK/ImageMPR.cxx
Skeletonization debugged
[FrontAlgorithms.git] / lib / fpa / VTK / ImageMPR.cxx
index d435bb8e515baa3449f60b51c818785c7d0ebb00..8484a03cad504b948687ca9e6d4b5d610d8e241a 100644 (file)
@@ -1,13 +1,81 @@
 #include <fpa/VTK/ImageMPR.h>
 
+#include <vtkCommand.h>
 #include <vtkInteractorStyleSwitch.h>
 
+#include <fpa/VTK/SeedWidgetCorrector.h>
+
+/**
+ */
+class fpa_VTK_InteractionModeCallback
+  : public vtkCommand
+{
+public:
+  static fpa_VTK_InteractionModeCallback* New( )
+    {
+      return( new fpa_VTK_InteractionModeCallback );
+    }
+  virtual void Execute(
+    vtkObject* caller, unsigned long eventId, void* arguments )
+    {
+      if( eventId == vtkCommand::KeyPressEvent )
+      {
+        vtkRenderWindowInteractor* iren = 
+          static_cast< vtkRenderWindowInteractor* >( caller );
+        if( caller == NULL )
+          return;
+
+        switch( iren->GetKeyCode( ) )
+        {
+        case 'x':
+        case 'X':
+        {
+          bool eSeed = ( this->SeedWidget->GetProcessEvents( ) == 1 );
+          if( eSeed )
+          {
+            this->SeedWidget->ProcessEventsOff( );
+            this->WidgetX->InteractionOn( );
+            this->WidgetY->InteractionOn( );
+            this->WidgetZ->InteractionOn( );
+          }
+          else
+          {
+            this->SeedWidget->ProcessEventsOn( );
+            this->WidgetX->InteractionOff( );
+            this->WidgetY->InteractionOff( );
+            this->WidgetZ->InteractionOff( );
+
+          } // fi
+        }
+        break;
+        case 'z':
+        case 'Z':
+        {
+          this->SeedWidget->ProcessEventsOff( );
+          this->WidgetX->InteractionOff( );
+          this->WidgetY->InteractionOff( );
+          this->WidgetZ->InteractionOff( );
+        }
+        break;
+        default:
+          break;
+
+        } // hctiws
+
+      } // fi
+    }
+
+public:
+  vtkImagePlaneWidget* WidgetX;
+  vtkImagePlaneWidget* WidgetY;
+  vtkImagePlaneWidget* WidgetZ;
+  vtkSeedWidget*       SeedWidget;
+};
+
 // -------------------------------------------------------------------------
 fpa::VTK::ImageMPR::
 ImageMPR( )
 {
-  // vtkSmartPointer< vtkImageData > m_Image;
-
   this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( );
   this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
   this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( );
@@ -18,8 +86,36 @@ ImageMPR( )
   this->m_Renderer = vtkSmartPointer< vtkRenderer >::New( );
   this->m_Window = vtkSmartPointer< vtkRenderWindow >::New( );
   this->m_Interactor = vtkSmartPointer< vtkRenderWindowInteractor >::New( );
+  this->m_SeedHandleRepresentation =
+    vtkSmartPointer< vtkPointHandleRepresentation3D >::New( );
+  this->m_SeedRepresentation =
+    vtkSmartPointer< vtkSeedRepresentation >::New( );
+  this->m_SeedWidget = vtkSmartPointer<vtkSeedWidget>::New();
+
+  this->m_SeedHandleRepresentation->GetProperty()->SetColor( 1, 0, 1 );
+  this->m_SeedRepresentation->
+    SetHandleRepresentation( this->m_SeedHandleRepresentation );
+  this->m_SeedWidget->SetRepresentation( this->m_SeedRepresentation );
+
+  this->m_WidgetX->KeyPressActivationOff( );
+  this->m_WidgetY->KeyPressActivationOff( );
+  this->m_WidgetZ->KeyPressActivationOff( );
+  this->m_SeedWidget->KeyPressActivationOff( );
+
+  vtkSmartPointer< fpa_VTK_InteractionModeCallback > int_cb =
+    vtkSmartPointer< fpa_VTK_InteractionModeCallback >::New( );
+  int_cb->WidgetX = this->m_WidgetX;
+  int_cb->WidgetY = this->m_WidgetY;
+  int_cb->WidgetZ = this->m_WidgetZ;
+  int_cb->SeedWidget = this->m_SeedWidget;
+  this->m_Interactor->AddObserver( vtkCommand::KeyPressEvent, int_cb );
+
+  vtkSmartPointer< fpa::VTK::SeedWidgetCorrector > corr_cb =
+    vtkSmartPointer< fpa::VTK::SeedWidgetCorrector >::New( );
+  corr_cb->Configure( this->m_Picker );
+  this->m_SeedWidget->AddObserver( vtkCommand::PlacePointEvent, corr_cb );
 }
-    
+
 // -------------------------------------------------------------------------
 fpa::VTK::ImageMPR::
 ~ImageMPR( )
@@ -97,6 +193,18 @@ SetImage( vtkImageData* image )
   this->m_WidgetX->SetInteractor( this->m_Interactor );
   this->m_WidgetY->SetInteractor( this->m_Interactor );
   this->m_WidgetZ->SetInteractor( this->m_Interactor );
+  this->m_SeedWidget->SetInteractor( this->m_Interactor );
+
+  this->m_WidgetX->On( );
+  this->m_WidgetY->On( );
+  this->m_WidgetZ->On( );
+  this->m_SeedWidget->On( );
+  this->m_SeedWidget->ProcessEventsOff( );
+  this->m_Interactor->SetPicker( this->m_Picker );
+  /*
+    this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker );
+    this->m_Interactor->GetPickingManager( )->EnabledOn( );
+  */
 }
 
 // -------------------------------------------------------------------------
@@ -115,7 +223,23 @@ SetSize( unsigned int w, unsigned int h )
 
 // -------------------------------------------------------------------------
 void fpa::VTK::ImageMPR::
-AddPolyData( vtkPolyData* pd, double r, double g, double b )
+AddPolyData( vtkPolyData* pd, double opacity )
+{
+  unsigned int i = this->m_PolyDatas.size( );
+
+  this->m_PolyDatas.push_back( pd );
+  this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) );
+  this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
+
+  this->m_Mappers[ i ]->SetInputData( pd );
+  this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
+  this->m_Actors[ i ]->GetProperty( )->SetOpacity( opacity );
+  this->m_Renderer->AddActor( this->m_Actors[ i ] );
+}
+
+// -------------------------------------------------------------------------
+void fpa::VTK::ImageMPR::
+AddPolyData( vtkPolyData* pd, double r, double g, double b, double opacity )
 {
   unsigned int i = this->m_PolyDatas.size( );
 
@@ -124,11 +248,34 @@ AddPolyData( vtkPolyData* pd, double r, double g, double b )
   this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) );
 
   this->m_Mappers[ i ]->SetInputData( pd );
+  this->m_Mappers[ i ]->ScalarVisibilityOff( );
   this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
   this->m_Actors[ i ]->GetProperty( )->SetColor( r, g, b );
+  this->m_Actors[ i ]->GetProperty( )->SetOpacity( opacity );
   this->m_Renderer->AddActor( this->m_Actors[ i ] );
 }
 
+// -------------------------------------------------------------------------
+unsigned int fpa::VTK::ImageMPR::
+GetNumberOfSeeds( ) const
+{
+  return( this->m_SeedRepresentation->GetNumberOfSeeds( ) );
+}
+
+// -------------------------------------------------------------------------
+void fpa::VTK::ImageMPR::
+GetSeed( int n, double* s ) const
+{
+  vtkHandleWidget* hWdg = this->m_SeedWidget->GetSeed( n );
+  if( hWdg == NULL )
+    return;
+  vtkHandleRepresentation* hRep =
+    dynamic_cast< vtkHandleRepresentation* >( hWdg->GetRepresentation( ) );
+  if( hRep == NULL )
+    return;
+  hRep->GetWorldPosition( s );
+}
+
 // -------------------------------------------------------------------------
 vtkRenderWindow* fpa::VTK::ImageMPR::
 GetWindow( ) const
@@ -156,4 +303,11 @@ Start( )
   this->m_Interactor->Start( );
 }
 
+// -------------------------------------------------------------------------
+void fpa::VTK::ImageMPR::
+Render( )
+{
+  this->m_Window->Render( );
+}
+
 // eof - $RCSfile$