]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Image/DefaultTraits.h
...
[FrontAlgorithms.git] / lib / fpa / Image / DefaultTraits.h
index c2b829530d9915e369c4a5184ea179b980750750..b56bdec5f3f19c84834eb2f1c4fe0cf1a74c176e 100644 (file)
@@ -6,12 +6,10 @@
 #ifndef __fpa__Image__DefaultTraits__h__
 #define __fpa__Image__DefaultTraits__h__
 
+#include <set>
 #include <vector>
 #include <itkConceptChecking.h>
-#include <itkImageToImageFilter.h>
-
-#include <fpa/Base/MarksInterfaceWithCollisions.h>
-#include <fpa/Base/SeedsInterface.h>
+#include <fpa/Base/Event.h>
 
 namespace fpa
 {
@@ -35,21 +33,46 @@ namespace fpa
       typedef typename TOutputImage::PixelType       TOutputValue;
       typedef typename TVertex::LexicographicCompare TCompare;
 
-      typedef std::vector< TVertex > TNeighborhood;
+      typedef fpa::Base::Event< TVertex > TEvent;
+      typedef std::vector< TVertex >      TNeighborhood;
 
-      typedef fpa::Base::SeedsInterface< TVertex, TPoint, TInputValue, TOutputValue, TFrontId, TCompare > TSeedsInterface;
-      typedef fpa::Base::MarksInterfaceWithCollisions< TVertex > TMarksInterface;
-      typedef itk::ImageToImageFilter< TInputImage, TOutputImage > TFilter;
+      struct TSeed
+      {
+        TVertex Vertex;
+        TPoint  Point;
+        bool    IsPoint;
+        bool    IsUnified;
+        TFrontId FrontId;
+        TSeed( )
+          : IsUnified( false ),
+            FrontId( TFrontId( 0 ) )
+          { }
+      };
+      typedef std::vector< TSeed > TSeeds;
 
-      typedef typename TSeedsInterface::TNode  TNode;
-      typedef typename TSeedsInterface::TNodes TNodes;
-      typedef typename TSeedsInterface::TSeed  TSeed;
-      typedef typename TSeedsInterface::TSeeds TSeeds;
+      struct TNode
+      {
+        TVertex  Vertex;
+        TVertex  Parent;
+        TFrontId FrontId;
 
-    public:
+        // Hack to hide the fact that seed values need to be initialized
+        mutable TOutputValue Value;
+      };
+      struct TNodeCompare
+      {
+        bool operator()( const TNode& a, const TNode& b ) const
+          {
+            TCompare cmp;
+            return( cmp( a.Vertex, b.Vertex ) );
+          }
+      };
+      typedef std::set< TNode, TNodeCompare > TNodes;
+
+    private:
       itkConceptMacro(
         Check_SameDimension,
-        ( itk::Concept::SameDimension< TInputImage::ImageDimension, TOutputImage::ImageDimension > )
+        ( itk::Concept::SameDimension< Self::Dimension, TOutputImage::ImageDimension > )
         );
 
     private: