1 #ifndef __fpaPluginsImageAlgorithms__BaseFilter__h__
2 #define __fpaPluginsImageAlgorithms__BaseFilter__h__
4 #include <fpaPluginsImageAlgorithms_Export.h>
5 #include <cpPlugins/Pipeline/ProcessObject.h>
6 #include <vtkPolyData.h>
7 #include <fpa/Image/Functors/SimpleNeighborhood.h>
9 namespace fpaPluginsImageAlgorithms
13 class fpaPluginsImageAlgorithms_EXPORT BaseFilter
14 : public cpPlugins::Pipeline::ProcessObject
17 typedef BaseFilter Self;
18 typedef cpPlugins::Pipeline::ProcessObject Superclass;
19 typedef itk::SmartPointer< Self > Pointer;
20 typedef itk::SmartPointer< const Self > ConstPointer;
23 itkTypeMacro( BaseFilter, cpPlugins::Pipeline::ProcessObject );
24 cpPlugins_Id_Macro( BaseFilter, fpaImageAlgorithm );
28 virtual ~BaseFilter( );
30 template< class _TFilter, class _TImage >
31 inline void _ConfigureFilter( _TFilter* filter, _TImage* image );
35 template< class _TFilter >
36 inline void _ExecuteFilter( _TFilter* filter );
38 template< class _TFilter >
39 inline void _ConfigureDebugger( _TFilter* filter );
41 template< class _TFilter >
42 inline void _DeconfigureDebugger( _TFilter* filter );
46 // Purposely not implemented.
47 BaseFilter( const Self& other );
48 Self& operator=( const Self& other );
53 // -------------------------------------------------------------------------
54 template< class _TFilter, class _TImage >
55 void fpaPluginsImageAlgorithms::BaseFilter::
56 _ConfigureFilter( _TFilter* filter, _TImage* image )
58 typedef typename _TFilter::TNeighborhoodFunction _TNeighborhood;
60 fpa::Image::Functors::SimpleNeighborhood< typename _TImage::Superclass >
63 // Simple configuration
64 filter->SetInput( image );
65 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
67 // Neighborhood function
68 auto neig = this->GetInputData< _TNeighborhood >( "Neighborhood" );
71 typename _TSimpleNeigh::Pointer sfunc = _TSimpleNeigh::New( );
72 sfunc->SetOrder( this->m_Parameters.GetUint( "NeighborhoodOrder" ) );
73 filter->SetNeighborhoodFunction( sfunc );
76 filter->SetNeighborhoodFunction( neig );
79 auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
82 typename _TImage::PointType pnt;
83 typename _TImage::IndexType idx;
85 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
87 for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
90 seeds->GetPoint( i, buf );
92 for( unsigned int d = 0; d < dim; ++d )
95 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
96 filter->AddSeed( idx, 0 );
103 #endif // __fpaPluginsImageAlgorithms__BaseFilter__h__