#include <cpExtensions/cpExtensions_Export.h>
+#include <utility>
+#include <vector>
+
#include <vtkActor.h>
#include <vtkImageActor.h>
#include <vtkImageSliceMapper.h>
+#include <vtkPlane.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkPropCollection.h>
#include <vtkSmartPointer.h>
#include <vtkTextActor.h>
-// -------------------------------------------------------------------------
-#define cpPlugins_ImageSliceActors( name, type ) \
- inline type* Get##name##Actor( ) const \
- { \
- return( \
- dynamic_cast< type* >( \
- const_cast< Self* >( this )-> \
- GetItemAsObject( this->name##ActorIndex ) \
- ) \
- ); \
- }
-
// -------------------------------------------------------------------------
class vtkAlgorithmOutput;
class vtkImageData;
public:
vtkTypeMacro( ImageSliceActors, vtkPropCollection );
- cpPlugins_ImageSliceActors( Image, vtkImageActor );
- cpPlugins_ImageSliceActors( Text, vtkTextActor );
- cpPlugins_ImageSliceActors( Plane, vtkActor );
-
public:
// Creation
static ImageSliceActors* New( );
- void SetInputConnection( vtkAlgorithmOutput* aout, int axis );
- void SetInputData( vtkImageData* data, int axis );
+ void AddInputConnection( vtkAlgorithmOutput* aout, int axis = 0 );
+ void AddInputData( vtkImageData* data, int axis = 0 );
+ void Clear( );
+
+ unsigned int GetNumberOfImageActors( ) const;
+ vtkImageActor* GetImageActor( unsigned int id );
+ const vtkImageActor* GetImageActor( unsigned int id ) const;
+ vtkTextActor* GetTextActor( );
+ const vtkTextActor* GetTextActor( ) const;
+ vtkActor* GetPlaneActor( );
+ const vtkActor* GetPlaneActor( ) const;
+ vtkPlane* GetPlaneFunction( );
+ const vtkPlane* GetPlaneFunction( ) const;
+
+ void AddActor( vtkAlgorithm* algorithm, vtkActor* actor );
+
+ void SetInterpolate( bool v );
+ void InterpolateOn( );
+ void InterpolateOff( );
double* GetDisplayBounds( ) const;
void GetDisplayBounds( double bounds[ 6 ] ) const;
int GetSliceNumberMaxValue( ) const;
void SetSliceNumber( const int& slice );
void UpdateText( );
+ void UpdateText( const double& w, const double& l );
protected:
ImageSliceActors( );
virtual ~ImageSliceActors( );
+ void _ConfigureNewInput( int axis );
+
private:
// Purposely not implemented
ImageSliceActors( const Self& );
Self& operator=( const Self& );
protected:
- vtkSmartPointer< vtkImageSliceMapper > SliceMapper;
- vtkSmartPointer< vtkPolyData > PlaneSource;
- vtkSmartPointer< vtkPolyDataMapper > PlaneMapper;
- char TextBuffer[ 1024 ];
-
- vtkSmartPointer< vtkImageActor > ImageActor;
- vtkSmartPointer< vtkTextActor > TextActor;
- vtkSmartPointer< vtkActor > PlaneActor;
-
- unsigned int ImageActorIndex;
- unsigned int TextActorIndex;
- unsigned int PlaneActorIndex;
+ // Multiple actors
+ std::vector< vtkSmartPointer< vtkImageSliceMapper > > SliceMappers;
+ std::vector< vtkSmartPointer< vtkImageActor > > ImageActors;
+ std::vector< std::pair< vtkSmartPointer< vtkAlgorithm >, vtkSmartPointer< vtkActor > > > OtherActors;
+ bool Interpolate;
+
+ // Unique objects
+ vtkSmartPointer< vtkPlane > PlaneFunction;
+ vtkSmartPointer< vtkPolyData > PlaneSource;
+ vtkSmartPointer< vtkPolyDataMapper > PlaneMapper;
+ char TextBuffer[ 1024 ];
+ vtkSmartPointer< vtkTextActor > TextActor;
+ vtkSmartPointer< vtkActor > PlaneActor;
};
} // ecapseman