]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Interaction/SeedWidget.cxx
yet another refactoring
[cpPlugins.git] / lib / cpExtensions / Interaction / SeedWidget.cxx
diff --git a/lib/cpExtensions/Interaction/SeedWidget.cxx b/lib/cpExtensions/Interaction/SeedWidget.cxx
new file mode 100644 (file)
index 0000000..509d7c2
--- /dev/null
@@ -0,0 +1,165 @@
+#include <cpExtensions/Interaction/SeedWidget.h>
+
+#include <vtkCommand.h>
+#include <vtkEvent.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkWidgetCallbackMapper.h>
+#include <vtkWidgetEvent.h>
+
+// -------------------------------------------------------------------------
+cpExtensions::Interaction::SeedWidget::
+Self* cpExtensions::Interaction::SeedWidget::
+New( )
+{
+  return( new Self );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::SeedWidget::
+SetInteractor( vtkRenderWindowInteractor* rwi )
+{
+  this->Superclass::SetInteractor( rwi );
+  /* TODO
+     if( rwi != NULL )
+     {
+     TBaseStyle* s =
+     dynamic_cast< TBaseStyle* >( rwi->GetInteractorStyle( ) );
+     if( s != NULL )
+     {
+     s->AddMouseClickCommand( Self::_Click, this );
+     s->AddMouseDoubleClickCommand( Self::_DoubleClick, this );
+
+     } // fi
+
+     } // fi
+  */
+}
+
+// -------------------------------------------------------------------------
+cpExtensions::Interaction::SeedWidget::
+SeedWidget( )
+  : Superclass( )
+{
+  // These are the event callbacks supported by this widget
+  this->CallbackMapper->SetCallbackMethod(
+    vtkCommand::LeftButtonPressEvent,
+    vtkWidgetEvent::AddPoint,
+    this, Self::_AddPointAction
+    );
+  this->CallbackMapper->SetCallbackMethod(
+    vtkCommand::RightButtonPressEvent,
+    vtkWidgetEvent::Completed,
+    this, Self::_CompletedAction
+    );
+  this->CallbackMapper->SetCallbackMethod(
+    vtkCommand::MouseMoveEvent,
+    vtkWidgetEvent::Move,
+    this, Self::_MoveAction
+    );
+  this->CallbackMapper->SetCallbackMethod(
+    vtkCommand::LeftButtonReleaseEvent,
+    vtkWidgetEvent::EndSelect,
+    this, Self::_EndSelectAction
+    );
+  this->CallbackMapper->SetCallbackMethod(
+    vtkCommand::KeyPressEvent,
+    vtkEvent::NoModifier, 127, 1, "Delete",
+    vtkWidgetEvent::Delete,
+    this, Self::_DeleteAction
+    );
+}
+
+// -------------------------------------------------------------------------
+cpExtensions::Interaction::SeedWidget::
+~SeedWidget( )
+{
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::SeedWidget::
+_AddPointAction( vtkAbstractWidget* wdg )
+{
+  Self* self = dynamic_cast< Self* >( wdg );
+  if( self == NULL )
+    return;
+  auto iren = self->GetInteractor( );
+  if( iren == NULL )
+    return;
+  int shift = iren->GetShiftKey( );
+  if( shift == 1 )
+    Self::AddPointAction( wdg );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::SeedWidget::
+_CompletedAction( vtkAbstractWidget* wdg )
+{
+  // Do nothing
+  Self::CompletedAction( wdg );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::SeedWidget::
+_MoveAction( vtkAbstractWidget* wdg )
+{
+  // Do nothing
+  Self::MoveAction( wdg );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::SeedWidget::
+_EndSelectAction( vtkAbstractWidget* wdg )
+{
+  // Do nothing
+  Self::EndSelectAction( wdg );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Interaction::SeedWidget::
+_DeleteAction( vtkAbstractWidget* wdg )
+{
+  // Do nothing
+  Self::DeleteAction( wdg );
+}
+
+// -------------------------------------------------------------------------
+/* TODO
+   void cpExtensions::Interaction::SeedWidget::
+   _Click(
+   void* data, const TBaseStyle::ButtonID& button,
+   int* idx, double* pos, bool alt, bool ctr, bool sft
+   )
+   {
+   SeedWidget* self = reinterpret_cast< SeedWidget* >( data );
+   if( self == NULL )
+   return;
+   if( self->WidgetState == vtkSeedWidget::MovingSeed )
+   return;
+
+   int st = self->WidgetRep->ComputeInteractionState( idx[ 0 ], idx[ 1 ] );
+   if( st == vtkSeedRepresentation::NearSeed )
+   {
+   self->WidgetState = vtkSeedWidget::MovingSeed;
+
+   // Invoke an event on ourself for the handles
+   self->InvokeEvent( vtkCommand::LeftButtonPressEvent, NULL );
+   self->Superclass::StartInteraction( );
+   self->InvokeEvent( vtkCommand::StartInteractionEvent, NULL );
+   self->EventCallbackCommand->SetAbortFlag( 1 );
+   self->Render( );
+
+   } // fi
+   }
+
+   // -------------------------------------------------------------------------
+   void cpExtensions::Interaction::SeedWidget::
+   _DoubleClick(
+   void* data, const TBaseStyle::ButtonID& button,
+   int* idx, double* pos, bool alt, bool ctr, bool sft
+   )
+   {
+   Self::AddPointAction( reinterpret_cast< vtkAbstractWidget* >( data ) );
+   }
+*/
+
+// eof - $RCSfile$