1 #ifndef __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
2 #define __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
4 #include <cpExtensions/cpExtensions_Export.h>
9 #include <vtkSmartPointer.h>
11 #include <vtkImageActor.h>
12 #include <vtkImageMapToColors.h>
13 #include <vtkImageSliceMapper.h>
15 #include <vtkPolyData.h>
16 #include <vtkPolyDataMapper.h>
17 #include <vtkPropCollection.h>
18 #include <vtkTextActor.h>
20 #include <cpExtensions/Visualization/ImageInteractorStyle.h>
22 // -------------------------------------------------------------------------
23 class vtkAlgorithmOutput;
27 // -------------------------------------------------------------------------
28 namespace cpExtensions
30 namespace Visualization
34 class cpExtensions_EXPORT ImageSliceActors
35 : public vtkPropCollection
38 typedef ImageSliceActors Self;
40 typedef void ( *TCursorCommand )( double*, int, void* );
41 typedef BaseInteractorStyle::TMouseCommand TMouseCommand;
42 typedef BaseInteractorStyle::TMouseWheelCommand TMouseWheelCommand;
43 typedef BaseInteractorStyle::TKeyCommand TKeyCommand;
44 typedef BaseInteractorStyle::TVoidCommand TVoidCommand;
47 vtkTypeMacro( ImageSliceActors, vtkPropCollection );
49 vtkGetMacro( MinWindow, double );
50 vtkGetMacro( MaxWindow, double );
51 vtkGetMacro( MinLevel, double );
52 vtkGetMacro( MaxLevel, double );
56 static ImageSliceActors* New( );
58 void AddCursorCommand( TCursorCommand command, void* data );
60 void AddInputConnection( vtkAlgorithmOutput* aout, int axis = 2 );
61 void AddInputData( vtkImageData* data, int axis = 2 );
64 void AssociateSlice( Self* other );
65 void SetSlicesCommand( TCursorCommand cmd, void* data );
67 vtkInteractorStyle* GetStyle( );
68 const vtkInteractorStyle* GetStyle( ) const;
70 void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
71 void PopActorsFrom( vtkRenderWindow* window );
72 unsigned int GetNumberOfImageActors( ) const;
73 vtkImageActor* GetImageActor( unsigned int id );
74 const vtkImageActor* GetImageActor( unsigned int id ) const;
75 vtkTextActor* GetTextActor( );
76 const vtkTextActor* GetTextActor( ) const;
77 vtkActor* GetPlaneActor( );
78 const vtkActor* GetPlaneActor( ) const;
79 vtkPlane* GetPlaneFunction( );
80 const vtkPlane* GetPlaneFunction( ) const;
82 void AddActor( vtkAlgorithm* algorithm, vtkActor* actor );
83 void AddActor( vtkActor* actor );
85 void SetInterpolate( bool v );
86 void InterpolateOn( );
87 void InterpolateOff( );
89 double* GetDisplayBounds( ) const;
90 void GetDisplayBounds( double bounds[ 6 ] ) const;
93 void SetCursor( double pos[ 3 ] );
95 vtkImageMapToColors* GetImageMap( unsigned int id );
96 const vtkImageMapToColors* GetImageMap( unsigned int id ) const;
98 double GetWindow( ) const;
99 double GetLevel( ) const;
100 void SetWindow( double w );
101 void SetLevel( double l );
102 void SetWindowLevel( double w, double l );
103 void ResetWindowLevel( );
105 void SetLookupTable( unsigned int id, vtkLookupTable* lut );
106 void SetLookupTableAsColor(
107 unsigned int id, double r, double g, double b
110 int GetAxis( ) const;
111 int GetSliceNumber( ) const;
112 int GetSliceNumberMinValue( ) const;
113 int GetSliceNumberMaxValue( ) const;
114 void SetSliceNumber( const int& slice );
115 void SetSlice( double* pos );
117 void UpdateText( double pos[ 3 ] );
118 void UpdateText( const double& w, const double& l );
122 virtual ~ImageSliceActors( );
124 void _ConfigureStyle( );
125 void _ConfigureNewLUT( vtkImageData* data );
126 void _ConfigureNewInput( int axis );
129 static void _MouseMoveCommand(
131 const BaseInteractorStyle::ButtonID& btn, double* pos,
132 bool alt, bool ctr, bool sft
134 static void _MouseClickCommand(
136 const BaseInteractorStyle::ButtonID& btn, double* pos,
137 bool alt, bool ctr, bool sft
139 static void _MouseDoubleClickCommand(
141 const BaseInteractorStyle::ButtonID& btn, double* pos,
142 bool alt, bool ctr, bool sft
144 static void _MouseWheelCommand(
146 const int& dir, bool alt, bool ctr, bool sft
148 static void _KeyCommand(
154 // Purposely not implemented
155 ImageSliceActors( const Self& );
156 Self& operator=( const Self& );
159 vtkSmartPointer< ImageInteractorStyle > m_Style;
162 std::vector< vtkSmartPointer< vtkImageMapToColors > > m_ImageMaps;
163 std::vector< vtkSmartPointer< vtkImageSliceMapper > > m_SliceMappers;
164 std::vector< vtkSmartPointer< vtkImageActor > > m_ImageActors;
167 // Window-Level values
168 double m_MinWindow, m_MaxWindow;
169 double m_MinLevel, m_MaxLevel;
171 // Other associated slices
172 std::vector< vtkSmartPointer< Self > > m_AssociatedSlices;
174 // Associated commands
175 std::vector< std::pair< TCursorCommand, void* > > m_CursorCommands;
177 // Other associated actors
178 typedef std::pair< vtkAlgorithm*, vtkActor* > TAssociatedActor;
179 typedef std::vector< TAssociatedActor > TAssociatedActors;
180 TAssociatedActors m_AssociatedActors;
183 vtkSmartPointer< vtkPolyData > m_Cursor;
184 vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
185 vtkSmartPointer< vtkActor > m_CursorActor;
186 vtkSmartPointer< vtkPlane > m_PlaneFunction;
187 vtkSmartPointer< vtkPolyData > m_Plane;
188 vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
189 char m_TextBuffer[ 1024 ];
190 vtkSmartPointer< vtkTextActor > m_TextActor;
191 vtkSmartPointer< vtkActor > m_PlaneActor;
193 double m_StartWindowLevelPos[ 3 ];
194 double m_StartWindowLevel[ 2 ];
201 #endif // __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__