X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FVTK%2FImageMPR.cxx;h=30033958d05e4cf6f3ac6c67d5704720a1fd42f2;hb=58beec8ea1d7265ffa6a8842f6a56fc3c0706524;hp=b990900f17ef4a4cbfa04fc3347b8463745c53d2;hpb=22051707794a9153acbfc489ec9a933471f13406;p=FrontAlgorithms.git diff --git a/lib/fpa/VTK/ImageMPR.cxx b/lib/fpa/VTK/ImageMPR.cxx index b990900..3003395 100644 --- a/lib/fpa/VTK/ImageMPR.cxx +++ b/lib/fpa/VTK/ImageMPR.cxx @@ -2,58 +2,65 @@ #include #include -#include -class vtkUpdateCallback +#include + +/** + */ +class fpa_VTK_InteractionModeCallback : public vtkCommand { public: - static vtkUpdateCallback *New() + static fpa_VTK_InteractionModeCallback* New( ) { - return new vtkUpdateCallback; + return( new fpa_VTK_InteractionModeCallback ); } - virtual void Execute(vtkObject *caller, unsigned long eventId, void* - arguments) + virtual void Execute( + vtkObject* caller, unsigned long eventId, void* arguments ) { - vtkRenderWindowInteractor* iren = - static_cast< vtkRenderWindowInteractor* >( caller ); - if( caller == NULL ) - return; - - switch( iren->GetKeyCode( ) ) + if( eventId == vtkCommand::KeyPressEvent ) { - case 'x': - case 'X': - { - bool eSeed = ( this->SeedWidget->GetProcessEvents( ) == 1 ); - if( eSeed ) + vtkRenderWindowInteractor* iren = + static_cast< vtkRenderWindowInteractor* >( caller ); + if( caller == NULL ) + return; + + switch( iren->GetKeyCode( ) ) { - this->SeedWidget->ProcessEventsOff( ); - this->WidgetX->InteractionOn( ); - this->WidgetY->InteractionOn( ); - this->WidgetZ->InteractionOn( ); - } - else + case 'x': + case 'X': { - this->SeedWidget->ProcessEventsOn( ); - this->WidgetX->InteractionOff( ); - this->WidgetY->InteractionOff( ); - this->WidgetZ->InteractionOff( ); - - } // fi - } - break; - default: + 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; + default: + break; + + } // hctiws - } // hctiws + } // fi } public: vtkImagePlaneWidget* WidgetX; vtkImagePlaneWidget* WidgetY; vtkImagePlaneWidget* WidgetZ; - vtkSeedWidget2* SeedWidget; + vtkSeedWidget* SeedWidget; }; // ------------------------------------------------------------------------- @@ -70,40 +77,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::New(); - - - - - - handlePointRep3D = - vtkSmartPointer::New(); - //handlePointRep3D->AllOn(); - handlePointRep3D->GetProperty()->SetColor(1.,0.,1.); - seedRep = - vtkSmartPointer::New(); - seedRep->SetHandleRepresentation(handlePointRep3D); - seedWidget = vtkSmartPointer::New(); - - seedWidget->SetRepresentation(seedRep); + 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( ); - seedWidget->KeyPressActivationOff( ); - - // this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker ); - - - vtkUpdateCallback* onUpdate = vtkUpdateCallback::New(); - onUpdate->WidgetX = this->m_WidgetX; - onUpdate->WidgetY = this->m_WidgetY; - onUpdate->WidgetZ = this->m_WidgetZ; - onUpdate->SeedWidget = this->seedWidget; - - this->m_Interactor->AddObserver(vtkCommand::KeyPressEvent, onUpdate); + 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( ) @@ -181,16 +184,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 ); - seedWidget->SetInteractor(this->m_Interactor); + this->m_SeedWidget->SetInteractor( this->m_Interactor ); this->m_WidgetX->On( ); this->m_WidgetY->On( ); this->m_WidgetZ->On( ); - seedWidget->On( ); - seedWidget->ProcessEventsOff( ); + 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( ); + /* + this->m_Interactor->GetPickingManager( )->AddPicker( this->m_Picker ); + this->m_Interactor->GetPickingManager( )->EnabledOn( ); + */ } // ------------------------------------------------------------------------- @@ -209,7 +214,7 @@ SetSize( unsigned int w, unsigned int h ) // ------------------------------------------------------------------------- void fpa::VTK::ImageMPR:: -AddPolyData( vtkPolyData* pd, double r, double g, double b ) +AddPolyData( vtkPolyData* pd, double r, double g, double b, double opacity ) { unsigned int i = this->m_PolyDatas.size( ); @@ -218,11 +223,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