1 #include "ExtractBranchesFromMinimumSpanningTree.h"
5 #include <cpPlugins/Interface/PointList.h>
6 #include <cpPlugins/Interface/PolyLineParametricPath.h>
7 #include <cpExtensions/DataStructures/VectorValuesContainer.h>
8 #include <fpaPlugins/MinimumSpanningTree.h>
10 #include <fpa/Base/MinimumSpanningTree.h>
11 #include <fpa/Base/ExtractBranchesFromMinimumSpanningTree.h>
13 // -------------------------------------------------------------------------
14 fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
15 ExtractBranchesFromMinimumSpanningTree( )
18 this->_AddInput( "MinimumSpanningTree" );
19 this->_AddInput( "EndPoints" );
20 this->_AddOutput< cpPlugins::Interface::PolyLineParametricPath >( "Output" );
23 // -------------------------------------------------------------------------
24 fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
25 ~ExtractBranchesFromMinimumSpanningTree( )
29 // -------------------------------------------------------------------------
30 std::string fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
33 std::string err = this->_GD0< 2 >( );
35 err = this->_GD0< 3 >( );
37 err = this->_GD0< 4 >( );
41 // -------------------------------------------------------------------------
42 template< unsigned int D >
43 std::string fpaPlugins::ExtractBranchesFromMinimumSpanningTree::
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;
53 auto tree = this->GetInputData( "MinimumSpanningTree" )->GetITK< _MST >( );
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)." );
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 );
69 // Connect output and finish
70 auto out = this->GetOutputData( "Output" );
71 out->SetITK( filter->GetOutput( ) );