]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/BaseImageFilter.hxx
22d883762fd2882c08588d257dbe289d6884faa0
[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     _P pnt = seeds->GetPoint< _P >( s );
43     typename _I::IndexType idx;
44     if( image->TransformPhysicalPointToIndex( pnt, idx ) )
45       filter->AddSeed( idx, 0 );
46
47   } // rof
48
49   // Ok!
50   return( filter );
51 }
52
53 // -------------------------------------------------------------------------
54 template< class F >
55 void fpaPlugins::BaseImageFilter::
56 _ExecuteFilter( F* filter )
57 {
58   // Go!!!
59   this->_ConfigureDebugger( filter );
60   filter->Update( );
61   this->_DeconfigureDebugger( filter );
62
63   // Connect output
64   auto out =
65     this->GetOutputData< cpPlugins::Interface::Image >( "Output" );
66   out->SetITK( filter->GetOutput( ) );
67 }
68
69 // -------------------------------------------------------------------------
70 template< class F >
71 void fpaPlugins::BaseImageFilter::
72 _ConfigureDebugger( F* filter )
73 {
74   typedef typename F::TInputImage _I;
75   typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
76   typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
77
78   this->m_Observers.clear( );
79   if( this->m_Parameters->GetBool( "VisualDebug" ) )
80   {
81     if( this->m_MPRViewer != NULL )
82     {
83       if( _I::ImageDimension == 2 )
84       {
85         auto iren = this->m_MPRViewer->GetInteractor( 2 );
86         if( iren != NULL )
87         {
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 )
93             );
94           filter->ThrowEventsOn( );
95
96         } // fi
97       }
98       else if( _I::ImageDimension == 3 )
99       {
100         auto iren = this->m_MPRViewer->GetInteractor( 2 );
101         if( iren != NULL )
102         {
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 )
108             );
109           filter->ThrowEventsOn( );
110
111         } // fi
112
113       } // fi
114
115     } // fi
116
117     if( this->m_SingleInteractor != NULL )
118     {
119       if( _I::ImageDimension == 2 )
120       {
121       }
122       else if( _I::ImageDimension == 3 )
123       {
124       } // fi
125
126     } // fi
127
128   } // fi
129 }
130
131 // -------------------------------------------------------------------------
132 template< class F >
133 void fpaPlugins::BaseImageFilter::
134 _DeconfigureDebugger( F* filter )
135 {
136   if( filter != NULL )
137   {
138     auto oIt = this->m_Observers.begin( );
139     for( ; oIt != this->m_Observers.end( ); ++oIt )
140       filter->RemoveObserver( *oIt );
141
142   } // fi
143   this->m_Observers.clear( );
144 }
145
146 #endif // __FPAPLUGINS__BASEIMAGEFILTER__HXX__
147
148 // eof - $RCSfile$