1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
4 #include <fpa_Instances/Observers.h>
5 #include <itkSimpleDataObjectDecorator.h>
7 #include <cpPlugins/Image.h>
8 #include <fpa/VTK/Image2DObserver.h>
9 #include <fpa/VTK/Image3DObserver.h>
10 #include <vtkRenderWindowInteractor.h>
12 #include <fpa/VTK/Image2DObserver.hxx>
13 #include <fpa/VTK/Image3DObserver.hxx>
16 // -------------------------------------------------------------------------
17 template< class _TFilter >
18 _TFilter* fpaPlugins::BaseImageFilter::
21 typedef typename _TFilter::TInputImage _TImage;
22 typedef typename _TImage::IndexType _TIndex;
23 typedef itk::Point< double, _TImage::ImageDimension > _TPoint;
24 typedef itk::SimpleDataObjectDecorator< std::vector< _TPoint > > _TPoints;
25 typedef itk::SimpleDataObjectDecorator< std::vector< _TIndex > > _TIndexes;
27 auto image = this->GetInputData( "Input" )->GetITK< _TImage >( );
30 auto points = this->GetInputData( "Seeds" )->GetITK< _TPoints >( );
31 auto indexes = this->GetInputData( "Seeds" )->GetITK< _TIndexes >( );
33 // Create filter and connect input
34 auto filter = this->_CreateITK< _TFilter >( );
35 filter->SetInput( image );
37 // Set numeric parameters
38 filter->SetNeighborhoodOrder(
39 this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
41 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
44 filter->ClearSeeds( );
48 auto pIt = points->Get( ).begin( );
49 pIt != points->Get( ).end( );
54 if( image->TransformPhysicalPointToIndex( *pIt, idx ) )
55 filter->AddSeed( idx, 0 );
59 else if( indexes != NULL )
62 auto iIt = indexes->Get( ).begin( );
63 iIt != indexes->Get( ).end( );
66 filter->AddSeed( *iIt, 0 );
74 // -------------------------------------------------------------------------
75 template< class _TFilter >
76 void fpaPlugins::BaseImageFilter::
77 _ExecuteFilter( _TFilter* filter )
80 this->_ConfigureDebugger( filter );
82 this->_DeconfigureDebugger( filter );
85 auto out = this->GetOutputData( "Output" );
86 out->SetITK( filter->GetOutput( ) );
89 // -------------------------------------------------------------------------
90 template< class _TFilter >
91 void fpaPlugins::BaseImageFilter::
92 _ConfigureDebugger( _TFilter* filter )
94 typedef typename _TFilter::TInputImage _TImage;
95 typedef fpa::VTK::Image2DObserver< _TFilter, vtkRenderWindow > _2D;
96 typedef fpa::VTK::Image3DObserver< _TFilter, vtkRenderWindow > _3D;
98 this->m_Observers.clear( );
99 if( this->m_Parameters.GetBool( "VisualDebug" ) )
101 if( this->m_MPRViewer != NULL )
103 if( _TImage::ImageDimension == 2 )
105 auto iren = this->m_MPRViewer->GetInteractor( 2 );
108 typename _2D::Pointer debugger = _2D::New( );
109 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
110 debugger->SetRenderPercentage( 0.01 );
111 this->m_Observers.insert(
112 filter->AddObserver( itk::AnyEvent( ), debugger )
114 filter->ThrowEventsOn( );
118 else if( _TImage::ImageDimension == 3 )
120 auto iren = this->m_MPRViewer->GetInteractor( 3 );
123 typename _3D::Pointer debugger = _3D::New( );
124 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
125 debugger->SetRenderPercentage( 0.001 );
126 this->m_Observers.insert(
127 filter->AddObserver( itk::AnyEvent( ), debugger )
129 filter->ThrowEventsOn( );
137 if( this->m_SingleInteractor != NULL )
139 if( _TImage::ImageDimension == 2 )
142 else if( _TImage::ImageDimension == 3 )
151 // -------------------------------------------------------------------------
153 void fpaPlugins::BaseImageFilter::
154 _DeconfigureDebugger( F* filter )
158 auto oIt = this->m_Observers.begin( );
159 for( ; oIt != this->m_Observers.end( ); ++oIt )
160 filter->RemoveObserver( *oIt );
163 this->m_Observers.clear( );
166 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__