]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Filters/SeedsInterface.hxx
...
[FrontAlgorithms.git] / lib / fpa / Filters / SeedsInterface.hxx
diff --git a/lib/fpa/Filters/SeedsInterface.hxx b/lib/fpa/Filters/SeedsInterface.hxx
new file mode 100644 (file)
index 0000000..43175b4
--- /dev/null
@@ -0,0 +1,98 @@
+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+#ifndef __fpa__Filters__SeedsInterface__hxx__
+#define __fpa__Filters__SeedsInterface__hxx__
+
+#include <itkImageBase.h>
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+fpa::Filters::SeedsInterface< _TTraits >::
+SeedsInterface( itk::ProcessObject* f )
+  : m_Filter( f )
+{
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+fpa::Filters::SeedsInterface< _TTraits >::
+~SeedsInterface( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+void fpa::Filters::SeedsInterface< _TTraits >::
+AddSeed( const TPoint& s )
+{
+  TSeed seed( this->m_InputSeeds.size( ) + 1 );
+  seed.Point = s;
+  seed.IsPoint = true;
+  this->m_InputSeeds.push_back( seed );
+  if( this->m_Filter.IsNotNull( ) )
+    this->m_Filter->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+void fpa::Filters::SeedsInterface< _TTraits >::
+AddSeed( const TVertex& s )
+{
+  TSeed seed( this->m_InputSeeds.size( ) + 1 );
+  seed.Vertex = s;
+  seed.IsPoint = false;
+  this->m_InputSeeds.push_back( seed );
+  if( this->m_Filter.IsNotNull( ) )
+    this->m_Filter->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+void fpa::Filters::SeedsInterface< _TTraits >::
+ClearSeeds( )
+{
+  this->m_InputSeeds.clear( );
+  this->m_UnifiedSeeds.clear( );
+  if( this->m_Filter.IsNotNull( ) )
+    this->m_Filter->Modified( );
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+const typename fpa::Filters::SeedsInterface< _TTraits >::
+TNodes& fpa::Filters::SeedsInterface< _TTraits >::
+GetSeeds( ) const
+{
+  return( this->m_UnifiedSeeds );
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+void fpa::Filters::SeedsInterface< _TTraits >::
+_PrepareSeeds( const itk::DataObject* input )
+{
+  // Input object is an image?
+  typedef itk::ImageBase< Self::Dimension > _TImageBase;
+  const _TImageBase* image = dynamic_cast< const _TImageBase* >( input );
+  if( image != NULL )
+  {
+    this->m_UnifiedSeeds.clear( );
+    for( TSeed iSeed: this->m_InputSeeds )
+    {
+      if( iSeed.IsPoint )
+        image->TransformPhysicalPointToIndex( iSeed.Point, iSeed.Vertex );
+      TNode node;
+      node.Vertex = iSeed.Vertex;
+      node.Parent = iSeed.Vertex;
+      node.FrontId = iSeed.FrontId;
+      this->m_UnifiedSeeds.insert( node );
+
+    } // rof
+
+  } // fi
+}
+
+#endif // __fpa__Filters__SeedsInterface__hxx__
+// eof - $RCSfile$