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>
7 #include <cpExtensions/DataStructures/VectorValuesContainer.h>
9 #include <fpa/VTK/Image2DObserver.h>
10 #include <fpa/VTK/Image3DObserver.h>
12 #include <vtkRenderWindowInteractor.h>
14 // -------------------------------------------------------------------------
16 F* fpaPlugins::BaseImageFilter::
19 typedef typename F::TInputImage _I;
20 typedef itk::Point< double, _I::ImageDimension > _Pnt;
21 typedef typename _I::IndexType _Idx;
22 typedef cpExtensions::DataStructures::VectorValuesContainer< _Pnt > _CPnt;
23 typedef cpExtensions::DataStructures::VectorValuesContainer< _Idx > _CIdx;
25 auto image = this->GetInputData( "Input" )->GetITK< _I >( );
26 auto seeds = this->GetInputData( "Seeds" );
27 auto p_seeds = seeds->GetITK< _CPnt >( );
28 auto i_seeds = seeds->GetITK< _CIdx >( );
30 // Create filter and connect input
31 F* filter = this->_CreateITK< F >( );
32 filter->SetInput( image );
34 // Set numeric parameters
35 Superclass::TParameters* params = this->m_Parameters;
36 filter->SetNeighborhoodOrder(
37 params->GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
39 filter->SetStopAtOneFront( params->GetBool( "StopAtOneFront" ) );
42 filter->ClearSeeds( );
45 for( auto pIt = p_seeds->Begin( ); pIt != p_seeds->End( ); ++pIt )
48 if( image->TransformPhysicalPointToIndex( *pIt, idx ) )
49 filter->AddSeed( idx, 0 );
53 else if( i_seeds != NULL )
55 for( auto iIt = i_seeds->Begin( ); iIt != i_seeds->End( ); ++iIt )
56 filter->AddSeed( *iIt, 0 );
64 // -------------------------------------------------------------------------
66 void fpaPlugins::BaseImageFilter::
67 _ExecuteFilter( F* filter )
70 this->_ConfigureDebugger( filter );
72 this->_DeconfigureDebugger( filter );
75 auto out = this->GetOutputData( "Output" );
76 out->SetITK( filter->GetOutput( ) );
79 // -------------------------------------------------------------------------
81 void fpaPlugins::BaseImageFilter::
82 _ConfigureDebugger( F* filter )
84 typedef typename F::TInputImage _I;
85 typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
86 typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
88 this->m_Observers.clear( );
89 if( this->m_Parameters->GetBool( "VisualDebug" ) )
91 if( this->m_MPRViewer != NULL )
93 if( _I::ImageDimension == 2 )
95 auto iren = this->m_MPRViewer->GetInteractor( 2 );
98 typename _2D::Pointer debugger = _2D::New( );
99 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
100 debugger->SetRenderPercentage( 0.01 );
101 this->m_Observers.insert(
102 filter->AddObserver( itk::AnyEvent( ), debugger )
104 filter->ThrowEventsOn( );
108 else if( _I::ImageDimension == 3 )
110 auto iren = this->m_MPRViewer->GetInteractor( 3 );
113 typename _3D::Pointer debugger = _3D::New( );
114 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
115 debugger->SetRenderPercentage( 0.001 );
116 this->m_Observers.insert(
117 filter->AddObserver( itk::AnyEvent( ), debugger )
119 filter->ThrowEventsOn( );
127 if( this->m_SingleInteractor != NULL )
129 if( _I::ImageDimension == 2 )
132 else if( _I::ImageDimension == 3 )
141 // -------------------------------------------------------------------------
143 void fpaPlugins::BaseImageFilter::
144 _DeconfigureDebugger( F* filter )
148 auto oIt = this->m_Observers.begin( );
149 for( ; oIt != this->m_Observers.end( ); ++oIt )
150 filter->RemoveObserver( *oIt );
153 this->m_Observers.clear( );
156 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__