]> Creatis software - FrontAlgorithms.git/blob - lib/fpaPlugins/BaseImageFilter.h
...
[FrontAlgorithms.git] / lib / fpaPlugins / BaseImageFilter.h
1 #ifndef __FPAPLUGINS__BASEIMAGEFILTER__H__
2 #define __FPAPLUGINS__BASEIMAGEFILTER__H__
3
4 #include <fpaPlugins/fpaPlugins_Export.h>
5 #include <cpPlugins/Interface/BaseProcessObjects.h>
6
7 namespace fpaPlugins
8 {
9   /**
10    */
11   class fpaPlugins_EXPORT BaseImageFilter
12     : public cpPlugins::Interface::ImageToImageFilter
13   {
14   public:
15     typedef BaseImageFilter                          Self;
16     typedef cpPlugins::Interface::ImageToImageFilter Superclass;
17     typedef itk::SmartPointer< Self >                Pointer;
18     typedef itk::SmartPointer< const Self >          ConstPointer;
19
20   public:
21     itkTypeMacro(
22       BaseImageFilter, cpPlugins::Interface::ImageToImageFilter
23       );
24     cpPlugins_Id_Macro(
25       BaseImageFilter, FrontPropagationImageAlgorithm
26       );
27
28   protected:
29     BaseImageFilter( );
30     virtual ~BaseImageFilter( );
31
32     template< class F >
33       void _ConfigureDebugger( F* filter );
34
35     template< class F >
36       void _DeconfigureDebugger( F* filter );
37
38   private:
39     // Purposely not implemented.
40     BaseImageFilter( const Self& other );
41     Self& operator=( const Self& other );
42
43   protected:
44     std::set< unsigned long > m_Observers;
45   };
46
47 } // ecapseman
48
49 // -------------------------------------------------------------------------
50 #include <fpa/VTK/Image2DObserver.h>
51 #include <fpa/VTK/Image3DObserver.h>
52 #include <cpPlugins/Interface/SimpleMPRWidget.h>
53 #include <vtkRenderWindowInteractor.h>
54
55 // -------------------------------------------------------------------------
56 template< class F >
57 void fpaPlugins::BaseImageFilter::
58 _ConfigureDebugger( F* filter )
59 {
60   typedef typename F::TInputImage _I;
61   typedef fpa::VTK::Image2DObserver< F, vtkRenderWindow > _2D;
62   typedef fpa::VTK::Image3DObserver< F, vtkRenderWindow > _3D;
63
64   this->m_Observers.clear( );
65   if( this->m_Parameters->GetBool( "VisualDebug" ) )
66   {
67     if( this->m_MPRViewer != NULL )
68     {
69       if( _I::ImageDimension == 2 )
70       {
71         auto iren = this->m_MPRViewer->GetInteractor( 2 );
72         if( iren != NULL )
73         {
74           typename _2D::Pointer debugger = _2D::New( );
75           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
76           debugger->SetRenderPercentage( 0.01 );
77           this->m_Observers.insert(
78             filter->AddObserver( itk::AnyEvent( ), debugger )
79             );
80           filter->ThrowEventsOn( );
81
82         } // fi
83       }
84       else if( _I::ImageDimension == 3 )
85       {
86         auto iren = this->m_MPRViewer->GetInteractor( 2 );
87         if( iren != NULL )
88         {
89           typename _3D::Pointer debugger = _3D::New( );
90           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
91           debugger->SetRenderPercentage( 0.001 );
92           this->m_Observers.insert(
93             filter->AddObserver( itk::AnyEvent( ), debugger )
94             );
95           filter->ThrowEventsOn( );
96
97         } // fi
98
99       } // fi
100
101     } // fi
102
103     if( this->m_SingleInteractor != NULL )
104     {
105       if( _I::ImageDimension == 2 )
106       {
107       }
108       else if( _I::ImageDimension == 3 )
109       {
110       } // fi
111
112     } // fi
113
114   } // fi
115 }
116
117 // -------------------------------------------------------------------------
118 template< class F >
119 void fpaPlugins::BaseImageFilter::
120 _DeconfigureDebugger( F* filter )
121 {
122   if( filter != NULL )
123   {
124     auto oIt = this->m_Observers.begin( );
125     for( ; oIt != this->m_Observers.end( ); ++oIt )
126       filter->RemoveObserver( *oIt );
127
128   } // fi
129   this->m_Observers.clear( );
130 }
131
132 #endif // __FPAPLUGINS__BASEIMAGEFILTER__H__
133
134 // eof - $RCSfile$