X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpExtensions%2FInteraction%2FSeedWidget.cxx;h=b6e348f5bce6d28484d517e1429a224fb04f4ad0;hb=357b159c7f06bdb1bb65a9ebecf8b2345b3f2900;hp=3460532ba22cbcec8231cdc626de53d370fd18e3;hpb=fdd4f2cec18107de380ebd350cb1019eed7c294c;p=cpPlugins.git diff --git a/lib/cpExtensions/Interaction/SeedWidget.cxx b/lib/cpExtensions/Interaction/SeedWidget.cxx index 3460532..b6e348f 100644 --- a/lib/cpExtensions/Interaction/SeedWidget.cxx +++ b/lib/cpExtensions/Interaction/SeedWidget.cxx @@ -1,11 +1,8 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include +#include // ------------------------------------------------------------------------- cpExtensions::Interaction::SeedWidget:: @@ -20,13 +17,20 @@ void cpExtensions::Interaction::SeedWidget:: SetInteractor( vtkRenderWindowInteractor* rwi ) { this->Superclass::SetInteractor( rwi ); - TBaseStyle* s = dynamic_cast< TBaseStyle*>( rwi->GetInteractorStyle( ) ); - if( s != NULL ) - { - s->AddMouseClickCommand( Self::_Click, this ); - s->AddMouseDoubleClickCommand( Self::_DoubleClick, this ); + /* 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 + + } // fi + */ } // ------------------------------------------------------------------------- @@ -34,11 +38,33 @@ cpExtensions::Interaction::SeedWidget:: SeedWidget( ) : Superclass( ) { - // Remove default translations - vtkWidgetEventTranslator* t = this->GetEventTranslator( ); - t->RemoveTranslation( vtkCommand::LeftButtonPressEvent ); - t->RemoveTranslation( vtkCommand::MiddleButtonPressEvent ); - t->RemoveTranslation( vtkCommand::RightButtonPressEvent ); + // 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 + ); } // ------------------------------------------------------------------------- @@ -49,38 +75,89 @@ cpExtensions::Interaction::SeedWidget:: // ------------------------------------------------------------------------- void cpExtensions::Interaction::SeedWidget:: -_Click( - void* data, const TBaseStyle::ButtonID& button, - int* idx, double* pos, bool alt, bool ctr, bool sft - ) +_AddPointAction( vtkAbstractWidget* wdg ) { - SeedWidget* self = reinterpret_cast< SeedWidget* >( data ); - if( self->WidgetState == vtkSeedWidget::MovingSeed ) + 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 ); +} - int st = self->WidgetRep->ComputeInteractionState( idx[ 0 ], idx[ 1 ] ); - if( st == vtkSeedRepresentation::NearSeed ) - { - self->WidgetState = vtkSeedWidget::MovingSeed; +// ------------------------------------------------------------------------- +void cpExtensions::Interaction::SeedWidget:: +_CompletedAction( vtkAbstractWidget* wdg ) +{ + // Do nothing + Self::CompletedAction( wdg ); +} - // 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( ); +// ------------------------------------------------------------------------- +void cpExtensions::Interaction::SeedWidget:: +_MoveAction( vtkAbstractWidget* wdg ) +{ + // Do nothing + Self::MoveAction( wdg ); +} - } // fi +// ------------------------------------------------------------------------- +void cpExtensions::Interaction::SeedWidget:: +_EndSelectAction( vtkAbstractWidget* wdg ) +{ + // Do nothing + Self::EndSelectAction( wdg ); } // ------------------------------------------------------------------------- void cpExtensions::Interaction::SeedWidget:: -_DoubleClick( - void* data, const TBaseStyle::ButtonID& button, - int* idx, double* pos, bool alt, bool ctr, bool sft - ) +_DeleteAction( vtkAbstractWidget* wdg ) { - Self::AddPointAction( reinterpret_cast< vtkAbstractWidget* >( data ) ); + // 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$