#include "ExtractBranchesFromMinimumSpanningTree.h" #include #include #include #include #include #include #include // ------------------------------------------------------------------------- fpaPlugins::ExtractBranchesFromMinimumSpanningTree:: ExtractBranchesFromMinimumSpanningTree( ) : Superclass( ) { this->_AddInput( "MinimumSpanningTree" ); this->_AddInput( "EndPoints" ); this->_AddOutput< cpPlugins::Interface::PolyLineParametricPath >( "Output" ); } // ------------------------------------------------------------------------- fpaPlugins::ExtractBranchesFromMinimumSpanningTree:: ~ExtractBranchesFromMinimumSpanningTree( ) { } // ------------------------------------------------------------------------- std::string fpaPlugins::ExtractBranchesFromMinimumSpanningTree:: _GenerateData( ) { std::string err = this->_GD0< 2 >( ); if( err != "" ) err = this->_GD0< 3 >( ); if( err != "" ) err = this->_GD0< 4 >( ); return( err ); } // ------------------------------------------------------------------------- template< unsigned int D > std::string fpaPlugins::ExtractBranchesFromMinimumSpanningTree:: _GD0( ) { typedef itk::Index< D > _V; typedef itk::Functor::IndexLexicographicCompare< D > _VC; typedef fpa::Base::MinimumSpanningTree< _V, _VC > _MST; typedef fpa::Base::ExtractBranchesFromMinimumSpanningTree< _MST > _Filter; typedef cpExtensions::DataStructures::VectorValuesContainer< _V > _CIdx; // Get inputs auto tree = this->GetInputData( "MinimumSpanningTree" )->GetITK< _MST >( ); if( tree == NULL ) return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: Input MST type not supported." ); auto endpoints = this->GetInputData( "EndPoints" )->GetITK< _CIdx >( ); if( endpoints == NULL ) return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: No end-points." ); if( endpoints->Get( ).size( ) < 2 ) return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: Not enough end-points (<2)." ); // Create filter and connect input _Filter* filter = this->_CreateITK< _Filter >( ); filter->SetInput( tree ); for( auto iIt = endpoints->Begin( ); iIt != endpoints->End( ); ++iIt ) filter->AddEndPoint( *iIt ); filter->Update( ); // Connect output and finish auto out = this->GetOutputData( "Output" ); out->SetITK( filter->GetOutput( ) ); return( "" ); } // eof - $RCSfile$