]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/ExtractBranchesFromMinimumSpanningTree.cxx
33980a2233a8359ca3ac2d1624eb789c63faf61e
[FrontAlgorithms.git] / lib / fpaPlugins / ExtractBranchesFromMinimumSpanningTree.cxx
1 #include "ExtractBranchesFromMinimumSpanningTree.h"
2
3 #include <itkIndex.h>
4
5 #include <cpPlugins/Interface/PointList.h>
6 #include <cpPlugins/Interface/PolyLineParametricPath.h>
7 #include <cpExtensions/DataStructures/VectorValuesContainer.h>
8 #include <fpaPlugins/MinimumSpanningTree.h>
9
10 #include <fpa/Base/MinimumSpanningTree.h>
11 #include <fpa/Base/ExtractBranchesFromMinimumSpanningTree.h>
12
13 // -------------------------------------------------------------------------
14 fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
15 ExtractBranchesFromMinimumSpanningTree( )
16   : Superclass( )
17 {
18   this->_AddInput( "MinimumSpanningTree" );
19   this->_AddInput( "EndPoints" );
20   this->_AddOutput< cpPlugins::Interface::PolyLineParametricPath >( "Output" );
21 }
22
23 // -------------------------------------------------------------------------
24 fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
25 ~ExtractBranchesFromMinimumSpanningTree( )
26 {
27 }
28
29 // -------------------------------------------------------------------------
30 std::string fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
31 _GenerateData( )
32 {
33   std::string err = this->_GD0< 2 >( );
34   if( err != "" )
35     err = this->_GD0< 3 >( );
36   if( err != "" )
37     err = this->_GD0< 4 >( );
38   return( err );
39 }
40
41 // -------------------------------------------------------------------------
42 template< unsigned int D >
43 std::string fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
44 _GD0( )
45 {
46   typedef itk::Index< D >                                           _V;
47   typedef itk::Functor::IndexLexicographicCompare< D >              _VC;
48   typedef fpa::Base::MinimumSpanningTree< _V, _VC >                 _MST;
49   typedef fpa::Base::ExtractBranchesFromMinimumSpanningTree< _MST > _Filter;
50   typedef cpExtensions::DataStructures::VectorValuesContainer< _V > _CIdx;
51
52   // Get inputs
53   auto tree = this->GetInputData( "MinimumSpanningTree" )->GetITK< _MST >( );
54   if( tree == NULL )
55     return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: Input MST type not supported." );
56   auto endpoints = this->GetInputData( "EndPoints" )->GetITK< _CIdx >( );
57   if( endpoints == NULL )
58     return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: No end-points." );
59   if( endpoints->Get( ).size( ) < 2 )
60     return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: Not enough end-points (<2)." );
61
62   // Create filter and connect input
63   _Filter* filter = this->_CreateITK< _Filter >( );
64   filter->SetInput( tree );
65   for( auto iIt = endpoints->Begin( ); iIt != endpoints->End( ); ++iIt )
66     filter->AddEndPoint( *iIt );
67   filter->Update( );
68
69   // Connect output and finish
70   auto out = this->GetOutputData( "Output" );
71   out->SetITK( filter->GetOutput( ) );
72   return( "" );
73 }
74
75 // eof - $RCSfile$