]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Interaction/SeedWidget.cxx
Code cleaning
[cpPlugins.git] / lib / cpExtensions / Interaction / SeedWidget.cxx
1 #include <cpExtensions/Interaction/SeedWidget.h>
2
3 #include <vtkCallbackCommand.h>
4 #include <vtkCommand.h>
5 #include <vtkRenderWindowInteractor.h>
6 #include <vtkSeedRepresentation.h>
7 #include <vtkWidgetEventTranslator.h>
8 #include <vtkWidgetRepresentation.h>
9
10 // -------------------------------------------------------------------------
11 cpExtensions::Interaction::SeedWidget::
12 Self* cpExtensions::Interaction::SeedWidget::
13 New( )
14 {
15   return( new Self );
16 }
17
18 // -------------------------------------------------------------------------
19 void cpExtensions::Interaction::SeedWidget::
20 SetInteractor( vtkRenderWindowInteractor* rwi )
21 {
22   this->Superclass::SetInteractor( rwi );
23   if( rwi != NULL )
24   {
25     TBaseStyle* s =
26       dynamic_cast< TBaseStyle* >( rwi->GetInteractorStyle( ) );
27     if( s != NULL )
28     {
29       s->AddMouseClickCommand( Self::_Click, this );
30       s->AddMouseDoubleClickCommand( Self::_DoubleClick, this );
31
32     } // fi
33
34   } // fi
35 }
36
37 // -------------------------------------------------------------------------
38 cpExtensions::Interaction::SeedWidget::
39 SeedWidget( )
40   : Superclass( )
41 {
42   // Remove default translations
43   vtkWidgetEventTranslator* t = this->GetEventTranslator( );
44   t->RemoveTranslation( vtkCommand::LeftButtonPressEvent );
45   t->RemoveTranslation( vtkCommand::MiddleButtonPressEvent );
46   t->RemoveTranslation( vtkCommand::RightButtonPressEvent );
47 }
48
49 // -------------------------------------------------------------------------
50 cpExtensions::Interaction::SeedWidget::
51 ~SeedWidget( )
52 {
53 }
54
55 // -------------------------------------------------------------------------
56 void cpExtensions::Interaction::SeedWidget::
57 _Click(
58   void* data, const TBaseStyle::ButtonID& button,
59   int* idx, double* pos, bool alt, bool ctr, bool sft
60   )
61 {
62   SeedWidget* self = reinterpret_cast< SeedWidget* >( data );
63   if( self == NULL )
64     return;
65   if( self->WidgetState == vtkSeedWidget::MovingSeed )
66     return;
67
68   int st = self->WidgetRep->ComputeInteractionState( idx[ 0 ], idx[ 1 ] );
69   if( st == vtkSeedRepresentation::NearSeed )
70   {
71     self->WidgetState = vtkSeedWidget::MovingSeed;
72
73     // Invoke an event on ourself for the handles
74     self->InvokeEvent( vtkCommand::LeftButtonPressEvent, NULL );
75     self->Superclass::StartInteraction( );
76     self->InvokeEvent( vtkCommand::StartInteractionEvent, NULL );
77     self->EventCallbackCommand->SetAbortFlag( 1 );
78     self->Render( );
79
80   } // fi
81 }
82
83 // -------------------------------------------------------------------------
84 void cpExtensions::Interaction::SeedWidget::
85 _DoubleClick(
86   void* data, const TBaseStyle::ButtonID& button,
87   int* idx, double* pos, bool alt, bool ctr, bool sft
88   )
89 {
90   Self::AddPointAction( reinterpret_cast< vtkAbstractWidget* >( data ) );
91 }
92
93 // eof - $RCSfile$