From: Leonardo Florez Date: Fri, 30 Sep 2016 01:21:52 +0000 (-0500) Subject: Seed widget cleaned. X-Git-Tag: v0.1~105 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=b71188d5c8dd7e3067c321367c237d2a559ad23c;p=cpPlugins.git Seed widget cleaned. --- diff --git a/lib/Instances/cpPlugins_ImageNeighborhoodIterators.i b/lib/Instances/cpPlugins_ImageNeighborhoodIterators.i index c2c8421..1b7bd35 100644 --- a/lib/Instances/cpPlugins_ImageNeighborhoodIterators.i +++ b/lib/Instances/cpPlugins_ImageNeighborhoodIterators.i @@ -20,6 +20,7 @@ t itkZeroFluxNeumannBoundaryCondition ** =============== c itk::Neighborhood< #pixels#*, #process_dims#, itk::NeighborhoodAllocator< #pixels#* > > +c itk::Neighborhood< #pixels#, #process_dims#, itk::NeighborhoodAllocator< #pixels# > > c itk::ZeroFluxNeumannBoundaryCondition< itk::Image< #pixels#, #process_dims# >, itk::Image< #pixels#, #process_dims# > > c itk::$ ;Const;Shaped;ConstShaped$NeighborhoodIterator< itk::Image< #pixels#, #process_dims# >, itk::ZeroFluxNeumannBoundaryCondition< itk::Image< #pixels#, #process_dims# >, itk::Image< #pixels#, #process_dims# > > > diff --git a/plugins/Widgets/SeedWidget.cxx b/plugins/Widgets/SeedWidget.cxx index 9aeb584..646c7b0 100644 --- a/plugins/Widgets/SeedWidget.cxx +++ b/plugins/Widgets/SeedWidget.cxx @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include @@ -14,56 +16,84 @@ // This callback is responsible for changing update time namespace cpPluginsWidgets { - /** - */ - /* TODO + /** + */ class SeedWidgetCallback - : public vtkCommand - { - public: - static SeedWidgetCallback* New( ) - { return( new SeedWidgetCallback ); } - virtual void Execute( vtkObject* caller, unsigned long id, void* data ) - { - typedef cpPluginsWidgets::SeedWidget::TImageActor _TImageActor; - auto actor = dynamic_cast< _TImageActor* >( caller ); - - if( id == vtkCommand::InteractionEvent && actor != NULL ) - { - int slice = actor->GetSliceNumber( ); - if( this->Data->ActualWidgetId != slice ) - { - this->Data->Widgets[ this->Data->ActualWidgetId ]->EnabledOff( ); - this->Data->Widgets[ slice ]->EnabledOn( ); - this->Data->ActualWidgetId = slice; - - } // fi - } - else if( - ( - id == vtkCommand::CursorChangedEvent || - id == vtkCommand::PlacePointEvent - ) && - this->Widget != NULL - ) - this->Widget->Modified( ); + : public vtkCommand + { + public: + static SeedWidgetCallback* New( ) + { return( new SeedWidgetCallback ); } + virtual void Execute( vtkObject* caller, unsigned long id, void* data ) + { + /* + typedef cpPluginsWidgets::SeedWidget::TImageActor _TImageActor; + auto actor = dynamic_cast< _TImageActor* >( caller ); +*/ +/* + if( id == vtkCommand::InteractionEvent && actor != NULL ) + { + int slice = actor->GetSliceNumber( ); + if( this->Data->ActualWidgetId != slice ) + { + this->Data->Widgets[ this->Data->ActualWidgetId ]->EnabledOff( ); + this->Data->Widgets[ slice ]->EnabledOn( ); + this->Data->ActualWidgetId = slice; + + } // fi + } + else +*/ + // id == vtkCommand::CursorChangedEvent || + if( id == vtkCommand::PlacePointEvent ) + { + auto wdg = dynamic_cast< cpExtensions::Interaction::SeedWidget* >( caller ); + if( wdg != NULL ) + { + auto rep = + dynamic_cast< vtkSeedRepresentation* >( + wdg->GetRepresentation( ) + ); + if( rep != NULL ) + { + unsigned long nSeeds = rep->GetNumberOfSeeds( ); + if( nSeeds > 0 ) + { + double pos[ 3 ]; + rep->GetSeedWorldPosition( nSeeds - 1, pos ); + + Seeds->GetPoints( )->InsertNextPoint( pos ); + Seeds->GetVerts( )->InsertNextCell( 1 ); + Seeds->GetVerts( )->InsertCellPoint( nSeeds - 1 ); + } + } // fi + + + } + } } - protected: - SeedWidgetCallback( ) - : vtkCommand( ), - Widget( NULL ), - Data( NULL ) - { } - virtual ~SeedWidgetCallback( ) { } - + protected: + SeedWidgetCallback( ) + : vtkCommand( ), + Seeds( NULL ) +/* + , + Widget( NULL ), + Data( NULL ) + */ + { } + virtual ~SeedWidgetCallback( ) { } public: - SeedWidget* Widget; - SeedWidget::TWidgetData* Data; - }; - */ + vtkPolyData* Seeds; + /* + public: + SeedWidget* Widget; + SeedWidget::TWidgetData* Data; + */ + }; -} // ecapseman + } // ecapseman // ------------------------------------------------------------------------- cpPluginsWidgets::SeedWidget:: @@ -96,7 +126,7 @@ cpPluginsWidgets::SeedWidget:: ~SeedWidget( ) { for( auto i = this->m_Data.begin( ); i != this->m_Data.end( ); ++i ) - delete w->second; + delete i->second; this->m_Data.clear( ); } @@ -104,6 +134,12 @@ cpPluginsWidgets::SeedWidget:: void cpPluginsWidgets::SeedWidget:: _GenerateData( ) { + auto image = this->GetInputData< vtkImageData >( "Input" ); + if( image != NULL ) + this->_GD0_Image( image ); + else + this->_Error( "Invalid input image." ); + // TODO: std::string init_value = this->m_Parameters.GetString( "Text" ); /* TODO @@ -200,10 +236,6 @@ _GenerateData( ) void cpPluginsWidgets::SeedWidget:: _Configure( ) { - auto o = this->GetInputData( "Input" ); - cpPlugins_Demangle_ImageVisualDims( o, _GD0_Image ); - else this->_Error( "Invalid input image." ); - /* TODO typedef cpPlugins::DataObjects::Image _TImage; @@ -252,23 +284,57 @@ _Configure( ) } // ------------------------------------------------------------------------- -template< class _TImage > void cpPluginsWidgets::SeedWidget:: -_GD0_Image( _TImage* image ) +_GD0_Image( vtkImageData* image ) { - std::cout << image << std::endl; - - /* TODO - for( auto p = this->m_Props.begin( ); p != this->m_Props.end( ); ++p ) - { - TWidgetData* d = - new TWidgetData( - this, dynamic_cast< TImageActor* >( p->first ), p->second - ); - this->m_Widgets.push_back( d ); + if( this->m_Data.size( ) == 0 ) + { + auto cb = vtkSmartPointer< SeedWidgetCallback >::New( ); + cb->Seeds = this->GetOutputData< vtkPolyData >( "Output" ); + this->m_Command = cb; + + for( + auto inIt = this->m_Interactors.begin( ); + inIt != this->m_Interactors.end( ); + ++inIt + ) + { + auto rends = ( *inIt )->GetRenderWindow( )->GetRenderers( ); + std::set< TImageActor* > all_props; + if( rends != NULL ) + { + rends->InitTraversal( ); + while( vtkRenderer* ren = rends->GetNextItem( ) ) + { + auto props = ren->GetViewProps( ); + props->InitTraversal( ); + while( vtkProp* p = props->GetNextProp( ) ) + { + auto image_actor = dynamic_cast< TImageActor* >( p ); + if( image_actor != NULL ) + { + if( image_actor->GetImage( ) == image ) + all_props.insert( image_actor ); + + } + + } // elihw + } // elihw + + } // fi + if( all_props.size( ) == 1 ) + { + this->m_Data[ *inIt ] = + new TWidgetData( this, *( all_props.begin( ) ), *inIt, this->m_Command ); + } + + } // rof +} +else +{ + // akjhdaksjhd +} - } // rof - */ } // ------------------------------------------------------------------------- @@ -276,9 +342,18 @@ cpPluginsWidgets::SeedWidget::TWidgetData:: TWidgetData( SeedWidget* seedWidget, TImageActor* actor, - vtkRenderWindowInteractor* iren + vtkRenderWindowInteractor* iren, + vtkCommand* cmd ) { + auto cb = dynamic_cast< SeedWidgetCallback* >( cmd ); +/* + auto cb = vtkSmartPointer< SeedWidgetCallback >::New( ); + cb->Widget = seedWidget; + cb->Data = this; + this->Command = cb; + actor->AddObserver( vtkCommand::InteractionEvent, cb ); +*/ /* TODO auto image = actor->GetImage( ); int ori = actor->GetOrientation( ); @@ -298,11 +373,12 @@ TWidgetData( this->Representation->SetHandleRepresentation( this->Handle ); this->Widget->SetRepresentation( this->Representation ); this->Widget->SetInteractor( iren ); - /* TODO - this->Widget->AddObserver( vtkCommand::PlacePointEvent, cb ); - this->Widget->AddObserver( vtkCommand::CursorChangedEvent, cb ); - */ - this->Widget->EnabledOff( ); + if( cb != NULL ) + { + this->Widget->AddObserver( vtkCommand::PlacePointEvent, cb ); + this->Widget->AddObserver( vtkCommand::CursorChangedEvent, cb ); + } + this->Widget->EnabledOn( ); /* TODO this->Widgets.push_back( wdg ); diff --git a/plugins/Widgets/SeedWidget.h b/plugins/Widgets/SeedWidget.h index 663d539..94101de 100644 --- a/plugins/Widgets/SeedWidget.h +++ b/plugins/Widgets/SeedWidget.h @@ -61,7 +61,8 @@ namespace cpPluginsWidgets TWidgetData( SeedWidget* seedWidget, TImageActor* actor, - vtkRenderWindowInteractor* iren + vtkRenderWindowInteractor* iren, + vtkCommand* cmd ); virtual ~TWidgetData( ); }; @@ -69,11 +70,11 @@ namespace cpPluginsWidgets protected: void _Configure( ); - template< class _TImage > - inline void _GD0_Image( _TImage* image ); + inline void _GD0_Image( vtkImageData* image ); protected: std::map< vtkRenderWindowInteractor*, TWidgetData* > m_Data; + vtkSmartPointer< vtkCommand > m_Command; /* TODO std::map< vtkProp*, vtkRenderWindowInteractor* > m_Props;