]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/ImageAlgorithms/BaseFilter.h
...
[FrontAlgorithms.git] / plugins / ImageAlgorithms / BaseFilter.h
index 9808e46225099bc1a09435305c3696b2a273385e..b03abaae0a03ab3fb01f67f286ca04affc23a62e 100644 (file)
@@ -1,26 +1,26 @@
-#ifndef __fpaPluginsImageAlgorithms__BaseFilter__h__
-#define __fpaPluginsImageAlgorithms__BaseFilter__h__
+#ifndef __fpaPlugins_ImageAlgorithms__BaseFilter__h__
+#define __fpaPlugins_ImageAlgorithms__BaseFilter__h__
+
+#include <fpaPlugins_ImageAlgorithms_Export.h>
 
-#include <fpaPluginsImageAlgorithms_Export.h>
-#include <cpPlugins/BaseObjects/ProcessObject.h>
 #include <vtkPolyData.h>
-#include <fpa/Image/Functors/SimpleNeighborhood.h>
+#include <cpPlugins/Pipeline/ProcessObject.h>
 
-namespace fpaPluginsImageAlgorithms
+namespace fpaPlugins_ImageAlgorithms
 {
   /**
    */
-  class fpaPluginsImageAlgorithms_EXPORT BaseFilter
-    : public cpPlugins::BaseObjects::ProcessObject
+  class fpaPlugins_ImageAlgorithms_EXPORT BaseFilter
+    : public cpPlugins::Pipeline::ProcessObject
   {
   public:
-    typedef BaseFilter                            Self;
-    typedef cpPlugins::BaseObjects::ProcessObject Superclass;
-    typedef itk::SmartPointer< Self >             Pointer;
-    typedef itk::SmartPointer< const Self >       ConstPointer;
+    typedef BaseFilter                         Self;
+    typedef cpPlugins::Pipeline::ProcessObject Superclass;
+    typedef itk::SmartPointer< Self >          Pointer;
+    typedef itk::SmartPointer< const Self >    ConstPointer;
 
   public:
-    itkTypeMacro( BaseFilter, cpPlugins::BaseObjects::ProcessObject );
+    itkTypeMacro( BaseFilter, cpPlugins::Pipeline::ProcessObject );
     cpPlugins_Id_Macro( BaseFilter, fpaImageAlgorithm );
 
   protected:
@@ -28,19 +28,10 @@ namespace fpaPluginsImageAlgorithms
     virtual ~BaseFilter( );
 
     template< class _TFilter, class _TImage >
-    inline void _ConfigureFilter( _TFilter* filter, _TImage* image );
-
-    /* TODO
-
-       template< class _TFilter >
-       inline void _ExecuteFilter( _TFilter* filter );
-
-       template< class _TFilter >
-       inline void _ConfigureDebugger( _TFilter* filter );
-
-       template< class _TFilter >
-       inline void _DeconfigureDebugger( _TFilter* filter );
-    */
+    inline void _ConfigureFilter(
+      _TFilter* filter, _TImage* image,
+      std::vector< typename _TImage::IndexType >& seeds
+      );
 
   private:
     // Purposely not implemented.
@@ -50,14 +41,21 @@ namespace fpaPluginsImageAlgorithms
 
 } // ecapseman
 
+// -------------------------------------------------------------------------
+#define ITK_MANUAL_INSTANTIATION
+#include <fpa/Image/Functors/SimpleNeighborhood.h>
+
 // -------------------------------------------------------------------------
 template< class _TFilter, class _TImage >
-void fpaPluginsImageAlgorithms::BaseFilter::
-_ConfigureFilter( _TFilter* filter, _TImage* image )
+void fpaPlugins_ImageAlgorithms::BaseFilter::
+_ConfigureFilter(
+  _TFilter* filter, _TImage* image,
+  std::vector< typename _TImage::IndexType >& seeds
+  )
 {
   typedef typename _TFilter::TNeighborhoodFunction _TNeighborhood;
   typedef
-    fpa::Image::Functors::SimpleNeighborhood< typename _TImage::Superclass >
+    fpa::Image::Functors::SimpleNeighborhood< _TImage::ImageDimension >
     _TSimpleNeigh;
 
   // Simple configuration
@@ -65,41 +63,36 @@ _ConfigureFilter( _TFilter* filter, _TImage* image )
   filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
 
   // Neighborhood function
-  auto neig = this->GetInputData< _TNeighborhood >( "Neighborhood" );
-  if( neig == NULL )
-  {
-    typename _TSimpleNeigh::Pointer sfunc = _TSimpleNeigh::New( );
-    sfunc->SetOrder( this->m_Parameters.GetUint( "NeighborhoodOrder" ) );
-    filter->SetNeighborhoodFunction( sfunc );
-  }
-  else
-    filter->SetNeighborhoodFunction( neig );
+  typename _TSimpleNeigh::Pointer sfunc = _TSimpleNeigh::New( );
+  sfunc->SetOrder( this->m_Parameters.GetUint( "NeighborhoodOrder" ) );
+  filter->SetNeighborhoodFunction( sfunc );
 
   // Assign seeds
-  auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
-  if( seeds != NULL )
+  seeds.clear( );
+  auto pnt_seeds = this->GetInputData< vtkPolyData >( "Seeds" );
+  if( pnt_seeds != NULL )
   {
     typename _TImage::PointType pnt;
     typename _TImage::IndexType idx;
     unsigned int dim =
       ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
 
-    for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
+    for( int i = 0; i < pnt_seeds->GetNumberOfPoints( ); ++i )
     {
       double buf[ 3 ];
-      seeds->GetPoint( i, buf );
+      pnt_seeds->GetPoint( i, buf );
       pnt.Fill( 0 );
       for( unsigned int d = 0; d < dim; ++d )
         pnt[ d ] = buf[ d ];
 
       if( image->TransformPhysicalPointToIndex( pnt, idx ) )
-        filter->AddSeed( idx, 0 );
+        seeds.push_back( idx );
 
     } // rof
 
   } // fi
 }
 
-#endif // __fpaPluginsImageAlgorithms__BaseFilter__h__
+#endif // __fpaPlugins_ImageAlgorithms__BaseFilter__h__
 
 // eof - $RCSfile$