1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
4 #include <cpExtensions/DataStructures/ImageIndexesContainer.h>
5 #include <fpa_Instances/Observers.h>
7 // -------------------------------------------------------------------------
8 template< class _TFilter >
9 _TFilter* fpaPlugins::BaseImageFilter::
12 typedef typename _TFilter::TInputImage _TImage;
13 static const unsigned int Dim = _TImage::ImageDimension;
15 cpExtensions::DataStructures::ImageIndexesContainer< Dim >
18 auto image = this->GetInputData( "Input" )->GetITK< _TImage >( );
21 auto indexes = this->GetInputData( "Seeds" )->GetITK< _TIndexes >( );
23 // Create filter and connect input
24 auto filter = this->_CreateITK< _TFilter >( );
25 filter->SetInput( image );
27 // Set numeric parameters
28 filter->SetNeighborhoodOrder(
29 this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
31 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
34 filter->ClearSeeds( );
37 auto iIt = indexes->Get( ).begin( );
38 for( ; iIt != indexes->Get( ).end( ); ++iIt )
39 filter->AddSeed( *iIt, 0 );
47 // -------------------------------------------------------------------------
48 template< class _TFilter >
49 void fpaPlugins::BaseImageFilter::
50 _ExecuteFilter( _TFilter* filter )
53 this->_ConfigureDebugger( filter );
55 this->_DeconfigureDebugger( filter );
58 auto out = this->GetOutputData( "Output" );
59 out->SetITK( filter->GetOutput( ) );
62 // -------------------------------------------------------------------------
63 template< class _TFilter >
64 void fpaPlugins::BaseImageFilter::
65 _ConfigureDebugger( _TFilter* filter )
67 typedef typename _TFilter::TInputImage _TImage;
68 typedef fpa::VTK::Image::Observer2D< _TFilter, vtkRenderWindow > _2D;
69 typedef fpa::VTK::Image::Observer3D< _TFilter, vtkRenderWindow > _3D;
71 this->m_Observers.clear( );
72 if( this->m_Parameters.GetBool( "VisualDebug" ) )
74 if( this->m_MPRViewer != NULL )
76 if( _TImage::ImageDimension == 2 )
78 auto iren = this->m_MPRViewer->GetInteractor( 2 );
81 typename _2D::Pointer debugger = _2D::New( );
82 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
83 debugger->SetRenderPercentage( 0.01 );
84 this->m_Observers.insert(
85 filter->AddObserver( itk::AnyEvent( ), debugger )
87 filter->ThrowEventsOn( );
91 else if( _TImage::ImageDimension == 3 )
93 auto iren = this->m_MPRViewer->GetInteractor( 3 );
96 typename _3D::Pointer debugger = _3D::New( );
97 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
98 debugger->SetRenderPercentage( 0.001 );
99 this->m_Observers.insert(
100 filter->AddObserver( itk::AnyEvent( ), debugger )
102 filter->ThrowEventsOn( );
110 if( this->m_SingleInteractor != NULL )
112 if( _TImage::ImageDimension == 2 )
115 else if( _TImage::ImageDimension == 3 )
124 // -------------------------------------------------------------------------
126 void fpaPlugins::BaseImageFilter::
127 _DeconfigureDebugger( F* filter )
131 auto oIt = this->m_Observers.begin( );
132 for( ; oIt != this->m_Observers.end( ); ++oIt )
133 filter->RemoveObserver( *oIt );
136 this->m_Observers.clear( );
139 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__