]> 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           std::cout << "OK 3D" << std::endl;
90           typename _3D::Pointer debugger = _3D::New( );
91           debugger->SetRenderWindow( iren->GetRenderWindow( ) );
92           debugger->SetRenderPercentage( 0.001 );
93           this->m_Observers.insert(
94             filter->AddObserver( itk::AnyEvent( ), debugger )
95             );
96           filter->ThrowEventsOn( );
97
98         } // fi
99
100       } // fi
101
102     } // fi
103
104     if( this->m_SingleInteractor != NULL )
105     {
106       if( _I::ImageDimension == 2 )
107       {
108       }
109       else if( _I::ImageDimension == 3 )
110       {
111       } // fi
112
113     } // fi
114
115   } // fi
116 }
117
118 // -------------------------------------------------------------------------
119 template< class F >
120 void fpaPlugins::BaseImageFilter::
121 _DeconfigureDebugger( F* filter )
122 {
123   if( filter != NULL )
124   {
125     auto oIt = this->m_Observers.begin( );
126     for( ; oIt != this->m_Observers.end( ); ++oIt )
127       filter->RemoveObserver( *oIt );
128
129   } // fi
130   this->m_Observers.clear( );
131 }
132
133 #endif // __FPAPLUGINS__BASEIMAGEFILTER__H__
134
135 // eof - $RCSfile$