]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/BaseImageFilter.hxx
Branches extraction algorithm from MSTs updated
[FrontAlgorithms.git] / lib / fpaPlugins / BaseImageFilter.hxx
1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__HXX__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__HXX__
3
4 #include <cpPlugins/Interface/Image.h>
5 #include <cpPlugins/Interface/PointList.h>
6 #include <cpPlugins/Interface/SimpleMPRWidget.h>
7
8 #include <fpa/VTK/Image2DObserver.h>
9 #include <fpa/VTK/Image3DObserver.h>
10
11 #include <vtkRenderWindowInteractor.h>
12
13 // -------------------------------------------------------------------------
14 template< class F >
15 F* fpaPlugins::BaseImageFilter::
16 _ConfigureFilter( )
17 {
18   typedef typename F::TInputImage _I;
19   typedef typename _I::PointType  _P;
20
21   auto image =
22     this->GetInputData< cpPlugins::Interface::Image >( "Input" )->
23     GetITK< _I >( );
24   auto seeds =
25     this->GetInputData< cpPlugins::Interface::PointList >( "Seeds" );
26
27   // Create filter and connect input
28   F* filter = this->_CreateITK< F >( );
29   filter->SetInput( image );
30
31   // Set numeric parameters
32   Superclass::TParameters* params = this->m_Parameters;
33   filter->SetNeighborhoodOrder(
34     params->GetSelectedChoice( "NeighborhoodOrder" )[ 0 ] - '0'
35     );
36   filter->SetStopAtOneFront( params->GetBool( "StopAtOneFront" ) );
37
38   // Assign seeds
39   filter->ClearSeeds( );
40   for( unsigned int s = 0; s < seeds->GetNumberOfPoints( ); ++s )
41   {
42     if( seeds->HaveEuclideanPoints( ) )
43     {
44       _P pnt = seeds->GetPoint< _P >( s );
45       typename _I::IndexType idx;
46       if( image->TransformPhysicalPointToIndex( pnt, idx ) )
47         filter->AddSeed( idx, 0 );
48     }
49     else
50       filter->AddSeed( seeds->GetPoint< typename _I::IndexType >( s ), 0 );
51
52   } // rof
53
54   // Ok!
55   return( filter );
56 }
57
58 // -------------------------------------------------------------------------
59 template< class F >
60 void fpaPlugins::BaseImageFilter::
61 _ExecuteFilter( F* filter )
62 {
63   // Go!!!
64   this->_ConfigureDebugger( filter );
65   filter->Update( );
66   this->_DeconfigureDebugger( filter );
67
68   // Connect output
69   auto out =
70     this->GetOutputData< cpPlugins::Interface::Image >( "Output" );
71   out->SetITK( filter->GetOutput( ) );
72 }
73
74 // -------------------------------------------------------------------------
75 template< class F >
76 void fpaPlugins::BaseImageFilter::
77 _ConfigureDebugger( F* filter )
78 {
79   typedef typename F::TInputImage _I;
80   typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
81   typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
82
83   this->m_Observers.clear( );
84   if( this->m_Parameters->GetBool( "VisualDebug" ) )
85   {
86     if( this->m_MPRViewer != NULL )
87     {
88       if( _I::ImageDimension == 2 )
89       {
90         auto iren = this->m_MPRViewer->GetInteractor( 2 );
91         if( iren != NULL )
92         {
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 )
98             );
99           filter->ThrowEventsOn( );
100
101         } // fi
102       }
103       else if( _I::ImageDimension == 3 )
104       {
105         auto iren = this->m_MPRViewer->GetInteractor( 3 );
106         if( iren != NULL )
107         {
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 )
113             );
114           filter->ThrowEventsOn( );
115
116         } // fi
117
118       } // fi
119
120     } // fi
121
122     if( this->m_SingleInteractor != NULL )
123     {
124       if( _I::ImageDimension == 2 )
125       {
126       }
127       else if( _I::ImageDimension == 3 )
128       {
129       } // fi
130
131     } // fi
132
133   } // fi
134 }
135
136 // -------------------------------------------------------------------------
137 template< class F >
138 void fpaPlugins::BaseImageFilter::
139 _DeconfigureDebugger( F* filter )
140 {
141   if( filter != NULL )
142   {
143     auto oIt = this->m_Observers.begin( );
144     for( ; oIt != this->m_Observers.end( ); ++oIt )
145       filter->RemoveObserver( *oIt );
146
147   } // fi
148   this->m_Observers.clear( );
149 }
150
151 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__
152
153 // eof - $RCSfile$