]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/ImageSliceActors.h
Widget integration (step 5/6): generic widget controller finished and tested on linux...
[cpPlugins.git] / lib / cpExtensions / Visualization / ImageSliceActors.h
1 #ifndef __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
2 #define __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
3
4 #include <cpExtensions/cpExtensions_Export.h>
5
6 #include <utility>
7 #include <vector>
8
9 #include <vtkActor.h>
10 #include <vtkImageActor.h>
11 #include <vtkImageSliceMapper.h>
12 #include <vtkPlane.h>
13 #include <vtkPolyData.h>
14 #include <vtkPolyDataMapper.h>
15 #include <vtkPropCollection.h>
16 #include <vtkSmartPointer.h>
17 #include <vtkTextActor.h>
18
19 #include <cpExtensions/Visualization/ImageInteractorStyle.h>
20
21 // -------------------------------------------------------------------------
22 class vtkAlgorithmOutput;
23 class vtkImageData;
24
25 // -------------------------------------------------------------------------
26 namespace cpExtensions
27 {
28   namespace Visualization
29   {
30     /**
31      */
32     class cpExtensions_EXPORT ImageSliceActors
33       : public vtkPropCollection
34     {
35     public:
36       typedef ImageSliceActors Self;
37
38     public:
39       vtkTypeMacro( ImageSliceActors, vtkPropCollection );
40
41     public:
42       // Creation
43       static ImageSliceActors* New( );
44
45       void AddInputConnection( vtkAlgorithmOutput* aout, int axis = 2 );
46       void AddInputData( vtkImageData* data, int axis = 2 );
47       void Clear( );
48
49       vtkInteractorStyle* GetStyle( );
50       const vtkInteractorStyle* GetStyle( ) const;
51
52       void PushActorsInto( vtkRenderer* renderer );
53       void PopActorsFrom( vtkRenderer* renderer );
54       unsigned int GetNumberOfImageActors( ) const;
55       vtkImageActor* GetImageActor( unsigned int id );
56       const vtkImageActor* GetImageActor( unsigned int id ) const;
57       vtkTextActor* GetTextActor( );
58       const vtkTextActor* GetTextActor( ) const;
59       vtkActor* GetPlaneActor( );
60       const vtkActor* GetPlaneActor( ) const;
61       vtkPlane* GetPlaneFunction( );
62       const vtkPlane* GetPlaneFunction( ) const;
63
64       void AddActor( vtkAlgorithm* algorithm, vtkActor* actor );
65       void AddActor( vtkActor* actor );
66
67       void SetInterpolate( bool v );
68       void InterpolateOn( );
69       void InterpolateOff( );
70
71       double* GetDisplayBounds( ) const;
72       void GetDisplayBounds( double bounds[ 6 ] ) const;
73
74       int GetAxis( ) const;
75       int GetSliceNumber( ) const;
76       int GetSliceNumberMinValue( ) const;
77       int GetSliceNumberMaxValue( ) const;
78       void SetSliceNumber( const int& slice );
79       void UpdateText( );
80       void UpdateText( double pos[ 3 ] );
81       void UpdateText( const double& w, const double& l );
82
83     protected:
84       ImageSliceActors( );
85       virtual ~ImageSliceActors( );
86
87       void _ConfigureNewInput( int axis );
88
89       // Events
90       static void _MouseMoveCommand(
91         void* data,
92         const ImageInteractorStyle::ButtonID& btn, double* pos,
93         bool alt, bool ctr, bool sft
94         );
95       static void _MouseClickCommand(
96         void* data,
97         const ImageInteractorStyle::ButtonID& btn, double* pos,
98         bool alt, bool ctr, bool sft
99         );
100       static void _MouseDoubleClickCommand(
101         void* data,
102         const ImageInteractorStyle::ButtonID& btn, double* pos,
103         bool alt, bool ctr, bool sft
104         );
105       static void _MouseWheelCommand(
106         void* data,
107         const int& dir, bool alt, bool ctr, bool sft
108         );
109       static void _KeyCommand(
110         void* data,
111         const char& key
112         );
113
114     private:
115       // Purposely not implemented
116       ImageSliceActors( const Self& );
117       Self& operator=( const Self& );
118
119     protected:
120       vtkSmartPointer< ImageInteractorStyle > Style;
121
122       // Multiple actors
123       std::vector< vtkSmartPointer< vtkImageSliceMapper > > SliceMappers;
124       std::vector< vtkSmartPointer< vtkImageActor > >       ImageActors;
125       bool Interpolate;
126
127       // Other associated actors
128       typedef std::pair< vtkAlgorithm*, vtkActor* > TAssociatedActor;
129       typedef std::vector< TAssociatedActor >       TAssociatedActors;
130       TAssociatedActors AssociatedActors;
131
132       // Unique objects
133       vtkSmartPointer< vtkPlane >          PlaneFunction;
134       vtkSmartPointer< vtkPolyData >       PlaneSource;
135       vtkSmartPointer< vtkPolyDataMapper > PlaneMapper;
136       char                                 TextBuffer[ 1024 ];
137       vtkSmartPointer< vtkTextActor >      TextActor;
138       vtkSmartPointer< vtkActor >          PlaneActor;
139     };
140
141   } // ecapseman
142
143 } // ecapseman
144
145 #endif //  __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
146
147 // eof - $RCSfile$