-#ifndef __FPA__BASE__MINIMUMSPANNINGTREE__H__
-#define __FPA__BASE__MINIMUMSPANNINGTREE__H__
+#ifndef __fpa__Base__MinimumSpanningTree__h__
+#define __fpa__Base__MinimumSpanningTree__h__
-#include <map>
-#include <utility>
+#include <fpa/Config.h>
#include <vector>
-#include <itkSimpleDataObjectDecorator.h>
-#include <itkSmartPointer.h>
+#include <utility>
+#include <itkObject.h>
namespace fpa
{
{
/**
*/
- template< class V, class B >
+ template< class _TVertex, class _TPath, class _TSuperclass >
class MinimumSpanningTree
- : public itk::SimpleDataObjectDecorator< std::map< V, std::pair< V, short >, B > >
+ : public _TSuperclass
{
public:
- typedef std::pair< V, short > TNodeInfo;
- typedef std::map< V, TNodeInfo, B > TDecorated;
- typedef MinimumSpanningTree Self;
- typedef itk::SimpleDataObjectDecorator< TDecorated > Superclass;
- typedef itk::SmartPointer< Self > Pointer;
- typedef itk::SmartPointer< const Self > ConstPointer;
-
- typedef V TVertex;
- typedef B TVertexCompare;
-
- typedef std::vector< TVertex > TVertices;
- typedef std::pair< TVertex, bool > TCollision;
+ typedef MinimumSpanningTree Self;
+ typedef _TSuperclass Superclass;
+ typedef itk::SmartPointer< Self > Pointer;
+ typedef itk::SmartPointer< const Self > ConstPointer;
+
+ typedef _TVertex TVertex;
+ typedef _TPath TPath;
+ typedef std::pair< _TVertex, bool > TCollision;
typedef std::vector< TCollision > TCollisionsRow;
typedef std::vector< TCollisionsRow > TCollisions;
typedef std::vector< _TRow > _TMatrix;
public:
- itkNewMacro( Self );
- itkTypeMacro( MinimumSpanningTree, itkSimpleDataObjectDecorator );
-
- itkGetConstMacro( Collisions, TCollisions );
+ itkTypeMacro( MinimumSpanningTree, _TSuperclass );
public:
+ const TCollisions& GetCollisions( ) const;
void SetCollisions( const TCollisions& collisions );
- void SetParent( const TVertex& v, const TVertex& p, const short& fid )
- {
- this->Get( )[ v ] = TNodeInfo( p, fid );
- this->Modified( );
- }
- void Clear( )
- {
- this->Get( ).clear( );
- this->m_Collisions.clear( );
- this->m_FrontPaths.clear( );
- }
- virtual std::vector< V > GetPath( const V& a, const V& b ) const;
-
- template< class I >
- std::vector< typename I::PointType > GetPathFromImage(
- const V& a, const V& b,
- const I* image, unsigned int kernel = 0
+
+ void ClearSeeds( );
+ void AddSeed( const _TVertex& seed );
+
+ virtual _TVertex GetParent( const _TVertex& v ) const = 0;
+ virtual void SetParent( const _TVertex& v, const _TVertex& p ) = 0;
+
+ virtual void GetPath(
+ typename _TPath::Pointer& path, const _TVertex& a
+ ) const;
+ virtual void GetPath(
+ typename _TPath::Pointer& path, const _TVertex& a, const _TVertex& b
) const;
protected:
MinimumSpanningTree( );
virtual ~MinimumSpanningTree( );
- virtual void _Path( std::vector< V >& path, const V& a ) const;
-
private:
- // Purposely not implemented
+ // Purposely not defined
MinimumSpanningTree( const Self& other );
Self& operator=( const Self& other );
protected:
TCollisions m_Collisions;
_TMatrix m_FrontPaths;
- static const unsigned long INF_VALUE;
+ std::vector< _TVertex > m_Seeds;
};
} // ecapseman
} // ecapseman
-#include <fpa/Base/MinimumSpanningTree.hxx>
+#ifndef ITK_MANUAL_INSTANTIATION
+# include <fpa/Base/MinimumSpanningTree.hxx>
+#endif // ITK_MANUAL_INSTANTIATION
-#endif // __FPA__BASE__MINIMUMSPANNINGTREE__H__
+#endif // __fpa__Base__MinimumSpanningTree__h__
// eof - $RCSfile$