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 _P pnt = seeds->GetPoint< _P >( s );
43 typename _I::IndexType idx;
44 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
45 filter->AddSeed( idx, 0 );
53 // -------------------------------------------------------------------------
55 void fpaPlugins::BaseImageFilter::
56 _ExecuteFilter( F* filter )
59 this->_ConfigureDebugger( filter );
61 this->_DeconfigureDebugger( filter );
65 this->GetOutputData< cpPlugins::Interface::Image >( "Output" );
66 out->SetITK( filter->GetOutput( ) );
69 // -------------------------------------------------------------------------
71 void fpaPlugins::BaseImageFilter::
72 _ConfigureDebugger( F* filter )
74 typedef typename F::TInputImage _I;
75 typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
76 typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
78 this->m_Observers.clear( );
79 if( this->m_Parameters->GetBool( "VisualDebug" ) )
81 if( this->m_MPRViewer != NULL )
83 if( _I::ImageDimension == 2 )
85 auto iren = this->m_MPRViewer->GetInteractor( 2 );
88 typename _2D::Pointer debugger = _2D::New( );
89 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
90 debugger->SetRenderPercentage( 0.01 );
91 this->m_Observers.insert(
92 filter->AddObserver( itk::AnyEvent( ), debugger )
94 filter->ThrowEventsOn( );
98 else if( _I::ImageDimension == 3 )
100 auto iren = this->m_MPRViewer->GetInteractor( 2 );
103 typename _3D::Pointer debugger = _3D::New( );
104 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
105 debugger->SetRenderPercentage( 0.001 );
106 this->m_Observers.insert(
107 filter->AddObserver( itk::AnyEvent( ), debugger )
109 filter->ThrowEventsOn( );
117 if( this->m_SingleInteractor != NULL )
119 if( _I::ImageDimension == 2 )
122 else if( _I::ImageDimension == 3 )
131 // -------------------------------------------------------------------------
133 void fpaPlugins::BaseImageFilter::
134 _DeconfigureDebugger( F* filter )
138 auto oIt = this->m_Observers.begin( );
139 for( ; oIt != this->m_Observers.end( ); ++oIt )
140 filter->RemoveObserver( *oIt );
143 this->m_Observers.clear( );
146 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__