1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
4 #include <cpPlugins/Interface/Image.h>
5 #include <cpPlugins/Interface/PointList.h>
6 #include <cpPlugins/Interface/SimpleMPRWidget.h>
8 #include <fpa/VTK/Image2DObserver.h>
9 #include <fpa/VTK/Image3DObserver.h>
11 #include <vtkRenderWindowInteractor.h>
13 // -------------------------------------------------------------------------
15 F* fpaPlugins::BaseImageFilter::
18 typedef typename F::TInputImage _I;
19 typedef typename _I::PointType _P;
22 this->GetInputData< cpPlugins::Interface::Image >( "Input" )->
25 this->GetInputData< cpPlugins::Interface::PointList >( "Seeds" );
27 // Create filter and connect input
28 F* filter = this->_CreateITK< F >( );
29 filter->SetInput( image );
31 // Set numeric parameters
32 Superclass::TParameters* params = this->m_Parameters;
33 filter->SetNeighborhoodOrder(
34 params->GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
36 filter->SetStopAtOneFront( params->GetBool( "StopAtOneFront" ) );
39 filter->ClearSeeds( );
40 for( unsigned int s = 0; s < seeds->GetNumberOfPoints( ); ++s )
42 if( seeds->HaveEuclideanPoints( ) )
44 _P pnt = seeds->GetPoint< _P >( s );
45 typename _I::IndexType idx;
46 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
47 filter->AddSeed( idx, 0 );
50 filter->AddSeed( seeds->GetPoint< typename _I::IndexType >( s ), 0 );
58 // -------------------------------------------------------------------------
60 void fpaPlugins::BaseImageFilter::
61 _ExecuteFilter( F* filter )
64 this->_ConfigureDebugger( filter );
66 this->_DeconfigureDebugger( filter );
70 this->GetOutputData< cpPlugins::Interface::Image >( "Output" );
71 out->SetITK( filter->GetOutput( ) );
74 // -------------------------------------------------------------------------
76 void fpaPlugins::BaseImageFilter::
77 _ConfigureDebugger( F* filter )
79 typedef typename F::TInputImage _I;
80 typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
81 typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
83 this->m_Observers.clear( );
84 if( this->m_Parameters->GetBool( "VisualDebug" ) )
86 if( this->m_MPRViewer != NULL )
88 if( _I::ImageDimension == 2 )
90 auto iren = this->m_MPRViewer->GetInteractor( 2 );
93 typename _2D::Pointer debugger = _2D::New( );
94 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
95 debugger->SetRenderPercentage( 0.01 );
96 this->m_Observers.insert(
97 filter->AddObserver( itk::AnyEvent( ), debugger )
99 filter->ThrowEventsOn( );
103 else if( _I::ImageDimension == 3 )
105 auto iren = this->m_MPRViewer->GetInteractor( 3 );
108 typename _3D::Pointer debugger = _3D::New( );
109 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
110 debugger->SetRenderPercentage( 0.001 );
111 this->m_Observers.insert(
112 filter->AddObserver( itk::AnyEvent( ), debugger )
114 filter->ThrowEventsOn( );
122 if( this->m_SingleInteractor != NULL )
124 if( _I::ImageDimension == 2 )
127 else if( _I::ImageDimension == 3 )
136 // -------------------------------------------------------------------------
138 void fpaPlugins::BaseImageFilter::
139 _DeconfigureDebugger( F* filter )
143 auto oIt = this->m_Observers.begin( );
144 for( ; oIt != this->m_Observers.end( ); ++oIt )
145 filter->RemoveObserver( *oIt );
148 this->m_Observers.clear( );
151 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__