X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FVTK%2FImageMPR.cxx;h=8484a03cad504b948687ca9e6d4b5d610d8e241a;hb=b63dc485b7255d1ab70ff72096beafe13a71f1be;hp=d435bb8e515baa3449f60b51c818785c7d0ebb00;hpb=9622bd5b833a8845881003228207e0caca59b081;p=FrontAlgorithms.git diff --git a/lib/fpa/VTK/ImageMPR.cxx b/lib/fpa/VTK/ImageMPR.cxx index d435bb8..8484a03 100644 --- a/lib/fpa/VTK/ImageMPR.cxx +++ b/lib/fpa/VTK/ImageMPR.cxx @@ -1,13 +1,81 @@ #include +#include #include +#include + +/** + */ +class fpa_VTK_InteractionModeCallback + : public vtkCommand +{ +public: + static fpa_VTK_InteractionModeCallback* New( ) + { + return( new fpa_VTK_InteractionModeCallback ); + } + virtual void Execute( + vtkObject* caller, unsigned long eventId, void* arguments ) + { + if( eventId == vtkCommand::KeyPressEvent ) + { + vtkRenderWindowInteractor* iren = + static_cast< vtkRenderWindowInteractor* >( caller ); + if( caller == NULL ) + return; + + switch( iren->GetKeyCode( ) ) + { + case 'x': + case 'X': + { + 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; + case 'z': + case 'Z': + { + this->SeedWidget->ProcessEventsOff( ); + this->WidgetX->InteractionOff( ); + this->WidgetY->InteractionOff( ); + this->WidgetZ->InteractionOff( ); + } + break; + default: + break; + + } // hctiws + + } // fi + } + +public: + vtkImagePlaneWidget* WidgetX; + vtkImagePlaneWidget* WidgetY; + vtkImagePlaneWidget* WidgetZ; + vtkSeedWidget* SeedWidget; +}; + // ------------------------------------------------------------------------- fpa::VTK::ImageMPR:: ImageMPR( ) { - // vtkSmartPointer< vtkImageData > m_Image; - this->m_Outline = vtkSmartPointer< vtkOutlineSource >::New( ); this->m_OutlineMapper = vtkSmartPointer< vtkPolyDataMapper >::New( ); this->m_OutlineActor = vtkSmartPointer< vtkActor >::New( ); @@ -18,8 +86,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(); + + 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( ); + 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( ) @@ -97,6 +193,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 ); + this->m_SeedWidget->SetInteractor( this->m_Interactor ); + + this->m_WidgetX->On( ); + this->m_WidgetY->On( ); + this->m_WidgetZ->On( ); + 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( ); + */ } // ------------------------------------------------------------------------- @@ -115,7 +223,23 @@ SetSize( unsigned int w, unsigned int h ) // ------------------------------------------------------------------------- void fpa::VTK::ImageMPR:: -AddPolyData( vtkPolyData* pd, double r, double g, double b ) +AddPolyData( vtkPolyData* pd, double opacity ) +{ + unsigned int i = this->m_PolyDatas.size( ); + + this->m_PolyDatas.push_back( pd ); + this->m_Mappers.push_back( vtkSmartPointer< vtkPolyDataMapper >::New( ) ); + this->m_Actors.push_back( vtkSmartPointer< vtkActor >::New( ) ); + + this->m_Mappers[ i ]->SetInputData( pd ); + this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] ); + this->m_Actors[ i ]->GetProperty( )->SetOpacity( opacity ); + this->m_Renderer->AddActor( this->m_Actors[ i ] ); +} + +// ------------------------------------------------------------------------- +void fpa::VTK::ImageMPR:: +AddPolyData( vtkPolyData* pd, double r, double g, double b, double opacity ) { unsigned int i = this->m_PolyDatas.size( ); @@ -124,11 +248,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 @@ -156,4 +303,11 @@ Start( ) this->m_Interactor->Start( ); } +// ------------------------------------------------------------------------- +void fpa::VTK::ImageMPR:: +Render( ) +{ + this->m_Window->Render( ); +} + // eof - $RCSfile$