1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
4 #include <vtkPolyData.h>
7 #include <fpa/VTK/Image/Observer2D.h>
8 #include <fpa/VTK/Image/Observer2D.hxx>
10 #include <fpa/VTK/Image/Observer3D.h>
11 #include <fpa/VTK/Image/Observer3D.hxx>
13 // -------------------------------------------------------------------------
14 template< class _TFilter >
15 _TFilter* fpaPlugins::BaseImageFilter::
18 typedef typename _TFilter::TInputImage _TImage;
19 static const unsigned int Dim = _TImage::ImageDimension;
21 auto image = this->GetInputData< _TImage >( "Input" );
24 auto seeds = this->GetInputData< vtkPolyData >( "Seeds" )->GetPoints( );
26 // Create filter and connect input
27 auto filter = this->_CreateITK< _TFilter >( );
28 filter->SetInput( image );
30 // Set numeric parameters
31 filter->SetNeighborhoodOrder(
32 this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
34 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
37 filter->RemoveAllSeeds( );
40 typename _TImage::PointType pnt;
41 typename _TImage::IndexType idx;
43 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
44 for( unsigned int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
47 seeds->GetPoint( i, buf );
49 for( unsigned int d = 0; d < dim; ++d )
52 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
53 filter->AddSeed( idx, 0 );
63 // -------------------------------------------------------------------------
64 template< class _TFilter >
65 void fpaPlugins::BaseImageFilter::
66 _ExecuteFilter( _TFilter* filter )
69 this->_ConfigureDebugger( filter );
71 this->_DeconfigureDebugger( filter );
74 this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
77 // -------------------------------------------------------------------------
78 template< class _TFilter >
79 void fpaPlugins::BaseImageFilter::
80 _ConfigureDebugger( _TFilter* filter )
82 typedef typename _TFilter::TInputImage _TImage;
83 typedef fpa::VTK::Image::Observer3D< _TFilter, vtkRenderWindow > _3D;
86 typedef fpa::VTK::Image::Observer2D< _TFilter, vtkRenderWindow > _2D;
89 this->m_Observers.clear( );
90 if( this->m_Parameters.GetBool( "VisualDebug" ) )
92 if( _TImage::ImageDimension == 2 )
95 else if( _TImage::ImageDimension == 3 )
98 auto iren = this->m_MPRViewer->GetInteractor( 3 );
101 typename _3D::Pointer debugger = _3D::New( );
102 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
103 debugger->SetRenderPercentage( 0.001 );
104 this->m_Observers.insert(
105 filter->AddObserver( itk::AnyEvent( ), debugger )
107 filter->ThrowEventsOn( );
115 if( this->m_SingleInteractor != NULL )
117 if( _TImage::ImageDimension == 2 )
120 else if( _TImage::ImageDimension == 3 )
130 // -------------------------------------------------------------------------
132 void fpaPlugins::BaseImageFilter::
133 _DeconfigureDebugger( F* filter )
138 auto oIt = this->m_Observers.begin( );
139 for( ; oIt != this->m_Observers.end( ); ++oIt )
140 filter->RemoveObserver( *oIt );
143 this->m_Observers.clear( );
147 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__