]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Visualization/ImageSliceActors.h
Widget integration (step 2/6). WARNING: IT DOES NOT COMPILE YETgit shortlog !
[cpPlugins.git] / lib / cpExtensions / Visualization / ImageSliceActors.h
index 37aeac402cef79579d23b0bbab961fbb209b162c..091b7bcf89ce399cceabf473b48b6cac111fa671 100644 (file)
@@ -3,27 +3,19 @@
 
 #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;
@@ -44,16 +36,29 @@ namespace cpExtensions
     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;
@@ -64,29 +69,33 @@ namespace cpExtensions
       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