+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+#ifndef __fpa__Filters__Image__DefaultTraits__h__
+#define __fpa__Filters__Image__DefaultTraits__h__
+
+#include <set>
+#include <vector>
+#include <itkConceptChecking.h>
+#include <itkImageToImageFilter.h>
+#include <fpa/Filters/MarksWithCollisionsInterface.h>
+#include <fpa/Filters/SeedsInterface.h>
+
+namespace fpa
+{
+ namespace Filters
+ {
+ namespace Image
+ {
+ /**
+ */
+ template< class _TInputImage, class _TOutputImage, class _TMark >
+ class DefaultTraits
+ {
+ public:
+ typedef _TInputImage TInputImage;
+ typedef _TOutputImage TOutputImage;
+
+ class TInternalTraits
+ {
+ public:
+ typedef _TMark TMark;
+ typedef typename TInputImage::IndexType TVertex;
+ typedef typename TInputImage::PixelType TInputValue;
+ typedef typename TInputImage::PointType TPoint;
+ typedef typename TOutputImage::PixelType TOutputValue;
+ typedef typename TVertex::LexicographicCompare TVertexCompare;
+ itkStaticConstMacro(
+ Dimension, unsigned int, _TInputImage::ImageDimension
+ );
+
+ typedef std::vector< TVertex > TNeighborhood;
+ struct TSeed
+ {
+ TVertex Vertex;
+ TPoint Point;
+ bool IsPoint;
+ TMark FrontId;
+ TSeed( const TMark& fid = 0 )
+ : FrontId( fid )
+ { }
+ };
+ typedef std::vector< TSeed > TSeeds;
+
+ struct TNode
+ {
+ TVertex Vertex;
+ TVertex Parent;
+ TMark FrontId;
+
+ // Hack to hide the fact that nodes need to be (re-)initialized
+ mutable TOutputValue Value;
+ };
+ struct TNodeCompare
+ {
+ bool operator()( const TNode& a, const TNode& b ) const
+ {
+ static TVertexCompare c;
+ return( c( a.Vertex, b.Vertex ) );
+ }
+ };
+ typedef std::set< TNode, TNodeCompare > TNodes;
+ };
+
+ typedef itk::ImageToImageFilter< TInputImage, TOutputImage > TFilter;
+ typedef fpa::Filters::MarksWithCollisionsInterface< TInternalTraits > TMarksInterface;
+ typedef fpa::Filters::SeedsInterface< TInternalTraits > TSeedsInterface;
+
+ protected:
+ itkConceptMacro(
+ Check_Dimensions,
+ ( itk::Concept::SameDimension< TInputImage::ImageDimension, TOutputImage::ImageDimension > )
+ );
+ };
+
+ } // ecapseman
+
+ } // ecapseman
+
+} // ecapseman
+
+#endif // __fpa__Filters__Image__DefaultTraits__h__
+// eof - $RCSfile$