]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/VTK/Image3DObserver.h
860946d78794451d3bbae28d23d8b00128921794
[FrontAlgorithms.git] / lib / fpa / VTK / Image3DObserver.h
1 #ifndef __FPA__VTK__IMAGE3DOBSERVER__H__
2 #define __FPA__VTK__IMAGE3DOBSERVER__H__
3
4 #include <map>
5
6 #include <itkCommand.h>
7
8 #include <vtkActor.h>
9 #include <vtkPolyData.h>
10 #include <vtkPolyDataMapper.h>
11 #include <vtkSmartPointer.h>
12
13 namespace fpa
14 {
15   namespace VTK
16   {
17     /**
18      */
19     template< class F, class R >
20     class Image3DObserver
21       : public itk::Command
22     {
23     public:
24       typedef Image3DObserver                 Self;
25       typedef itk::Command                    Superclass;
26       typedef itk::SmartPointer< Self >       Pointer;
27       typedef itk::SmartPointer< const Self > ConstPointer;
28
29       typedef F                             TFilter;
30       typedef R                             TRenderWindow;
31       typedef typename TFilter::TInputImage TImage;
32       typedef typename TFilter::TVertex     TVertex;
33
34       typedef std::pair< unsigned long, unsigned long > TVertexIds;
35
36       struct TVertexCmp
37       {
38         bool operator()( const TVertex& a, const TVertex& b ) const
39           {
40             unsigned int d = 0;
41             while( d < TVertex::Dimension && a[ d ] == b[ d ] )
42               d++;
43             if( d < TVertex::Dimension )
44               return( a[ d ] < b[ d ] );
45             else
46               return( false );
47           }
48       };
49       typedef std::map< TVertex, TVertexIds, TVertexCmp > TVertices;
50
51     public:
52       itkNewMacro( Self );
53       itkTypeMacro( Image3DObserver, itkCommand );
54
55     public:
56       void SetImage( const TImage* img, R* rw );
57       void Render( );
58       void Execute( itk::Object* c, const itk::EventObject& e )
59         { this->Execute( ( const itk::Object* )( c ), e ); }
60       void Execute( const itk::Object* c, const itk::EventObject& e );
61
62     protected:
63       Image3DObserver( );
64       virtual ~Image3DObserver( )
65         { }
66
67     private:
68       Image3DObserver( const Self& ); // Not impl.
69       void operator=( const Self& );  // Not impl.
70
71     protected:
72       typename TImage::ConstPointer m_Image;
73
74       R*            m_RenderWindow;
75       unsigned long m_Number;
76       unsigned long m_Percentage;
77
78       vtkSmartPointer< vtkPolyData > m_PolyData;
79       vtkSmartPointer< vtkPolyDataMapper > m_PolyDataMapper;
80       vtkSmartPointer< vtkActor > m_PolyDataActor;
81
82       TVertices m_Vertices;
83     };
84
85   } // ecapseman
86
87 } // ecapseman
88
89 #include <fpa/VTK/Image3DObserver.hxx>
90
91 #endif // __FPA__VTK__IMAGE3DOBSERVER__H__
92
93 // eof - $RCSfile$