]> Creatis software - FrontAlgorithms.git/blob - plugins/fpa/ImageDijkstra.cxx
b5b3a628082937c1db2fbf47a576747ab80e3bd2
[FrontAlgorithms.git] / plugins / fpa / ImageDijkstra.cxx
1 #include "ImageDijkstra.h"
2 #include "MinimumSpanningTree.h"
3
4 #include <cpPlugins/Image.h>
5 #include <fpa_Instances/Filters.h>
6 #include <fpa/Image/Functors/RegionGrowAllBelongsFunction.h>
7
8 #include <fpa/Base/Algorithm.hxx>
9 #include <fpa/Base/Dijkstra.hxx>
10 #include <fpa/Image/Algorithm.hxx>
11 #include <fpa/Image/Dijkstra.hxx>
12 #include <fpa/VTK/Image2DObserver.hxx>
13 #include <fpa/VTK/Image3DObserver.hxx>
14
15 // -------------------------------------------------------------------------
16 fpaPlugins::ImageDijkstra::
17 ImageDijkstra( )
18   : Superclass( )
19 {
20   this->_AddInput( "CostFunctor", false );
21   this->_AddOutput< fpaPlugins::MinimumSpanningTree >( "MST" );
22   this->m_Parameters.ConfigureAsBool( "FillNodeQueue" );
23   this->m_Parameters.SetBool( "FillNodeQueue", false );
24 }
25
26 // -------------------------------------------------------------------------
27 fpaPlugins::ImageDijkstra::
28 ~ImageDijkstra( )
29 {
30 }
31
32 // -------------------------------------------------------------------------
33 std::string fpaPlugins::ImageDijkstra::
34 _GenerateData( )
35 {
36   auto image = this->GetInputData( "Input" )->GetITK< itk::DataObject >( );
37   std::string   cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 2 );
38   if( r != "" ) cpPlugin_Image_Demangle_Pixel_AllScalars( r, _GD0, image, 3 );
39   return( r );
40 }
41
42 // -------------------------------------------------------------------------
43 template< class _TImage >
44 std::string fpaPlugins::ImageDijkstra::
45 _GD0( _TImage* image )
46 {
47   typedef fpa::Image::Dijkstra< _TImage, _TImage > _TFilter;
48   typedef typename _TFilter::TResult               _TCost;
49   typedef itk::FunctionBase< _TCost, _TCost >      _TCostFunctor;
50   typedef typename _TFilter::TMinimumSpanningTree  _TMST;
51
52   if( image == NULL )
53     return( "fpaPlugins::ImageDijkstra: Invalid image type." );
54
55   auto base_functor =
56     this->GetInputData( "CostFunctor" )->GetITK< itk::LightObject >( );
57   _TCostFunctor* functor = NULL;
58   if( base_functor != NULL )
59   {
60     functor = dynamic_cast< _TCostFunctor* >( base_functor );
61     if( functor == NULL )
62       return( "fpaPlugins::ImageDijkstra: Given cost functor is invalid." );
63
64   } // fi
65   
66   // Create filter
67   _TFilter* filter = this->_ConfigureFilter< _TFilter >( );
68   filter->SetFillNodeQueue( this->m_Parameters.GetBool( "FillNodeQueue" ) );
69   filter->SetConversionFunction( functor );
70
71   // Go!!!
72   this->_ExecuteFilter( filter );
73
74   // Connect remaining output
75   this->GetOutputData( "Output" )->SetITK( filter->GetOutput( ) );
76   this->GetOutputData( "MST" )->SetITK( filter->GetMinimumSpanningTree( ) );
77   return( "" );
78 }
79
80 // eof - $RCSfile$