#include #include #include #include #include #include #include // ------------------------------------------------------------------------- cpExtensions::Interaction::SeedWidget:: Self* cpExtensions::Interaction::SeedWidget:: New( ) { return( new Self ); } // ------------------------------------------------------------------------- void cpExtensions::Interaction::SeedWidget:: SetInteractor( vtkRenderWindowInteractor* rwi ) { this->Superclass::SetInteractor( rwi ); 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( ) { // Remove default translations vtkWidgetEventTranslator* t = this->GetEventTranslator( ); t->RemoveTranslation( vtkCommand::LeftButtonPressEvent ); t->RemoveTranslation( vtkCommand::MiddleButtonPressEvent ); t->RemoveTranslation( vtkCommand::RightButtonPressEvent ); } // ------------------------------------------------------------------------- cpExtensions::Interaction::SeedWidget:: ~SeedWidget( ) { } // ------------------------------------------------------------------------- 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$