]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/QT/SimpleMPRWidget.h
...
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.h
index ba2b79b5777c72020f84a12bb6a7819ec6eb976b..5aed9ec08f8548e403902a2d1e0e6479d5e0c88e 100644 (file)
@@ -6,21 +6,27 @@
 #ifdef cpExtensions_QT4
 
 #include <map>
-#include <string>
-
 #include <QWidget>
-
-#include <vtkSmartPointer.h>
-#include <vtkImageData.h>
-#include <vtkPolyDataMapper.h>
 #include <vtkPolyDataNormals.h>
 #include <vtkQuadricLODActor.h>
+#include <vtkRenderer.h>
 #include <vtkStripper.h>
-
-#include <cpExtensions/Visualization/MPRObjects.h>
+#include <vtkSmartPointer.h>
+#include <cpExtensions/Visualization/ImageSliceActors.h>
+
+/*
+  #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>
+*/
 
 // -------------------------------------------------------------------------
-class QTreeWidgetItem;
+// TODO: class QTreeWidgetItem;
 class QVTKWidget;
 
 namespace Ui
@@ -43,100 +49,150 @@ namespace cpExtensions
     public:
       typedef SimpleMPRWidget Self;
 
-      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;
+      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 PolyDataActor
+      {
+        vtkSmartPointer< vtkPolyData >        Data;
+        vtkSmartPointer< vtkPolyDataNormals > Normals;
+        vtkSmartPointer< vtkStripper >        Stripper;
+        vtkSmartPointer< vtkPolyDataMapper >  Mapper;
+        vtkSmartPointer< vtkQuadricLODActor > Actor;
+
+        void Configure( vtkPolyData* data )
+          {
+            this->Data = data;
+            double r[ 2 ];
+            this->Data->GetScalarRange( r );
+
+            this->Normals  = vtkSmartPointer< vtkPolyDataNormals >::New( );
+            this->Stripper = vtkSmartPointer< vtkStripper >::New( );
+            this->Mapper   = vtkSmartPointer< vtkPolyDataMapper >::New( );
+            this->Actor    = vtkSmartPointer< vtkQuadricLODActor >::New( );
+
+            this->Normals->SetInputData( this->Data );
+            this->Normals->SetFeatureAngle( 60.0 );
+            this->Stripper->SetInputConnection(
+              this->Normals->GetOutputPort( )
+              );
+            this->Mapper->SetInputConnection(
+              this->Stripper->GetOutputPort( )
+              );
+            this->Mapper->UseLookupTableScalarRangeOff( );
+            this->Mapper->SetScalarRange(
+              r[ 0 ], ( ( r[ 1 ] - r[ 0 ] ) * 0.75 ) + r[ 0 ]
+              );
+            this->Actor->SetMapper( this->Mapper );
+            this->Actor->DeferLODConstructionOff( );
+          }
+      };
 
     public:
       explicit SimpleMPRWidget( QWidget* parent = 0 );
       virtual ~SimpleMPRWidget( );
 
       // Data management
-      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;
+      void Clear( );
+      void SetMainImage( vtkImageData* image );
+      void AddMesh( vtkPolyData* mesh );
 
+      // Visual objects
       vtkRenderWindowInteractor* GetInteractor( unsigned int i );
 
-      // Visual objects accessors
-      std::string GetSelectedData( ) const;
-                                          
+
+      /* 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;
+
+         // Visual objects accessors
+         std::string GetSelectedData( ) const;
+         vtkProp* GetProp( const std::string& name );
+      */
+
     private slots:
       void _SyncBottom( int a, int b );
       void _SyncTop( int a, int b );
 
     protected:
-      static double cm_Colors[ 8 ][ 3 ];
-
-      Ui::SimpleMPRWidget*           m_UI;
-      vtkSmartPointer< TMPRObjects > m_MPRObjects;
-      QVTKWidget*                    m_VTK[ 4 ];
-
-      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;
+      Ui::SimpleMPRWidget* m_UI;
+      QVTKWidget*          m_VTK[ 4 ];
+
+      vtkSmartPointer< vtkRenderer > m_Renderers[ 4 ];
+      vtkSmartPointer< TActors >     m_2DSlices[ 3 ];
+      vtkSmartPointer< TActors >     m_3DSlices[ 3 ];
+
+      std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
+
+      /* 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;
+      */
     };
 
   } // ecapseman