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>
12 // -------------------------------------------------------------------------
13 template< class _TFilter >
14 _TFilter* fpaPlugins::BaseImageFilter::
17 typedef typename _TFilter::TInputImage _TImage;
18 typedef typename _TImage::IndexType _TIndex;
19 typedef itk::Point< double, _TImage::ImageDimension > _TPoint;
20 typedef itk::SimpleDataObjectDecorator< std::vector< _TPoint > > _TPoints;
21 typedef itk::SimpleDataObjectDecorator< std::vector< _TIndex > > _TIndexes;
23 auto image = this->GetInputData( "Input" )->GetITK< _TImage >( );
26 auto points = this->GetInputData( "Seeds" )->GetITK< _TPoints >( );
27 auto indexes = this->GetInputData( "Seeds" )->GetITK< _TIndexes >( );
29 // Create filter and connect input
30 auto filter = this->_CreateITK< _TFilter >( );
31 filter->SetInput( image );
33 // Set numeric parameters
34 filter->SetNeighborhoodOrder(
35 this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
37 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
40 filter->ClearSeeds( );
44 auto pIt = points->Get( ).begin( );
45 pIt != points->Get( ).end( );
50 if( image->TransformPhysicalPointToIndex( *pIt, idx ) )
51 filter->AddSeed( idx, 0 );
55 else if( indexes != NULL )
58 auto iIt = indexes->Get( ).begin( );
59 iIt != indexes->Get( ).end( );
62 filter->AddSeed( *iIt, 0 );
70 // -------------------------------------------------------------------------
71 template< class _TFilter >
72 void fpaPlugins::BaseImageFilter::
73 _ExecuteFilter( _TFilter* filter )
76 this->_ConfigureDebugger( filter );
78 this->_DeconfigureDebugger( filter );
81 auto out = this->GetOutputData( "Output" );
82 out->SetITK( filter->GetOutput( ) );
85 // -------------------------------------------------------------------------
86 template< class _TFilter >
87 void fpaPlugins::BaseImageFilter::
88 _ConfigureDebugger( _TFilter* filter )
90 typedef typename _TFilter::TInputImage _TImage;
91 typedef fpa::VTK::Image2DObserver< _TFilter, vtkRenderWindow > _2D;
92 typedef fpa::VTK::Image3DObserver< _TFilter, vtkRenderWindow > _3D;
94 this->m_Observers.clear( );
95 if( this->m_Parameters.GetBool( "VisualDebug" ) )
97 if( this->m_MPRViewer != NULL )
99 if( _TImage::ImageDimension == 2 )
101 auto iren = this->m_MPRViewer->GetInteractor( 2 );
104 typename _2D::Pointer debugger = _2D::New( );
105 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
106 debugger->SetRenderPercentage( 0.01 );
107 this->m_Observers.insert(
108 filter->AddObserver( itk::AnyEvent( ), debugger )
110 filter->ThrowEventsOn( );
114 else if( _TImage::ImageDimension == 3 )
116 auto iren = this->m_MPRViewer->GetInteractor( 3 );
119 typename _3D::Pointer debugger = _3D::New( );
120 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
121 debugger->SetRenderPercentage( 0.001 );
122 this->m_Observers.insert(
123 filter->AddObserver( itk::AnyEvent( ), debugger )
125 filter->ThrowEventsOn( );
133 if( this->m_SingleInteractor != NULL )
135 if( _TImage::ImageDimension == 2 )
138 else if( _TImage::ImageDimension == 3 )
147 // -------------------------------------------------------------------------
149 void fpaPlugins::BaseImageFilter::
150 _DeconfigureDebugger( F* filter )
154 auto oIt = this->m_Observers.begin( );
155 for( ; oIt != this->m_Observers.end( ); ++oIt )
156 filter->RemoveObserver( *oIt );
159 this->m_Observers.clear( );
162 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__