]> Creatis software - FrontAlgorithms.git/blobdiff - plugins/ImageAlgorithms/SkeletonFilter.cxx
...
[FrontAlgorithms.git] / plugins / ImageAlgorithms / SkeletonFilter.cxx
index 106dab2f819711fd64d123beba91a77bf4c08594..274dc651717e25bae44bb62a4fd88cdefcdeb74e 100644 (file)
@@ -1,76 +1,82 @@
-#include <ImageAlgorithms/SkeletonFilter.h>
+#include "SkeletonFilter.h"
 #include <cpInstances/DataObjects/Image.h>
 #include <cpInstances/DataObjects/Skeleton.h>
 
-#include <fpa/Image/SkeletonFilter.h>
-#include <itkImage.h>
-#include <vtkPolyData.h>
-
 // -------------------------------------------------------------------------
-fpaPluginsImageAlgorithms::SkeletonFilter::
+fpaPlugins_ImageAlgorithms::SkeletonFilter::
 SkeletonFilter( )
   : Superclass( )
 {
+  typedef cpPlugins::Pipeline::DataObject    _TData;
   typedef cpInstances::DataObjects::Image    _TImage;
-  typedef cpInstances::Skeleton _TSkeleton;
-  typedef cpPlugins::Pipeline::DataObject _TData;
+  typedef cpInstances::DataObjects::Skeleton _TSkeleton;
 
   this->_ConfigureInput< _TImage >( "Input", true, false );
   this->_ConfigureInput< _TData >( "Seeds", true, false );
-  this->_ConfigureOutput< _TSkeleton >( "Skeleton" );
-  this->_ConfigureOutput< _TImage >( "Marks" );
+  this->_ConfigureOutput< _TSkeleton >( "Output" );
 }
 
 // -------------------------------------------------------------------------
-fpaPluginsImageAlgorithms::SkeletonFilter::
+fpaPlugins_ImageAlgorithms::SkeletonFilter::
 ~SkeletonFilter( )
 {
 }
 
 // -------------------------------------------------------------------------
-void fpaPluginsImageAlgorithms::SkeletonFilter::
+void fpaPlugins_ImageAlgorithms::SkeletonFilter::
 _GenerateData( )
 {
-  auto o = this->GetInputData( "Input" );
-  cpPlugins_Demangle_Image_RealPixels_AllDims_1( o, _GD0 )
-    this->_Error( "Invalid input image." );
+  /* TODO
+     typedef fpa::Image::MinimumSpanningTree< 2 > _TMST2;
+     typedef fpa::Image::MinimumSpanningTree< 3 > _TMST3;
+
+     auto mst2 = this->GetInputData< _TMST2 >( "MST" );
+     auto mst3 = this->GetInputData< _TMST3 >( "MST" );
+     if     ( mst2 != NULL ) this->_GD0( mst2 );
+     else if( mst3 != NULL ) this->_GD0( mst3 );
+     else this->_Error( "Invalid input spanning tree." );
+  */
 }
 
 // -------------------------------------------------------------------------
 template< class _TImage >
-void fpaPluginsImageAlgorithms::SkeletonFilter::
+void fpaPlugins_ImageAlgorithms::SkeletonFilter::
 _GD0( _TImage* image )
 {
-  typedef fpa::Image::SkeletonFilter< _TImage > _TFilter;
-  auto filter = this->_CreateITK< _TFilter >( );
-  filter->SetInput( image );
-
-  auto seeds = this->GetInputData< vtkPolyData >( "Seeds" );
-  if( seeds != NULL )
-  {
-    typename _TImage::PointType pnt;
-    typename _TImage::IndexType idx;
-    unsigned int dim =
-      ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
+  /* TODO
+     typedef typename _TMST::IndexType _TIndex;
+     typedef typename _TMST::TPath     _TPath;
 
-    for( int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
-    {
-      double buf[ 3 ];
-      seeds->GetPoint( i, buf );
-      pnt.Fill( 0 );
-      for( unsigned int d = 0; d < dim; ++d )
-        pnt[ d ] = buf[ d ];
+     // Get seeds
+     std::vector< _TIndex > seeds;
+     auto points = this->GetInputData< vtkPolyData >( "Seeds" );
+     if( points != NULL )
+     {
+     if( points->GetNumberOfPoints( ) < 2 )
+     this->_Error( "Not enough seeds (<2)." );
 
-      if( image->TransformPhysicalPointToIndex( pnt, idx ) )
-        filter->AddSeed( idx, 0 );
+     typename _TMST::PointType pnt;
+     typename _TMST::IndexType idx;
+     unsigned int dim =
+     ( _TMST::ImageDimension < 3 )? _TMST::ImageDimension: 3;
+     for( unsigned int i = 0; i < 2; ++i )
+     {
+     double buf[ 3 ];
+     points->GetPoint( i, buf );
+     pnt.Fill( 0 );
+     for( unsigned int d = 0; d < dim; ++d )
+     pnt[ d ] = buf[ d ];
+     if( mst->TransformPhysicalPointToIndex( pnt, idx ) )
+     seeds.push_back( idx );
 
-    } // rof
+     } // rof
 
-  } // fi
+     } // fi
 
-  filter->Update( );
-  this->GetOutput( "Skeleton" )->SetITK( filter->GetSkeleton( ) );
-  this->GetOutput( "Marks" )->SetITK( filter->GetMarks( ) );
+     typename _TPath::Pointer path;
+     mst->GetPath( path, seeds[ 0 ], seeds[ 1 ] );
+     this->GetOutput( "Output" )->SetITK( path );
+  */
 }
 
 // eof - $RCSfile$