]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/QT/SimpleMPRWidget.h
...
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.h
index 3dd23098fa40f43b7918daa10c7a7aff7e18bcd8..04ed994898f710f698a629205ffbead51c8b759e 100644 (file)
@@ -5,26 +5,18 @@
 
 #ifdef cpExtensions_QT4
 
+#include <map>
+#include <set>
 #include <QWidget>
-
-#include <cpExtensions/Visualization/ImageSliceActors.h>
-#include <vtkRenderer.h>
+#include <vtkInteractorStyleTrackballCamera.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkProp.h>
 #include <vtkSmartPointer.h>
+#include <cpExtensions/Visualization/ImageSliceActors.h>
 
-/*
-  #include <map>
-  #include <string>
-  #include <vtkSmartPointer.h>
-  #include <vtkImageData.h>
-  #include <vtkPolyDataMapper.h>
-  #include <vtkPolyDataNormals.h>
-  #include <vtkQuadricLODActor.h>
-  #include <vtkStripper.h>
-  #include <cpExtensions/Visualization/MPRObjects.h>
-*/
+#define cpExtensions_MAX_POLYS 65535
 
 // -------------------------------------------------------------------------
-// TODO: class QTreeWidgetItem;
 class QVTKWidget;
 
 namespace Ui
@@ -47,61 +39,61 @@ namespace cpExtensions
     public:
       typedef SimpleMPRWidget Self;
 
-      typedef cpExtensions::Visualization::ImageSliceActors TActors;
-      /* TODO
-         typedef cpExtensions::Visualization::MPRObjects TMPRObjects;
-         typedef TMPRObjects::TStyle                     TStyle;
-         typedef TMPRObjects::TMouseCommand              TMouseCommand;
-         typedef TMPRObjects::TMouseWheelCommand         TMouseWheelCommand;
-         typedef TMPRObjects::TKeyCommand                TKeyCommand;
-         typedef TMPRObjects::TVoidCommand               TVoidCommand;
-         typedef TMPRObjects::TMouseMoveCommand          TMouseMoveCommand;
-         typedef TMPRObjects::TMouseClickCommand         TMouseClickCommand;
-         typedef TMPRObjects::TMouseDoubleClickCommand   TMouseDoubleClickCommand;
-         typedef TMPRObjects::TExposeCommand             TExposeCommand;
-         typedef TMPRObjects::TConfigureCommand          TConfigureCommand;
-         typedef TMPRObjects::TEnterCommand              TEnterCommand;
-         typedef TMPRObjects::TLeaveCommand              TLeaveCommand;
-      */
+      struct TActorCmp
+      {
+        bool operator()(
+          const vtkSmartPointer< vtkProp >& a,
+          const vtkSmartPointer< vtkProp >& b
+          ) const
+          { return( a.GetPointer( ) < b.GetPointer( ) ); }
+      };
+      typedef std::set< vtkSmartPointer< vtkProp >, TActorCmp >  TActors;
+      typedef std::map< std::string, TActors >              TNamedActors;
+      typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
+
+    protected:
+      /**
+       */
+      class _3DInteractorStyle
+        : public vtkInteractorStyleTrackballCamera
+      {
+      public:
+        vtkTypeMacro(
+          _3DInteractorStyle, vtkInteractorStyleTrackballCamera
+          );
+
+      public:
+        static _3DInteractorStyle* New( );
+        virtual void OnChar( )       { }
+        virtual void OnKeyDown( )    { }
+        virtual void OnKeyUp( )      { }
+        virtual void OnKeyRelease( ) { }
+        virtual void OnKeyPress( );
+      };
 
     public:
       explicit SimpleMPRWidget( QWidget* parent = 0 );
       virtual ~SimpleMPRWidget( );
 
       // Data management
-      void SetMainImage( vtkImageData* image );
-      
-      /* TODO
-         unsigned int GetNumberOfData( ) const;
-         bool AddData(
-         vtkImageData* data, const std::string& name,
-         const std::string& parent
-         );
-         bool AddData(
-         vtkPolyData* data, const std::string& name
-         );
-         const std::string& GetMainImage( ) const;
-         bool SetMainImage( const std::string& name );
-         void DeleteData( const std::string& name );
-         void DeleteAllData( );
-
-         // Some qt accessors
-         void SetDataColor(
-         const std::string& name,
-         const double& r, const double& g, const double& b
-         );
-         void ShowData( const std::string& name );
-         void HideData( const std::string& name );
-         void SetWindowLevel( const double& w, const double& l );
-         double GetWindow( ) const;
-         double GetLevel( ) const;
-
-         vtkRenderWindowInteractor* GetInteractor( unsigned int i );
-
-         // Visual objects accessors
-         std::string GetSelectedData( ) const;
-         vtkProp* GetProp( const std::string& name );
-      */
+      void Clear( );
+      void SetMainImage( vtkImageData* image, const std::string& name );
+      void SetMainActor( vtkImageActor* actor, const std::string& name );
+      void AddImage( vtkImageData* image, const std::string& name );
+      void AddImageActor( vtkImageActor* actor, const std::string& name );
+      void AddMesh( vtkPolyData* mesh, const std::string& name );
+      void AddMeshActor( vtkProp3D* actor, const std::string& name );
+      void AddActor( vtkProp* actor, const std::string& name );
+      const TActors& GetActors( const std::string& name ) const;
+
+      // Visual objects
+      vtkRenderWindowInteractor* GetInteractor( unsigned int i );
+      vtkRenderer* GetRenderer( unsigned int i );
+      vtkRenderWindow* GetRenderWindow( unsigned int i );
+
+    protected:
+      void _AssociateSlices( );
 
     private slots:
       void _SyncBottom( int a, int b );
@@ -111,44 +103,11 @@ namespace cpExtensions
       Ui::SimpleMPRWidget* m_UI;
       QVTKWidget*          m_VTK[ 4 ];
 
-      vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ];
-      vtkSmartPointer< TActors >     m_2DSlices[ 3 ];
-      vtkSmartPointer< TActors >     m_3DSlices[ 3 ];
-
-      /* TODO
-         static double cm_Colors[ 8 ][ 3 ];
-         vtkSmartPointer< TMPRObjects > m_MPRObjects;
-         struct PolyDataActor
-         {
-         vtkPolyData*        Mesh;
-         vtkPolyDataNormals* Normals;
-         vtkStripper*        Stripper;
-         vtkPolyDataMapper*  Mapper;
-         vtkQuadricLODActor* Actor;
-
-         PolyDataActor( );
-         virtual ~PolyDataActor( );
-         void Configure( vtkPolyData* pd );
-         };
-
-         struct Data
-         {
-         enum { IMAGE, MESH } Tag;
-         vtkImageData*        Image;
-         PolyDataActor        Mesh;
-         Data( );
-         virtual ~Data( );
-         Data& operator=( const Data& data );
-         void SetImageData( vtkImageData* data );
-         void SetPolyData( vtkPolyData* data );
-         vtkImageData* GetImage( );
-         vtkPolyData* GetMesh( );
-         vtkProp* GetMeshActor( );
-         };
-         std::string m_MainImage;
-         std::map< std::string, Data >        m_Data;
-         std::map< std::string, std::string > m_Tree;
-      */
+      vtkSmartPointer< vtkRenderer >  m_Renderers[ 4 ];
+      vtkSmartPointer< TSliceActors > m_2DSlices[ 3 ];
+      vtkSmartPointer< TSliceActors > m_3DSlices[ 3 ];
+
+      TNamedActors m_NamedActors;
     };
 
   } // ecapseman