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