#include <cpExtensions/cpExtensions_Export.h>
-#include <vtkSmartPointer.h>
+#include <cpExtensions/Interaction/ImageInteractorStyle.h>
#include <vtkActor.h>
+#include <vtkCursor3D.h>
#include <vtkImageActor.h>
#include <vtkImageSliceMapper.h>
-#include <vtkLookupTable.h>
-#include <vtkPlane.h>
-#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkPropCollection.h>
#include <vtkTextActor.h>
+#include <vtkSmartPointer.h>
-#include <cpExtensions/Interaction/ImageInteractorStyle.h>
-#include <cpExtensions/Visualization/ImageBlender.h>
+#define MAX_TEXT_BUFFER 1024
-// -------------------------------------------------------------------------
class vtkAlgorithmOutput;
class vtkImageData;
-class vtkLookupTable;
class vtkRenderer;
-// -------------------------------------------------------------------------
namespace cpExtensions
{
namespace Visualization
{
public:
typedef ImageSliceActors Self;
-
typedef cpExtensions::Interaction::ImageInteractorStyle TStyle;
typedef TStyle::TMouseCommand TMouseCommand;
typedef TStyle::TMouseWheelCommand TMouseWheelCommand;
typedef void ( *TWindowLevelCommand )( double, double, void* );
typedef TVoidCommand TRenderCommand;
- typedef cpExtensions::Visualization::ImageBlender TBlender;
+ template< class _TSource >
+ struct SourceActor
+ {
+ vtkSmartPointer< _TSource > Source;
+ vtkSmartPointer< vtkPolyDataMapper > Mapper;
+ vtkSmartPointer< vtkActor > Actor;
+ void Create( )
+ {
+ this->Source = vtkSmartPointer< _TSource >::New( );
+ this->Mapper = vtkSmartPointer< vtkPolyDataMapper >::New( );
+ this->Actor = vtkSmartPointer< vtkActor >::New( );
+ this->Mapper->SetInputConnection( this->Source->GetOutputPort( ) );
+ this->Actor->SetMapper( this->Mapper );
+ }
+ void Modified( )
+ {
+ this->Source->Modified( );
+ this->Mapper->Modified( );
+ this->Actor->Modified( );
+ }
+ };
+
public:
vtkTypeMacro( ImageSliceActors, vtkPropCollection );
cpExtensions_BaseInteractorStyle_Commands( Render );
public:
- // Creation
- static ImageSliceActors* New( );
-
- void SetAxis( int axis );
- void SetInputConnection( vtkAlgorithmOutput* aout );
- void SetInputImage( vtkImageData* data );
- int AddBinaryConnection(
- vtkAlgorithmOutput* aout,
- const double& r, const double& g, const double& b
- );
- int AddBinaryImage(
- vtkImageData* data,
- const double& r, const double& g, const double& b
- );
+ static Self* New( );
+
void Clear( );
+ void SetInputConnection( vtkAlgorithmOutput* aout, int orientation );
+ void SetInputData( vtkImageData* data, int orientation );
void AssociateSlice( Self* slice );
+ void CleanAssociatedSlices( );
- vtkImageData* GetInputImage( );
- const vtkImageData* GetInputImage( ) const;
-
- vtkInteractorStyle* GetStyle( );
- const vtkInteractorStyle* GetStyle( ) const;
-
- void PushActorsInto( vtkRenderWindow* window, bool force_style = true );
- void PopActorsFrom( vtkRenderWindow* window );
- unsigned int GetNumberOfImages( ) const;
+ TStyle* GetStyle( );
+ void SetStyle( vtkInteractorStyle* st );
- vtkImageActor* GetImageActor( );
- const vtkImageActor* GetImageActor( ) const;
- vtkImageActor* GetBinaryActor( );
- const vtkImageActor* GetBinaryActor( ) const;
- vtkTextActor* GetTextActor( );
- const vtkTextActor* GetTextActor( ) const;
- vtkActor* GetPlaneActor( );
- const vtkActor* GetPlaneActor( ) const;
- vtkPlane* GetPlaneFunction( );
- const vtkPlane* GetPlaneFunction( ) const;
+ void PushInto( vtkRenderer* ren );
+ void PopFrom( vtkRenderer* ren );
- void SetInterpolate( bool v );
- void InterpolateOn( );
- void InterpolateOff( );
+ long GetSliceNumber( ) const;
+ void SetSliceNumber( long slice );
- double* GetDisplayBounds( ) const;
- void GetDisplayBounds( double bounds[ 6 ] ) const;
+ void ShowPixelText( double* pos );
- void ResetCursor( );
- void SetCursor( double pos[ 3 ] );
-
- void ResetAxesCursor( );
- void SetAxesCursor( double pos[ 3 ] );
-
- double GetMinWindow( ) const;
- double GetMaxWindow( ) const;
- double GetMinLevel( ) const;
- double GetMaxLevel( ) const;
+ void GetScalarRange( double r[ 2 ] ) const;
+ void SetScalarRange( const double& a, const double& b );
+ void UnsetScalarRange( );
+ void SetWindowLevel( const double& w, const double& l );
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( );
- void ResetCamera( );
protected:
ImageSliceActors( );
virtual ~ImageSliceActors( );
- void _ConfigureStyle( );
- void _ConfigureInputImage( );
- void _ConfigureBinaryImage(
- const double& r, const double& g, const double& b
- );
+ void _ConfigureInput( int orientation );
+ void _ConfigureCursor( );
// Events
static void _MouseMoveCommand(
Self& operator=( const Self& );
protected:
- static double m_PlaneColors[ 3 ][ 3 ];
-
- vtkSmartPointer< TStyle > m_Style;
- vtkRenderWindow* m_Window;
-
- // Multiple actors
- vtkSmartPointer< vtkImageSliceMapper > m_ImageMapper;
- vtkSmartPointer< vtkImageActor > m_ImageActor;
-
- vtkSmartPointer< vtkImageData > m_BlenderBase;
- vtkSmartPointer< TBlender > m_Blender;
- vtkSmartPointer< vtkImageSliceMapper > m_BlenderMapper;
- vtkSmartPointer< vtkLookupTable > m_BlenderLUT;
- vtkSmartPointer< vtkImageActor > m_BlenderActor;
-
- bool m_Interpolate;
-
- double m_WLRange[ 4 ];
-
- int m_VisibleExtent[ 6 ];
- double m_VisibleBounds[ 6 ];
-
- // Associated slices
- std::vector< Self* > m_AssociatedSlices;
+ // Main image
+ vtkSmartPointer< vtkImageSliceMapper > m_Mapper;
+ vtkSmartPointer< vtkImageActor > m_Actor;
- // Unique objects
- vtkSmartPointer< vtkPolyData > m_Cursor;
- vtkSmartPointer< vtkPolyDataMapper > m_CursorMapper;
- vtkSmartPointer< vtkActor > m_CursorActor;
+ // Secondary slices
+ std::vector< vtkSmartPointer< Self > > m_AssociatedSlices;
- vtkSmartPointer< vtkPolyData > m_Axis1;
- vtkSmartPointer< vtkPolyDataMapper > m_Axis1Mapper;
- vtkSmartPointer< vtkActor > m_Axis1Actor;
+ // Cursor
+ SourceActor< vtkCursor3D > m_Cursor;
- vtkSmartPointer< vtkPolyData > m_Axis2;
- vtkSmartPointer< vtkPolyDataMapper > m_Axis2Mapper;
- vtkSmartPointer< vtkActor > m_Axis2Actor;
+ // Text
+ char m_TextBuffer[ MAX_TEXT_BUFFER ];
+ vtkSmartPointer< vtkTextActor > m_TextActor;
- vtkSmartPointer< vtkPolyData > m_Plane;
- vtkSmartPointer< vtkPolyDataMapper > m_PlaneMapper;
- vtkSmartPointer< vtkActor > m_PlaneActor;
+ // WindowLevel
+ double m_ScalarRange[ 2 ];
+ bool m_ManualScalarRange;
- char m_TextBuffer[ 1024 ];
- vtkSmartPointer< vtkTextActor > m_TextActor;
+ // Style
+ vtkSmartPointer< vtkInteractorStyle > m_Style;
- double m_StartWindowLevelPos[ 3 ];
- double m_StartWindowLevel[ 2 ];
+ // Events-related data
+ double m_StartMouseEvent[ 3 ];
+ double m_StartWindow;
+ double m_StartLevel;
};
} // ecapseman
} // ecapseman
-#endif // __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
+#endif // __CPEXTENSIONS__VISUALIZATION__IMAGESLICEACTORS__H__
// eof - $RCSfile$