#ifndef __FPA__BASE__IMAGESKELETON__H__ #define __FPA__BASE__IMAGESKELETON__H__ #include #include namespace fpa { namespace Base { /** */ template< class _TMST > class ImageSkeleton : public itk::SimpleDataObjectDecorator< std::map< typename _TMST::TVertex, std::map< typename _TMST::TVertex, typename cpExtensions::DataStructures::PolyLineParametricPath< _TMST::TVertex::Dimension >::Pointer, typename _TMST::TVertex::LexicographicCompare >, typename _TMST::TVertex::LexicographicCompare > > { public: // Base types typedef _TMST TMinimumSpanningTree; typedef typename _TMST::TVertex TVertex; typedef typename TVertex::LexicographicCompare TVertexCmp; typedef cpExtensions::DataStructures::PolyLineParametricPath< TVertex::Dimension > TPath; typedef std::map< TVertex, typename TPath::Pointer, TVertexCmp > TSkeletonRow; typedef std::map< TVertex, TSkeletonRow, TVertexCmp > TSkeleton; // ITK-related types typedef ImageSkeleton Self; typedef itk::SimpleDataObjectDecorator< TSkeleton > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; public: itkNewMacro( Self ); itkTypeMacro( ImageSkeleton, itk::SimpleDataObjectDecorator ); itkGetConstObjectMacro( MinimumSpanningTree, _TMST ); itkSetConstObjectMacro( MinimumSpanningTree, _TMST ); public: void AddBranch( const TVertex& a, const TVertex& b ); const TPath* GetBranch( const TVertex& a, const TVertex& b ) const; protected: ImageSkeleton( ); virtual ~ImageSkeleton( ); private: // Purposely not implemented ImageSkeleton( const Self& other ); Self& operator=( const Self& other ); protected: typename _TMST::ConstPointer m_MinimumSpanningTree; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION #include #endif // ITK_MANUAL_INSTANTIATION #endif // __FPA__BASE__IMAGESKELETON__H__ // eof - $RCSfile$