]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Base/Algorithm.h
...
[FrontAlgorithms.git] / lib / fpa / Base / Algorithm.h
index 662bdf1434273c7866abd12a18e073b074b0d08a..6625467e29ae3c698b4a3d55d61ac9c6464a8649 100644 (file)
@@ -5,6 +5,7 @@
 #include <itkFunctionBase.h>
 #include <fpa/Config.h>
 #include <fpa/Base/Events.h>
+#include <fpa/Base/Functors/VertexCostFunctionBase.h>
 
 namespace fpa
 {
@@ -29,6 +30,8 @@ namespace fpa
       // Different functions
       typedef std::vector< TVertex >                      TNeighborhood;
       typedef itk::FunctionBase< TVertex, TNeighborhood > TNeighborhoodFunction;
+      typedef itk::FunctionBase< TOutput, TOutput >       TConversionFunction;
+      typedef fpa::Base::Functors::VertexCostFunctionBase< TVertex, TOutput > TVertexFunction;
 
       // Minigraph to represent collisions
       typedef std::pair< _TVertex, bool >   TCollision;
@@ -66,18 +69,29 @@ namespace fpa
       itkSetMacro( StopAtOneFront, bool );
 
       itkGetObjectMacro( NeighborhoodFunction, TNeighborhoodFunction );
+      itkGetObjectMacro( ConversionFunction, TConversionFunction );
+      itkGetObjectMacro( VertexFunction, TVertexFunction );
+
+      itkGetConstObjectMacro( NeighborhoodFunction, TNeighborhoodFunction );
+      itkGetConstObjectMacro( ConversionFunction, TConversionFunction );
+      itkGetConstObjectMacro( VertexFunction, TVertexFunction );
+
       itkSetObjectMacro( NeighborhoodFunction, TNeighborhoodFunction );
+      itkSetObjectMacro( ConversionFunction, TConversionFunction );
+      itkSetObjectMacro( VertexFunction, TVertexFunction );
 
     public:
+      void ClearSeeds( );
       void AddSeed( const TVertex& seed, const TOutput& value );
 
     protected:
       Algorithm( );
       virtual ~Algorithm( );
 
-      virtual void GenerateData( ) fpa_OVERRIDE;
+      virtual void GenerateData( ) override;
 
       // Particular methods
+      virtual bool _ContinueGenerateData( );
       virtual void _Loop( );
 
       virtual void _BeforeGenerateData( );
@@ -88,12 +102,16 @@ namespace fpa
       virtual bool _ValidLoop( ) const;
       virtual void _UpdateCollisions( const TVertex& a, const TVertex& b );
 
+      virtual _TOutput _GetInputValue( const _TQueueNode& v, const _TQueueNode& p );
+
       virtual void _InitMarks( ) = 0;
       virtual void _InitResults( const TOutput& init_value ) = 0;
       virtual bool _IsMarked( const _TVertex& v ) const = 0;
       virtual void _Mark( const _TQueueNode& n ) = 0;
       virtual TFrontId _GetMark( const _TVertex& v ) const = 0;
       virtual void _UpdateResult( const _TQueueNode& n ) = 0;
+      virtual TOutput _GetResult( const _TVertex& v ) const = 0;
+      virtual unsigned int _GetNumberOfDimensions( ) const = 0;
 
       virtual bool _UpdateValue( _TQueueNode& v, const _TQueueNode& p ) = 0;
       virtual unsigned long _QueueSize( ) const = 0;
@@ -109,7 +127,11 @@ namespace fpa
     protected:
       _TOutput m_InitResult;
       bool m_StopAtOneFront;
+
       typename TNeighborhoodFunction::Pointer m_NeighborhoodFunction;
+      typename TConversionFunction::Pointer   m_ConversionFunction;
+      typename TVertexFunction::Pointer       m_VertexFunction;
+
       std::vector< _TQueueNode > m_Seeds;
       TCollisions m_Collisions;
       unsigned int m_NumberOfFronts;