#include <cpExtensions/cpExtensions_Export.h>
-#include <utility>
-#include <vector>
-
+#include <vtkSmartPointer.h>
#include <vtkActor.h>
#include <vtkImageActor.h>
#include <vtkImageSliceMapper.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkPropCollection.h>
-#include <vtkSmartPointer.h>
#include <vtkTextActor.h>
-#include <cpExtensions/Visualization/ImageInteractorStyle.h>
+#include <cpExtensions/Interaction/ImageInteractorStyle.h>
+#include <cpExtensions/Visualization/ImageBlender.h>
// -------------------------------------------------------------------------
class vtkAlgorithmOutput;
class vtkImageData;
+class vtkLookupTable;
+class vtkRenderer;
// -------------------------------------------------------------------------
namespace cpExtensions
public:
typedef ImageSliceActors Self;
+ typedef cpExtensions::Interaction::ImageInteractorStyle TStyle;
+ typedef TStyle::TMouseCommand TMouseCommand;
+ typedef TStyle::TMouseWheelCommand TMouseWheelCommand;
+ typedef TStyle::TKeyCommand TKeyCommand;
+ typedef TStyle::TVoidCommand TVoidCommand;
+ typedef TStyle::TMouseMoveCommand TMouseMoveCommand;
+ typedef TStyle::TMouseClickCommand TMouseClickCommand;
+ typedef TStyle::TMouseDoubleClickCommand TMouseDoubleClickCommand;
+ typedef TStyle::TExposeCommand TExposeCommand;
+ typedef TStyle::TConfigureCommand TConfigureCommand;
+ typedef TStyle::TEnterCommand TEnterCommand;
+ typedef TStyle::TLeaveCommand TLeaveCommand;
+ typedef void ( *TSlicesCommand )( double*, int, void* );
+ typedef void ( *TWindowLevelCommand )( double, double, void* );
+ typedef TVoidCommand TRenderCommand;
+
public:
vtkTypeMacro( ImageSliceActors, vtkPropCollection );
+ cpExtensions_BaseInteractorStyle_Commands( Slices );
+ cpExtensions_BaseInteractorStyle_Commands( WindowLevel );
+ cpExtensions_BaseInteractorStyle_Commands( Render );
+
public:
// Creation
static ImageSliceActors* New( );
- void AddInputConnection( vtkAlgorithmOutput* aout, int axis = 2 );
- void AddInputData( vtkImageData* data, int axis = 2 );
+ ImageBlender* GetBlender( );
+ const ImageBlender* GetBlender( ) const;
+ void SetBlender( ImageBlender* blender );
+ void SetAxis( int axis );
+ void AddInputConnection( vtkAlgorithmOutput* aout );
+ void AddInputData( vtkImageData* data );
void Clear( );
+ void AssociateSlice( Self* slice );
+
+ vtkImageData* GetInputImage( unsigned int id );
+ const vtkImageData* GetInputImage( unsigned int id ) const;
+
vtkInteractorStyle* GetStyle( );
const vtkInteractorStyle* GetStyle( ) const;
- void PushActorsInto( vtkRenderer* renderer );
- void PopActorsFrom( vtkRenderer* renderer );
- unsigned int GetNumberOfImageActors( ) const;
- vtkImageActor* GetImageActor( unsigned int id );
- const vtkImageActor* GetImageActor( unsigned int id ) const;
+ void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
+ void PopActorsFrom( vtkRenderWindow* window );
+ unsigned int GetNumberOfImages( ) const;
+ vtkImageActor* GetImageActor( );
+ const vtkImageActor* GetImageActor( ) const;
vtkTextActor* GetTextActor( );
const vtkTextActor* GetTextActor( ) const;
vtkActor* GetPlaneActor( );
vtkPlane* GetPlaneFunction( );
const vtkPlane* GetPlaneFunction( ) const;
- void AddActor( vtkAlgorithm* algorithm, vtkActor* actor );
- void AddActor( vtkActor* actor );
-
void SetInterpolate( bool v );
void InterpolateOn( );
void InterpolateOff( );
double* GetDisplayBounds( ) const;
void GetDisplayBounds( double bounds[ 6 ] ) const;
+ void ResetCursor( );
+ void SetCursor( double pos[ 3 ] );
+
+ double GetMinWindow( ) const;
+ double GetMaxWindow( ) const;
+ double GetMinLevel( ) const;
+ double GetMaxLevel( ) const;
+ double GetWindow( ) const;
+ double GetLevel( ) const;
+ void SetWindow( double w );
+ void SetLevel( double l );
+ void SetWindowLevel( double w, double l );
+ void ResetWindowLevel( );
+
int GetAxis( ) const;
int GetSliceNumber( ) const;
int GetSliceNumberMinValue( ) const;
int GetSliceNumberMaxValue( ) const;
void SetSliceNumber( const int& slice );
+ void SetSlice( double* pos );
void UpdateText( );
void UpdateText( double pos[ 3 ] );
void UpdateText( const double& w, const double& l );
+ void Render( const double& t );
+ void ResetCamera( );
+
protected:
ImageSliceActors( );
virtual ~ImageSliceActors( );
- void _ConfigureNewInput( int axis );
+ void _ConfigureStyle( );
// Events
static void _MouseMoveCommand(
void* data,
- const ImageInteractorStyle::ButtonID& btn, double* pos,
+ const TStyle::ButtonID& btn,
+ int* idx, double* pos,
bool alt, bool ctr, bool sft
);
static void _MouseClickCommand(
void* data,
- const ImageInteractorStyle::ButtonID& btn, double* pos,
- bool alt, bool ctr, bool sft
- );
- static void _MouseDoubleClickCommand(
- void* data,
- const ImageInteractorStyle::ButtonID& btn, double* pos,
+ const TStyle::ButtonID& btn,
+ int* idx, double* pos,
bool alt, bool ctr, bool sft
);
static void _MouseWheelCommand(
void* data,
const char& key
);
+ static void _EnterCommand( void* data );
+ static void _LeaveCommand( void* data );
private:
// Purposely not implemented
Self& operator=( const Self& );
protected:
- vtkSmartPointer< ImageInteractorStyle > Style;
+ vtkSmartPointer< TStyle > m_Style;
+ vtkRenderWindow* m_Window;
// Multiple actors
- std::vector< vtkSmartPointer< vtkImageSliceMapper > > SliceMappers;
- std::vector< vtkSmartPointer< vtkImageActor > > ImageActors;
- bool Interpolate;
+ vtkSmartPointer< ImageBlender > m_ImageBlender;
+ vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
+ vtkSmartPointer< vtkImageActor > m_ImageActor;
+ bool m_Interpolate;
+
+ int m_VisibleExtent[ 6 ];
+ double m_VisibleBounds[ 6 ];
- // Other associated actors
- typedef std::pair< vtkAlgorithm*, vtkActor* > TAssociatedActor;
- typedef std::vector< TAssociatedActor > TAssociatedActors;
- TAssociatedActors AssociatedActors;
+ // Associated slices
+ std::vector< Self* > m_AssociatedSlices;
// Unique objects
- vtkSmartPointer< vtkPlane > PlaneFunction;
- vtkSmartPointer< vtkPolyData > PlaneSource;
- vtkSmartPointer< vtkPolyDataMapper > PlaneMapper;
- char TextBuffer[ 1024 ];
- vtkSmartPointer< vtkTextActor > TextActor;
- vtkSmartPointer< vtkActor > PlaneActor;
+ vtkSmartPointer< vtkPolyData > m_Cursor;
+ vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
+ vtkSmartPointer< vtkActor > m_CursorActor;
+
+ vtkSmartPointer< vtkPolyData > m_HorizontalLine;
+ vtkSmartPointer< vtkPolyDataMapper > m_HorizontalLineMapper;
+ vtkSmartPointer< vtkActor > m_HorizontalLineActor;
+
+ vtkSmartPointer< vtkPolyData > m_VerticalLine;
+ vtkSmartPointer< vtkPolyDataMapper > m_VerticalLineMapper;
+ vtkSmartPointer< vtkActor > m_VerticalLineActor;
+
+ vtkSmartPointer< vtkPolyData > m_Plane;
+ vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
+ vtkSmartPointer< vtkActor > m_PlaneActor;
+
+ char m_TextBuffer[ 1024 ];
+ vtkSmartPointer< vtkTextActor > m_TextActor;
+
+ double m_StartWindowLevelPos[ 3 ];
+ double m_StartWindowLevel[ 2 ];
};
} // ecapseman