typedef T TMinimumSpanningTree;
typedef typename T::TVertex TVertex;
typedef typename T::TVertexCompare TVertexCompare;
+ typedef std::vector< TVertex > TPath;
typedef
- fpa::Base::MatrixValuesContainer< TVertex, bool, TVertexCompare >
+ fpa::Base::MatrixValuesContainer< TVertex, TPath, TVertexCompare >
TBranches;
typedef std::set< TVertex, TVertexCompare > TEndPoints;
{
if( this->m_EndPoints.find( v ) == this->m_EndPoints.end( ) )
{
- std::cout << "Add " << v << std::endl;
-
this->m_EndPoints.insert( v );
this->Modified( );
{
this->itk::ProcessObject::SetNumberOfRequiredInputs( 1 );
- typename TBranches::Pointer out =
- static_cast< TBranches* >( this->MakeOutput( 0 ).GetPointer( ) );
+ typename TBranches::Pointer out = TBranches::New( );
this->itk::ProcessObject::SetNumberOfRequiredOutputs( 1 );
this->itk::ProcessObject::SetNthOutput( 0, out.GetPointer( ) );
}
const T* tree = this->GetInput( );
TBranches* branches = this->GetOutput( );
+ // Find bifurcations
+ TEndPoints all_points, marks;
auto e0It = this->m_EndPoints.begin( );
for( ; e0It != this->m_EndPoints.end( ); ++e0It )
{
+ all_points.insert( *e0It );
auto e1It = e0It;
e1It++;
for( ; e1It != this->m_EndPoints.end( ); ++e1It )
{
- std::cout << *e0It << " " << *e1It << std::endl;
- // std::vector< TVertex > path = tree->GetPath( *e0It, *e1It );
+ all_points.insert( *e0It );
+ auto path = tree->GetPath( *e0It, *e1It );
+ auto pIt = path.begin( );
+ for( ; pIt != path.end( ); ++pIt )
+ {
+ if( *pIt == *e0It || *pIt == *e1It )
+ continue;
+
+ if( marks.find( *pIt ) == marks.end( ) )
+ marks.insert( *pIt );
+ else
+ all_points.insert( *pIt );
+
+ } // rof
} // rof
} // rof
-}
-
-/*
- private:
- // Purposely not implemented
- ExtractBranchesFromMinimumSpanningTree( const Self& other );
- Self& operator=( const Self& other );
- protected:
- TEndPoints m_EndPoints;
- };
-
- } // ecapseman
-
- } // ecapseman
-*/
+ // Construct branches
+ std::cout << all_points.size( ) << std::endl;
+}
#endif // __FPA__BASE__EXTRACTBRANCHESFROMMINIMUMSPANNINGTREE__HXX__