]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/ImageAlgorithms/Dijkstra.cxx
...
[FrontAlgorithms.git] / plugins / ImageAlgorithms / Dijkstra.cxx
index 45f01186721332dc957a6f1079cf326bd610a48f..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 >( "Cost", false, false );
-  this->_ConfigureInput< _TData >( "CostConversion", 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,24 +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::TCostConversionFunction _TCostConversion;
-  typedef typename _TFilter::TCostFunction           _TCost;
+  typedef typename _TFilter::TConversionFunction  _TConversionFunction;
+  typedef typename _TFilter::TVertexFunction          _TVertexFunction;
 
+  // Create filter
   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 );
+  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( ) );
-  this->GetOutput( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) );
 }
 
 // eof - $RCSfile$