#include <cpExtensions/cpExtensions_Export.h>
-#include <map>
-#include <utility>
-
#include <vtkSmartPointer.h>
#include <vtkActor.h>
#include <vtkImageActor.h>
-#include <vtkImageMapToColors.h>
#include <vtkImageSliceMapper.h>
#include <vtkPlane.h>
#include <vtkPolyData.h>
#include <vtkTextActor.h>
#include <cpExtensions/Interaction/ImageInteractorStyle.h>
+#include <cpExtensions/Visualization/ImageBlender.h>
// -------------------------------------------------------------------------
class vtkAlgorithmOutput;
public:
typedef ImageSliceActors Self;
- typedef cpExtensions::Interaction::BaseInteractorStyle TBaseStyle;
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 TBaseStyle::TMouseCommand TMouseCommand;
- typedef TBaseStyle::TMouseWheelCommand TMouseWheelCommand;
- typedef TBaseStyle::TKeyCommand TKeyCommand;
- typedef TBaseStyle::TVoidCommand TVoidCommand;
+ 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 AddSlicesCommand( TSlicesCommand command, void* data );
- void AddWindowLevelCommand( TWindowLevelCommand command, void* data );
- void AddRenderCommand( TVoidCommand command, void* data );
-
- void RemoveSlicesCommand( TSlicesCommand command );
- void RemoveWindowLevelCommand( TWindowLevelCommand command );
- void RemoveRenderCommand( TVoidCommand command );
-
- 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 );
void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
void PopActorsFrom( vtkRenderWindow* window );
- unsigned int GetNumberOfImageActors( ) const;
- vtkImageActor* GetImageActor( unsigned int id );
- const vtkImageActor* GetImageActor( unsigned int id ) const;
+ unsigned int GetNumberOfImages( ) const;
+ vtkImageActor* GetImageActor( );
+ const vtkImageActor* GetImageActor( ) const;
vtkTextActor* GetTextActor( );
const vtkTextActor* GetTextActor( ) const;
vtkActor* GetPlaneActor( );
void ResetCursor( );
void SetCursor( double pos[ 3 ] );
- vtkImageMapToColors* GetImageMap( unsigned int id );
- const vtkImageMapToColors* GetImageMap( unsigned int id ) const;
-
double GetMinWindow( ) const;
double GetMaxWindow( ) const;
double GetMinLevel( ) const;
void SetWindowLevel( double w, double l );
void ResetWindowLevel( );
- void SetLookupTable( unsigned int id, vtkLookupTable* lut );
- void SetLookupTableAsColor(
- unsigned int id, double r, double g, double b
- );
-
int GetAxis( ) const;
int GetSliceNumber( ) const;
int GetSliceNumberMinValue( ) const;
void UpdateText( double pos[ 3 ] );
void UpdateText( const double& w, const double& l );
- void Render( );
+ void Render( const double& t );
void ResetCamera( );
protected:
virtual ~ImageSliceActors( );
void _ConfigureStyle( );
- void _ConfigureNewLUT( vtkImageData* data );
- void _ConfigureNewInput( int axis );
// Events
static void _MouseMoveCommand(
void* data,
- const TBaseStyle::ButtonID& btn,
+ const TStyle::ButtonID& btn,
int* idx, double* pos,
bool alt, bool ctr, bool sft
);
static void _MouseClickCommand(
void* data,
- const TBaseStyle::ButtonID& btn,
+ const TStyle::ButtonID& btn,
int* idx, double* pos,
bool alt, bool ctr, bool sft
);
vtkRenderWindow* m_Window;
// Multiple actors
- std::vector< vtkSmartPointer< vtkImageMapToColors > > m_ImageMaps;
- std::vector< vtkSmartPointer< vtkImageSliceMapper > > m_SliceMappers;
- std::vector< vtkSmartPointer< vtkImageActor > > m_ImageActors;
+ vtkSmartPointer< ImageBlender > m_ImageBlender;
+ vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
+ vtkSmartPointer< vtkImageActor > m_ImageActor;
bool m_Interpolate;
+ int m_VisibleExtent[ 6 ];
+ double m_VisibleBounds[ 6 ];
+
// Associated slices
std::vector< Self* > m_AssociatedSlices;
- // Window-Level values
- double m_MinWindow, m_MaxWindow;
- double m_MinLevel, m_MaxLevel;
-
- // Associated commands
- std::map< TSlicesCommand, void* > m_SlicesCommands;
- std::map< TWindowLevelCommand, void* > m_WindowLevelCommands;
- std::map< TVoidCommand, void* > m_RenderCommands;
-
// Unique objects
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;
- vtkSmartPointer< vtkActor > m_PlaneActor;
double m_StartWindowLevelPos[ 3 ];
double m_StartWindowLevel[ 2 ];