X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=plugins%2FVTKWidgets%2FSeedWidget.cxx;fp=plugins%2FVTKWidgets%2FSeedWidget.cxx;h=0000000000000000000000000000000000000000;hb=2e142df11d6f312a2a2b5097b8da73571ed523e8;hp=d0db73eaa6f8b14837cb91494fe4a22271cf6ca6;hpb=61b3659afe961ed248f30e26f9ca8f28fcfafddc;p=cpPlugins.git diff --git a/plugins/VTKWidgets/SeedWidget.cxx b/plugins/VTKWidgets/SeedWidget.cxx deleted file mode 100644 index d0db73e..0000000 --- a/plugins/VTKWidgets/SeedWidget.cxx +++ /dev/null @@ -1,380 +0,0 @@ -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -// ------------------------------------------------------------------------- -void cpPluginsVTKWidgets::SeedWidget:: -Clear( ) -{ -} - -// ------------------------------------------------------------------------- -void cpPluginsVTKWidgets::SeedWidget:: -SetEnabled( bool v ) -{ - for( auto w = this->m_Widgets.begin( ); w != this->m_Widgets.end( ); ++w ) - { - if( v ) w->second->RestartInteraction( ); - else w->second->CompleteInteraction( ); - w->second->SetEnabled( v ); - w->second->Render( ); - - } // rof -} - -// ------------------------------------------------------------------------- -bool cpPluginsVTKWidgets::SeedWidget:: -GetEnabled( ) const -{ - if( this->m_Widgets.size( ) > 0 ) - { - auto i = this->m_Widgets.begin( ); - TWidget* w = const_cast< TWidget* >( i->second.GetPointer( ) ); - return( w->GetEnabled( ) != 0 ); - } - else - return( false ); -} - -// ------------------------------------------------------------------------- -cpPluginsVTKWidgets::SeedWidget:: -SeedWidget( ) - : Superclass( ) -{ - typedef cpPlugins::Pipeline::DataObject _TData; - typedef cpInstances::DataObjects::Mesh _TMesh; - - // Create ports - this->_ConfigureInput< _TData >( "Input", false, false ); - this->_ConfigureOutput< _TMesh >( "Output" ); - - // Create output data - auto out = this->_CreateVTK< vtkPolyData >( ); - out->SetPoints( vtkSmartPointer< vtkPoints >::New( ) ); - out->SetVerts( vtkSmartPointer< vtkCellArray >::New( ) ); - out->SetLines( vtkSmartPointer< vtkCellArray >::New( ) ); - out->SetPolys( vtkSmartPointer< vtkCellArray >::New( ) ); - out->SetStrips( vtkSmartPointer< vtkCellArray >::New( ) ); - this->GetOutput( "Output" )->SetVTK( out ); -} - -// ------------------------------------------------------------------------- -cpPluginsVTKWidgets::SeedWidget:: -~SeedWidget( ) -{ - /* TODO - for( auto w = this->m_Widgets.begin( ); w != this->m_Widgets.end( ); ++w ) - w->second->EnabledOff( ); - this->m_Widgets.clear( ); - */ -} - -// ------------------------------------------------------------------------- -void cpPluginsVTKWidgets::SeedWidget:: -_GenerateData( ) -{ - auto image = this->GetInputData< vtkImageData >( "Input" ); - if( image != NULL ) - this->_GD0_Image( image ); - else - this->_Error( "Invalid input image." ); -} - -// ------------------------------------------------------------------------- -void cpPluginsVTKWidgets::SeedWidget:: -_GD0_Image( vtkImageData* image ) -{ - auto seeds = this->GetOutputData< vtkPolyData >( "Output" ); - if( this->m_Widgets.size( ) == 0 ) - { - this->m_Command = vtkSmartPointer< TCallback >::New( ); - this->m_Command->SetSeeds( seeds ); - 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 ); - - } // fi - - } // elihw - - } // elihw - - } // fi - if( all_props.size( ) == 1 ) - { - if( this->m_Widgets.find( *inIt ) == this->m_Widgets.end( ) ) - { - auto act = *( all_props.begin( ) ); - auto pla = vtkSmartPointer< TPlacer >::New( ); - auto hnd = vtkSmartPointer< THandleRep >::New( ); - auto rep = vtkSmartPointer< TSeedRep >::New( ); - auto wdg = vtkSmartPointer< TWidget >::New( ); - - pla->SetImageSlice( act ); - hnd->GetProperty( )->SetColor( 1, 0, 0 ); - hnd->SetPointPlacer( pla ); - rep->SetHandleRepresentation( hnd ); - wdg->SetRepresentation( rep ); - wdg->SetInteractor( *inIt ); - act->AddObserver( vtkCommand::InteractionEvent, this->m_Command ); - wdg->AddObserver( vtkCommand::PlacePointEvent, this->m_Command ); - wdg->AddObserver( vtkCommand::CursorChangedEvent, this->m_Command ); - this->m_Widgets[ *inIt ] = wdg; - - } // fi - - } // fi - - } // rof - - // Associate input text - std::string text = this->m_Parameters.GetString( "Text" ); - std::vector< std::string > tok1, tok2; - tok1 = cpPlugins::OS::String::Tokenize( text, "#" ); - if( tok1.size( ) > seeds->GetPoints( )->GetNumberOfPoints( ) ) - { - for( auto t1 = tok1.begin( ); t1 != tok1.end( ); ++t1 ) - { - if( *t1 != "" ) - { - tok2 = cpPlugins::OS::String::Tokenize( *t1, " " ); - double x[ 3 ]; - for( unsigned int d = 0; d < 3; ++d ) - { - if( d < tok2.size( ) ) - { - std::istringstream str( tok2[ d ] ); - str >> x[ d ]; - } - else - x[ d ] = double( 0 ); - - } // rof - - seeds->GetPoints( )->InsertNextPoint( x ); - seeds->GetVerts( )->InsertNextCell( 1 ); - seeds->GetVerts( )->InsertCellPoint( - seeds->GetPoints( )->GetNumberOfPoints( ) - 1 - ); - seeds->Modified( ); - - } // fi - - } // rof - - } // fi - } - else - { - double x[ 3 ]; - std::stringstream text; - for( long i = 0; i < seeds->GetNumberOfPoints( ); ++i ) - { - seeds->GetPoint( i, x ); - text << x[ 0 ] << " " << x[ 1 ] << " " << x[ 2 ] << "#"; - - } // rof - this->m_Parameters.SetString( "Text", text.str( ) ); - - } // fi -} - -// ------------------------------------------------------------------------- -cpPluginsVTKWidgets::SeedWidget::TCallback* -cpPluginsVTKWidgets::SeedWidget::TCallback:: -New( ) -{ - return( new TCallback ); -} - -// ------------------------------------------------------------------------- -void cpPluginsVTKWidgets::SeedWidget::TCallback:: -Execute( vtkObject* caller, unsigned long id, void* data ) -{ - static const double EPS = 1e-5; - auto src_act = dynamic_cast< TImageActor* >( caller ); - auto src_wdg = dynamic_cast< TWidget* >( caller ); - - if( id == vtkCommand::InteractionEvent && src_act != NULL ) - { - TWidget* widget = NULL; - TSeedRep* seed_rep = NULL; - - auto w = this->m_Widgets.begin( ); - while( w != this->m_Widgets.end( ) && widget == NULL ) - { - auto rep = - dynamic_cast< vtkSeedRepresentation* >( - ( *w )->GetRepresentation( ) - ); - if( rep != NULL ) - { - auto hnd = rep->GetHandleRepresentation( ); - if( hnd != NULL ) - { - auto pla = - dynamic_cast< SeedWidget::TPlacer* >( - hnd->GetPointPlacer( ) - ); - if( pla != NULL ) - { - auto act = pla->GetImageSlice( ); - if( act == src_act ) - { - widget = *w; - seed_rep = rep; - - } // fi - - } // fi - - } // fi - - } // fi - w++; - - } // elihw - - if( widget != NULL ) - { - // Cut through given seeds - auto plane = src_act->GetSlicePlane( ); - double x[ 3 ]; - std::vector< long > ids; - for( long i = 0; i < this->m_Seeds->GetNumberOfPoints( ); ++i ) - { - this->m_Seeds->GetPoint( i, x ); - double d = plane->DistanceToPlane( x ); - if( d <= EPS ) - ids.push_back( i ); - - } // rof - - // Erase seeds - widget->CompleteInteraction( ); - widget->EnabledOff( ); - int nSeeds = seed_rep->GetNumberOfSeeds (); - for( int i = 0; i < nSeeds; ++i ) - { - seed_rep->RemoveLastHandle( ); - widget->DeleteSeed( seed_rep->GetNumberOfSeeds( ) ); - - } // rof - - if( ids.size( ) > 0 ) - { - auto ren = widget->GetInteractor( )->FindPokedRenderer( - widget->GetInteractor( )->GetEventPosition( )[ 0 ], - widget->GetInteractor( )->GetEventPosition( )[ 1 ] - ); - - // Add seeds - seed_rep->BuildRepresentation( ); - for( auto id = ids.begin( ); id != ids.end( ); ++id ) - { - this->m_Seeds->GetPoint( *id, x ); - widget->ComputeWorldToDisplay( - ren, x[ 0 ], x[ 1 ], x[ 2 ], x - ); - x[ 2 ] = double( 0 ); - int s = seed_rep->CreateHandle( x ); - vtkHandleWidget* curr_hnd = widget->CreateNewHandle( ); - seed_rep->SetSeedDisplayPosition( s, x ); - curr_hnd->SetEnabled( 1 ); - - } // rof - - } // fi - - // Reactivate widget - widget->RestartInteraction( ); - widget->EnabledOn( ); - widget->Render( ); - - } // fi - } - else if( id == vtkCommand::PlacePointEvent && src_wdg != NULL ) - { - this->m_Widgets.insert( src_wdg ); - auto rep = - dynamic_cast< vtkSeedRepresentation* >( - src_wdg->GetRepresentation( ) - ); - if( rep != NULL ) - { - unsigned long nSeeds = rep->GetNumberOfSeeds( ); - if( nSeeds > 0 ) - { - double pos[ 3 ]; - rep->GetSeedWorldPosition( nSeeds - 1, pos ); - - this->m_Seeds->GetPoints( )->InsertNextPoint( pos ); - this->m_Seeds->GetVerts( )->InsertNextCell( 1 ); - this->m_Seeds->GetVerts( )->InsertCellPoint( - this->m_Seeds->GetPoints( )->GetNumberOfPoints( ) - 1 - ); - this->m_Seeds->Modified( ); - - } // fi - - } // fi - - } // fi -} - -// ------------------------------------------------------------------------- -void cpPluginsVTKWidgets::SeedWidget::TCallback:: -SetSeeds( vtkPolyData* seeds ) -{ - this->m_Seeds = seeds; -} - -// ------------------------------------------------------------------------- -cpPluginsVTKWidgets::SeedWidget::TCallback:: -TCallback( ) - : vtkCommand( ), - m_Seeds( NULL ) -{ -} - -// ------------------------------------------------------------------------- -cpPluginsVTKWidgets::SeedWidget::TCallback:: -~TCallback( ) -{ -} - -// eof - $RCSfile$