1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
4 #include <cpExtensions/DataStructures/ImageIndexesContainer.h>
5 #include <fpa_Instances/Observers.h>
7 // -------------------------------------------------------------------------
8 template< class _TFilter >
9 _TFilter* fpaPlugins::BaseImageFilter::
12 typedef typename _TFilter::TInputImage _TImage;
13 static const unsigned int Dim = _TImage::ImageDimension;
15 auto image = this->GetInputData< _TImage >( "Input" );
18 auto seeds = this->GetInputData< vtkPoints >( "Seeds" );
20 // Create filter and connect input
21 auto filter = this->_CreateITK< _TFilter >( );
22 filter->SetInput( image );
24 // Set numeric parameters
25 filter->SetNeighborhoodOrder(
26 this->m_Parameters.GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
28 filter->SetStopAtOneFront( this->m_Parameters.GetBool( "StopAtOneFront" ) );
31 filter->ClearSeeds( );
34 typename _TImage::PointType pnt;
35 typename _TImage::IndexType idx;
37 ( _TImage::ImageDimension < 3 )? _TImage::ImageDimension: 3;
38 for( unsigned int i = 0; i < seeds->GetNumberOfPoints( ); ++i )
41 seeds->GetPoint( i, buf );
43 for( unsigned int d = 0; d < dim; ++d )
46 if( image->TransformPhysicalPointToIndex( pnt, idx ) )
47 filter->AddSeed( idx, 0 );
57 // -------------------------------------------------------------------------
58 template< class _TFilter >
59 void fpaPlugins::BaseImageFilter::
60 _ExecuteFilter( _TFilter* filter )
63 // this->_ConfigureDebugger( filter );
65 // this->_DeconfigureDebugger( filter );
68 this->GetOutput( "Output" )->SetITK( filter->GetOutput( ) );
71 // -------------------------------------------------------------------------
72 template< class _TFilter >
73 void fpaPlugins::BaseImageFilter::
74 _ConfigureDebugger( _TFilter* filter )
76 typedef typename _TFilter::TInputImage _TImage;
77 typedef fpa::VTK::Image::Observer2D< _TFilter, vtkRenderWindow > _2D;
78 typedef fpa::VTK::Image::Observer3D< _TFilter, vtkRenderWindow > _3D;
80 this->m_Observers.clear( );
81 if( this->m_Parameters.GetBool( "VisualDebug" ) )
83 if( this->m_MPRViewer != NULL )
85 if( _TImage::ImageDimension == 2 )
87 auto iren = this->m_MPRViewer->GetInteractor( 2 );
90 typename _2D::Pointer debugger = _2D::New( );
91 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
92 debugger->SetRenderPercentage( 0.01 );
93 this->m_Observers.insert(
94 filter->AddObserver( itk::AnyEvent( ), debugger )
96 filter->ThrowEventsOn( );
100 else if( _TImage::ImageDimension == 3 )
102 auto iren = this->m_MPRViewer->GetInteractor( 3 );
105 typename _3D::Pointer debugger = _3D::New( );
106 debugger->SetRenderWindow( iren->GetRenderWindow( ) );
107 debugger->SetRenderPercentage( 0.001 );
108 this->m_Observers.insert(
109 filter->AddObserver( itk::AnyEvent( ), debugger )
111 filter->ThrowEventsOn( );
119 if( this->m_SingleInteractor != NULL )
121 if( _TImage::ImageDimension == 2 )
124 else if( _TImage::ImageDimension == 3 )
133 // -------------------------------------------------------------------------
135 void fpaPlugins::BaseImageFilter::
136 _DeconfigureDebugger( F* filter )
140 auto oIt = this->m_Observers.begin( );
141 for( ; oIt != this->m_Observers.end( ); ++oIt )
142 filter->RemoveObserver( *oIt );
145 this->m_Observers.clear( );
148 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__