#include "ExtractBranchesFromMinimumSpanningTree.h" #include #include #include #include #include // ------------------------------------------------------------------------- fpaPlugins::ExtractBranchesFromMinimumSpanningTree:: ExtractBranchesFromMinimumSpanningTree( ) : Superclass( ) { this->_AddInput( "MinimumSpanningTree" ); this->_AddInput( "EndPoints" ); this->_AddOutput< cpPlugins::Interface::DataObject >( "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; // Get inputs auto tree = this->GetInputData< fpaPlugins::MinimumSpanningTree >( "MinimumSpanningTree" )->GetITK< _MST >( ); if( tree == NULL ) return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: Input MST type not supported." ); auto endpoints = this->GetInputData< cpPlugins::Interface::PointList >( "EndPoints" ); if( endpoints->GetNumberOfPoints( ) < 2 ) return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: Not enough end-points (<2)." ); if( endpoints->HaveEuclideanPoints( ) ) return( "fpaPlugins::ExtractBranchesFromMinimumSpanningTree: end-points are on euclidean space." ); // Create filter and connect input _Filter* filter = this->_CreateITK< _Filter >( ); filter->SetInput( tree ); for( unsigned int i = 0; i < endpoints->GetNumberOfPoints( ); ++i ) filter->AddEndPoint( endpoints->GetPoint< _V >( i ) ); filter->Update( ); // Connect output and finish auto out = this->GetOutputData< cpPlugins::Interface::DataObject >( "Output" ); out->SetITK( filter->GetOutput( ) ); return( "" ); } // eof - $RCSfile$