1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5 #ifndef __fpa__DataStructures__Image__Skeleton__h__
6 #define __fpa__DataStructures__Image__Skeleton__h__
9 #include <fpa/DataStructures/Graph.h>
10 #include <fpa/DataStructures/Image/Path.h>
14 namespace DataStructures
20 template< unsigned int _VDim >
22 : public fpa::DataStructures::Graph< typename fpa::DataStructures::Image::Path< _VDim >::TIndex, typename fpa::DataStructures::Image::Path< _VDim >::Pointer, typename fpa::DataStructures::Image::Path< _VDim >::TIndex, typename fpa::DataStructures::Image::Path< _VDim >::TIndex::LexicographicCompare >
25 typedef fpa::DataStructures::Image::Path< _VDim > TPath;
26 typedef typename TPath::TIndex TIndex;
27 typedef typename TIndex::LexicographicCompare TIndexCompare;
28 typedef typename TPath::Pointer TPathPointer;
30 itkStaticConstMacro( Dimension, unsigned int, _VDim );
32 typedef fpa::DataStructures::Graph< TIndex, TPathPointer, TIndex, TIndexCompare > Superclass;
33 typedef Skeleton Self;
34 typedef itk::SmartPointer< Self > Pointer;
35 typedef itk::SmartPointer< const Self > ConstPointer;
39 itkTypeMacro( Skeleton, fpa::Image::Graph );
42 void AddBranch( TPath* path );
43 const TPath* GetBranch( const TIndex& a, const TIndex& b ) const;
45 std::vector< TIndex > GetEndPoints( ) const;
46 std::vector< TIndex > GetBifurcations( ) const;
53 // Purposely not implemented
54 Skeleton( const Self& other );
55 Self& operator=( const Self& other );
64 #ifndef ITK_MANUAL_INSTANTIATION
65 # include <fpa/DataStructures/Image/Skeleton.hxx>
66 #endif // ITK_MANUAL_INSTANTIATION
67 #endif // __fpa__DataStructures__Image__Skeleton__h__