1 #ifndef __fpaPluginsImageAlgorithms__BaseFilter__h__
2 #define __fpaPluginsImageAlgorithms__BaseFilter__h__
4 #include <fpaPluginsImageAlgorithms_Export.h>
6 #include <vtkPolyData.h>
7 #include <cpPlugins/Pipeline/ProcessObject.h>
9 #define ITK_MANUAL_INSTANTIATION
10 #include <fpa/Image/Functors/SimpleNeighborhood.h>
12 namespace fpaPluginsImageAlgorithms
16 class fpaPluginsImageAlgorithms_EXPORT BaseFilter
17 : public cpPlugins::Pipeline::ProcessObject
20 typedef BaseFilter Self;
21 typedef cpPlugins::Pipeline::ProcessObject Superclass;
22 typedef itk::SmartPointer< Self > Pointer;
23 typedef itk::SmartPointer< const Self > ConstPointer;
26 itkTypeMacro( BaseFilter, cpPlugins::Pipeline::ProcessObject );
27 cpPlugins_Id_Macro( BaseFilter, fpaImageAlgorithm );
31 virtual ~BaseFilter( );
33 template< class _TFilter, class _TImage >
34 inline void _ConfigureFilter(
35 _TFilter* filter, _TImage* image,
36 std::vector< typename _TImage::IndexType >& seeds
40 // Purposely not implemented.
41 BaseFilter( const Self& other );
42 Self& operator=( const Self& other );
47 // -------------------------------------------------------------------------
48 template< class _TFilter, class _TImage >
49 void fpaPluginsImageAlgorithms::BaseFilter::
51 _TFilter* filter, _TImage* image,
52 std::vector< typename _TImage::IndexType >& seeds
55 typedef typename _TFilter::TNeighborhoodFunction _TNeighborhood;
57 fpa::Image::Functors::SimpleNeighborhood< _TImage::ImageDimension >
60 // Simple configuration
61 filter->SetInput( image );
62 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
64 // Neighborhood function
65 typename _TSimpleNeigh::Pointer sfunc = _TSimpleNeigh::New( );
66 sfunc->SetOrder( this->m_Parameters.GetUint( "NeighborhoodOrder" ) );
67 filter->SetNeighborhoodFunction( sfunc );
71 auto pnt_seeds = this->GetInputData< vtkPolyData >( "Seeds" );
72 if( pnt_seeds != NULL )
74 typename _TImage::PointType pnt;
75 typename _TImage::IndexType idx;
77 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
79 for( int i = 0; i < pnt_seeds->GetNumberOfPoints( ); ++i )
82 pnt_seeds->GetPoint( i, buf );
84 for( unsigned int d = 0; d < dim; ++d )
87 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
88 seeds.push_back( idx );
95 #endif // __fpaPluginsImageAlgorithms__BaseFilter__h__