]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/ImageAlgorithms/Dijkstra.cxx
...
[FrontAlgorithms.git] / plugins / ImageAlgorithms / Dijkstra.cxx
index c15d96fb4506b1a3bb3d2c6f868c6388d620954d..7d4fe1edac38094020468f533a158550a974bb6a 100644 (file)
@@ -1,18 +1,19 @@
-#include <ImageAlgorithms/Dijkstra.h>
+#include "Dijkstra.h"
+#include <cpPlugins/Pipeline/Functor.h>
 #include <cpInstances/DataObjects/Image.h>
 
 #include <fpa/Image/Dijkstra.h>
 
 // -------------------------------------------------------------------------
-fpaPluginsImageAlgorithms::Dijkstra::
+fpaPlugins_ImageAlgorithms::Dijkstra::
 Dijkstra( )
   : Superclass( )
 {
-  typedef cpPlugins::Pipeline::DataObject _TData;
+  typedef cpPlugins::Pipeline::DataObject _TFunctor;
   typedef cpInstances::DataObjects::Image _TMST;
 
-  this->_ConfigureInput< _TData >( "VertexFunction", false, false );
-  this->_ConfigureInput< _TData >( "ConversionFunction", false, false );
+  this->_ConfigureInput< _TFunctor >( "VertexFunction", false, false );
+  this->_ConfigureInput< _TFunctor >( "ConversionFunction", false, false );
   this->_ConfigureOutput< _TMST >( "MST" );
 
   std::vector< std::string > choices;
@@ -23,13 +24,13 @@ Dijkstra( )
 }
 
 // -------------------------------------------------------------------------
-fpaPluginsImageAlgorithms::Dijkstra::
+fpaPlugins_ImageAlgorithms::Dijkstra::
 ~Dijkstra( )
 {
 }
 
 // -------------------------------------------------------------------------
-void fpaPluginsImageAlgorithms::Dijkstra::
+void fpaPlugins_ImageAlgorithms::Dijkstra::
 _GenerateData( )
 {
   auto o = this->GetInputData( "Input" );
@@ -39,7 +40,7 @@ _GenerateData( )
 
 // -------------------------------------------------------------------------
 template< class _TImage >
-void fpaPluginsImageAlgorithms::Dijkstra::
+void fpaPlugins_ImageAlgorithms::Dijkstra::
 _GD0( _TImage* image )
 {
   typedef itk::Image< float, _TImage::ImageDimension >  _TFloat;
@@ -52,35 +53,46 @@ _GD0( _TImage* image )
 
 // -------------------------------------------------------------------------
 template< class _TInputImage, class _TOutputImage >
-void fpaPluginsImageAlgorithms::Dijkstra::
+void fpaPlugins_ImageAlgorithms::Dijkstra::
 _GD1( _TInputImage* image )
 {
+  typedef cpPlugins::Pipeline::Functor _TFunctor;
   typedef fpa::Image::Dijkstra< _TInputImage, _TOutputImage > _TFilter;
   typedef typename _TFilter::TConversionFunction  _TConversionFunction;
   typedef typename _TFilter::TVertexFunction          _TVertexFunction;
 
+  // Create filter
   auto filter = this->_CreateITK< _TFilter >( );
   std::vector< typename _TInputImage::IndexType > seeds;
   this->_ConfigureFilter( filter, image, seeds );
+
+  // Instantiate functors
+  auto cost_conversion = this->GetInputData< _TFunctor >( "ConversionFunction" );
+  if( cost_conversion != NULL )
+  {
+    cost_conversion->Instantiate( filter );
+    auto cost_conversion_functor = cost_conversion->GetFunctor< _TConversionFunction >( );
+    if( cost_conversion_functor != NULL )
+      filter->SetConversionFunction( cost_conversion_functor );
+
+  } // fi
+
+  auto vertex = this->GetInputData< _TFunctor >( "VertexFunction" );
+  if( vertex != NULL )
+  {
+    vertex->Instantiate( filter );
+    auto vertex_functor = vertex->GetFunctor< _TVertexFunction >( );
+    if( vertex_functor != NULL )
+      filter->SetVertexFunction( vertex_functor );
+
+  } // fi
+
+  // Finish filter's configuration
   filter->ClearSeeds( );
   for( auto seed : seeds )
     filter->AddSeed( seed, ( typename _TOutputImage::PixelType )( 0 ) );
   filter->Update( );
   this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
-
-  /* TODO
-     auto filter = this->_CreateITK< _TFilter >( );
-     this->_ConfigureFilter( filter, image );
-     auto cost = this->GetInputData< _TCost >( "Cost" );
-     auto conv = this->GetInputData< _TCostConversion >( "CostConversion" );
-     if( cost != NULL )
-     filter->SetCostFunction( cost );
-     if( conv != NULL )
-     filter->SetCostConversionFunction( conv );
-     filter->Update( );
-     this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
-     this->GetOutput( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) );
-  */
 }
 
 // eof - $RCSfile$