1 #include "ImagePathToPolyDataFilter.h"
2 #include <cpPlugins/DataObjects/Image.h>
3 #include <cpPlugins/DataObjects/Mesh.h>
4 #include <fpa/Base/MinimumSpanningTree.h>
5 #include <fpa/VTK/Image/PathToPolyDataFilter.h>
6 #include <fpa/VTK/Image/PathToPolyDataFilter.hxx>
8 // -------------------------------------------------------------------------
9 fpaPlugins::ImagePathToPolyDataFilter::
10 ImagePathToPolyDataFilter( )
13 this->_ConfigureInput< cpPlugins::BaseObjects::DataObject >( "MST", true, false );
14 this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Image", true, false );
15 this->_ConfigureInput< cpPlugins::BaseObjects::DataObject >( "Seeds", true, false );
16 this->_ConfigureOutput< cpPlugins::DataObjects::Mesh >( "Output" );
18 this->m_Parameters.ConfigureAsUint( "Seed0" );
19 this->m_Parameters.ConfigureAsUint( "Seed1" );
20 this->m_Parameters.SetUint( "Seed0", 0 );
21 this->m_Parameters.SetUint( "Seed1", 1 );
24 // -------------------------------------------------------------------------
25 fpaPlugins::ImagePathToPolyDataFilter::
26 ~ImagePathToPolyDataFilter( )
30 // -------------------------------------------------------------------------
31 void fpaPlugins::ImagePathToPolyDataFilter::
34 auto i2 = this->GetInputData< itk::ImageBase< 2 > >( "Image" );
35 auto i3 = this->GetInputData< itk::ImageBase< 3 > >( "Image" );
41 this->_Error( "No valid input image." );
44 // -------------------------------------------------------------------------
45 template< class _TImage >
46 void fpaPlugins::ImagePathToPolyDataFilter::
47 _GD0( _TImage* image )
49 typedef typename _TImage::IndexType _TIndex;
50 typedef typename _TIndex::LexicographicCompare _TComp;
51 typedef fpa::Base::MinimumSpanningTree< _TIndex, float, _TComp > _TFloat;
52 typedef fpa::Base::MinimumSpanningTree< _TIndex, double, _TComp > _TDouble;
54 auto mf = this->GetInputData< _TFloat >( "MST" );
55 auto md = this->GetInputData< _TDouble >( "MST" );
57 this->_GD1( image, mf );
59 this->_GD1( image, md );
61 this->_Error( "No valid input minimum spanning tree." );
64 // -------------------------------------------------------------------------
65 template< class _TImage, class _TMST >
66 void fpaPlugins::ImagePathToPolyDataFilter::
67 _GD1( _TImage* image, _TMST* mst )
69 typedef fpa::VTK::Image::PathToPolyDataFilter< _TMST > _TFilter;
70 auto seeds = this->GetInputData< vtkPolyData >( "Seeds" )->GetPoints( );
71 if( seeds->GetNumberOfPoints( ) < 2 )
72 this->_Error( "Not enough seeds." );
74 auto filter = this->_CreateVTK< _TFilter >( );
75 filter->SetImage( image );
76 filter->SetMinimumSpanningTree( mst );
78 typename _TImage::PointType pnt;
79 typename _TImage::IndexType idx;
81 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
83 seeds->GetPoint( this->m_Parameters.GetUint( "Seed0" ), buf );
85 for( unsigned int d = 0; d < dim; ++d )
87 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
88 filter->SetSeed0( idx );
89 seeds->GetPoint( this->m_Parameters.GetUint( "Seed1" ), buf );
91 for( unsigned int d = 0; d < dim; ++d )
93 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
94 filter->SetSeed1( idx );
96 this->GetOutput( "Output" )->SetVTK( filter->GetOutput( ) );