1 #ifndef __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
2 #define __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
4 #include <cpExtensions/cpExtensions_Export.h>
6 #include <vtkSmartPointer.h>
8 #include <vtkImageActor.h>
9 #include <vtkImageSliceMapper.h>
10 #include <vtkLookupTable.h>
12 #include <vtkPolyData.h>
13 #include <vtkPolyDataMapper.h>
14 #include <vtkPropCollection.h>
15 #include <vtkTextActor.h>
17 #include <cpExtensions/Interaction/ImageInteractorStyle.h>
18 #include <cpExtensions/Visualization/ImageBlender.h>
20 // -------------------------------------------------------------------------
21 class vtkAlgorithmOutput;
26 // -------------------------------------------------------------------------
27 namespace cpExtensions
29 namespace Visualization
33 class cpExtensions_EXPORT ImageSliceActors
34 : public vtkPropCollection
37 typedef ImageSliceActors Self;
39 typedef cpExtensions::Interaction::ImageInteractorStyle TStyle;
40 typedef TStyle::TMouseCommand TMouseCommand;
41 typedef TStyle::TMouseWheelCommand TMouseWheelCommand;
42 typedef TStyle::TKeyCommand TKeyCommand;
43 typedef TStyle::TVoidCommand TVoidCommand;
44 typedef TStyle::TMouseMoveCommand TMouseMoveCommand;
45 typedef TStyle::TMouseClickCommand TMouseClickCommand;
46 typedef TStyle::TMouseDoubleClickCommand TMouseDoubleClickCommand;
47 typedef TStyle::TExposeCommand TExposeCommand;
48 typedef TStyle::TConfigureCommand TConfigureCommand;
49 typedef TStyle::TEnterCommand TEnterCommand;
50 typedef TStyle::TLeaveCommand TLeaveCommand;
51 typedef void ( *TSlicesCommand )( double*, int, void* );
52 typedef void ( *TWindowLevelCommand )( double, double, void* );
53 typedef TVoidCommand TRenderCommand;
55 typedef cpExtensions::Visualization::ImageBlender TBlender;
58 vtkTypeMacro( ImageSliceActors, vtkPropCollection );
60 cpExtensions_BaseInteractorStyle_Commands( Slices );
61 cpExtensions_BaseInteractorStyle_Commands( WindowLevel );
62 cpExtensions_BaseInteractorStyle_Commands( Render );
66 static ImageSliceActors* New( );
68 void SetAxis( int axis );
69 void SetInputConnection( vtkAlgorithmOutput* aout );
70 void SetInputImage( vtkImageData* data );
71 int AddBinaryConnection(
72 vtkAlgorithmOutput* aout,
73 const double& r, const double& g, const double& b
77 const double& r, const double& g, const double& b
81 void AssociateSlice( Self* slice );
83 vtkImageData* GetInputImage( );
84 const vtkImageData* GetInputImage( ) const;
86 vtkInteractorStyle* GetStyle( );
87 const vtkInteractorStyle* GetStyle( ) const;
89 void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
90 void PopActorsFrom( vtkRenderWindow* window );
91 unsigned int GetNumberOfImages( ) const;
93 vtkImageActor* GetImageActor( );
94 const vtkImageActor* GetImageActor( ) const;
95 vtkImageActor* GetBinaryActor( );
96 const vtkImageActor* GetBinaryActor( ) const;
97 vtkTextActor* GetTextActor( );
98 const vtkTextActor* GetTextActor( ) const;
99 vtkActor* GetPlaneActor( );
100 const vtkActor* GetPlaneActor( ) const;
101 vtkPlane* GetPlaneFunction( );
102 const vtkPlane* GetPlaneFunction( ) const;
104 void SetInterpolate( bool v );
105 void InterpolateOn( );
106 void InterpolateOff( );
108 double* GetDisplayBounds( ) const;
109 void GetDisplayBounds( double bounds[ 6 ] ) const;
112 void SetCursor( double pos[ 3 ] );
114 void ResetAxesCursor( );
115 void SetAxesCursor( double pos[ 3 ] );
117 double GetMinWindow( ) const;
118 double GetMaxWindow( ) const;
119 double GetMinLevel( ) const;
120 double GetMaxLevel( ) const;
121 double GetWindow( ) const;
122 double GetLevel( ) const;
123 void SetWindow( double w );
124 void SetLevel( double l );
125 void SetWindowLevel( double w, double l );
126 void ResetWindowLevel( );
128 int GetAxis( ) const;
129 int GetSliceNumber( ) const;
130 int GetSliceNumberMinValue( ) const;
131 int GetSliceNumberMaxValue( ) const;
132 void SetSliceNumber( const int& slice );
133 void SetSlice( double* pos );
135 void UpdateText( double pos[ 3 ] );
136 void UpdateText( const double& w, const double& l );
140 virtual ~ImageSliceActors( );
143 void _ResetCamera( );
144 void _ConfigureStyle( );
145 void _ConfigureInputImage( );
146 void _ConfigureBinaryImage(
147 const double& r, const double& g, const double& b
151 static void _MouseMoveCommand(
153 const TStyle::ButtonID& btn,
154 int* idx, double* pos,
155 bool alt, bool ctr, bool sft
157 static void _MouseClickCommand(
159 const TStyle::ButtonID& btn,
160 int* idx, double* pos,
161 bool alt, bool ctr, bool sft
163 static void _MouseWheelCommand(
165 const int& dir, bool alt, bool ctr, bool sft
167 static void _KeyCommand(
171 static void _EnterCommand( void* data );
172 static void _LeaveCommand( void* data );
175 // Purposely not implemented
176 ImageSliceActors( const Self& );
177 Self& operator=( const Self& );
180 static double m_PlaneColors[ 3 ][ 3 ];
182 vtkSmartPointer< TStyle > m_Style;
183 vtkRenderWindow* m_Window;
186 vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
187 vtkSmartPointer< vtkImageActor > m_ImageActor;
189 vtkSmartPointer< vtkImageData > m_BlenderBase;
190 vtkSmartPointer< TBlender > m_Blender;
191 vtkSmartPointer< vtkImageSliceMapper > m_BlenderMapper;
192 vtkSmartPointer< vtkLookupTable > m_BlenderLUT;
193 vtkSmartPointer< vtkImageActor > m_BlenderActor;
197 double m_WLRange[ 4 ];
199 int m_VisibleExtent[ 6 ];
200 double m_VisibleBounds[ 6 ];
203 std::vector< Self* > m_AssociatedSlices;
206 vtkSmartPointer< vtkPolyData > m_Cursor;
207 vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
208 vtkSmartPointer< vtkActor > m_CursorActor;
210 vtkSmartPointer< vtkPolyData > m_Axis1;
211 vtkSmartPointer< vtkPolyDataMapper > m_Axis1Mapper;
212 vtkSmartPointer< vtkActor > m_Axis1Actor;
214 vtkSmartPointer< vtkPolyData > m_Axis2;
215 vtkSmartPointer< vtkPolyDataMapper > m_Axis2Mapper;
216 vtkSmartPointer< vtkActor > m_Axis2Actor;
218 vtkSmartPointer< vtkPolyData > m_Plane;
219 vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
220 vtkSmartPointer< vtkActor > m_PlaneActor;
222 char m_TextBuffer[ 1024 ];
223 vtkSmartPointer< vtkTextActor > m_TextActor;
225 double m_StartWindowLevelPos[ 3 ];
226 double m_StartWindowLevel[ 2 ];
233 #endif // __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__