1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
4 #include <cpPlugins/Image.h>
5 #include <fpa/VTK/Image2DObserver.h>
6 #include <fpa/VTK/Image3DObserver.h>
7 #include <vtkRenderWindowInteractor.h>
9 #include <fpa/VTK/Image2DObserver.hxx>
10 #include <fpa/VTK/Image3DObserver.hxx>
11 #include <itkSimpleDataObjectDecorator.h>
13 // -------------------------------------------------------------------------
14 template< class _TFilter >
15 _TFilter* fpaPlugins::BaseImageFilter::
18 typedef typename _TFilter::TInputImage _TImage;
19 typedef typename _TImage::IndexType _TIndex;
20 typedef itk::Point< double, _TImage::ImageDimension > _TPoint;
21 typedef itk::SimpleDataObjectDecorator< std::vector< _TPoint > > _TPoints;
22 typedef itk::SimpleDataObjectDecorator< std::vector< _TIndex > > _TIndexes;
24 auto image = this->GetInputData( "Input" )->GetITK< _TImage >( );
27 auto points = this->GetInputData( "Seeds" )->GetITK< _TPoints >( );
28 auto indexes = this->GetInputData( "Seeds" )->GetITK< _TIndexes >( );
30 // Create filter and connect input
31 auto filter = this->_CreateITK< _TFilter >( );
32 filter->SetInput( image );
34 // Set numeric parameters
35 filter->SetNeighborhoodOrder(
36 this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
38 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
41 filter->ClearSeeds( );
45 auto pIt = points->Get( ).begin( );
46 pIt != points->Get( ).end( );
51 if( image->TransformPhysicalPointToIndex( *pIt, idx ) )
52 filter->AddSeed( idx, 0 );
56 else if( indexes != NULL )
59 auto iIt = indexes->Get( ).begin( );
60 iIt != indexes->Get( ).end( );
63 filter->AddSeed( *iIt, 0 );
71 // -------------------------------------------------------------------------
72 template< class _TFilter >
73 void fpaPlugins::BaseImageFilter::
74 _ExecuteFilter( _TFilter* filter )
77 this->_ConfigureDebugger( filter );
79 this->_DeconfigureDebugger( filter );
82 auto out = this->GetOutputData( "Output" );
83 out->SetITK( filter->GetOutput( ) );
86 // -------------------------------------------------------------------------
87 template< class _TFilter >
88 void fpaPlugins::BaseImageFilter::
89 _ConfigureDebugger( _TFilter* filter )
91 typedef typename _TFilter::TInputImage _TImage;
92 typedef fpa::VTK::Image2DObserver< _TFilter, vtkRenderWindow > _2D;
93 typedef fpa::VTK::Image3DObserver< _TFilter, vtkRenderWindow > _3D;
95 this->m_Observers.clear( );
96 if( this->m_Parameters.GetBool( "VisualDebug" ) )
98 if( this->m_MPRViewer != NULL )
100 if( _TImage::ImageDimension == 2 )
102 auto iren = this->m_MPRViewer->GetInteractor( 2 );
105 typename _2D::Pointer debugger = _2D::New( );
106 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
107 debugger->SetRenderPercentage( 0.01 );
108 this->m_Observers.insert(
109 filter->AddObserver( itk::AnyEvent( ), debugger )
111 filter->ThrowEventsOn( );
115 else if( _TImage::ImageDimension == 3 )
117 auto iren = this->m_MPRViewer->GetInteractor( 3 );
120 typename _3D::Pointer debugger = _3D::New( );
121 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
122 debugger->SetRenderPercentage( 0.001 );
123 this->m_Observers.insert(
124 filter->AddObserver( itk::AnyEvent( ), debugger )
126 filter->ThrowEventsOn( );
134 if( this->m_SingleInteractor != NULL )
136 if( _TImage::ImageDimension == 2 )
139 else if( _TImage::ImageDimension == 3 )
148 // -------------------------------------------------------------------------
150 void fpaPlugins::BaseImageFilter::
151 _DeconfigureDebugger( F* filter )
155 auto oIt = this->m_Observers.begin( );
156 for( ; oIt != this->m_Observers.end( ); ++oIt )
157 filter->RemoveObserver( *oIt );
160 this->m_Observers.clear( );
163 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__