]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/QT/SimpleMPRWidget.h
...
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.h
index 3dd23098fa40f43b7918daa10c7a7aff7e18bcd8..5aed9ec08f8548e403902a2d1e0e6479d5e0c88e 100644 (file)
@@ -5,14 +5,16 @@
 
 #ifdef cpExtensions_QT4
 
+#include <map>
 #include <QWidget>
-
-#include <cpExtensions/Visualization/ImageSliceActors.h>
+#include <vtkPolyDataNormals.h>
+#include <vtkQuadricLODActor.h>
 #include <vtkRenderer.h>
+#include <vtkStripper.h>
 #include <vtkSmartPointer.h>
+#include <cpExtensions/Visualization/ImageSliceActors.h>
 
 /*
-  #include <map>
   #include <string>
   #include <vtkSmartPointer.h>
   #include <vtkImageData.h>
@@ -64,13 +66,55 @@ namespace cpExtensions
          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
+      void Clear( );
       void SetMainImage( vtkImageData* image );
-      
+      void AddMesh( vtkPolyData* mesh );
+
+      // Visual objects
+      vtkRenderWindowInteractor* GetInteractor( unsigned int i );
+
+
       /* TODO
          unsigned int GetNumberOfData( ) const;
          bool AddData(
@@ -96,8 +140,6 @@ namespace cpExtensions
          double GetWindow( ) const;
          double GetLevel( ) const;
 
-         vtkRenderWindowInteractor* GetInteractor( unsigned int i );
-
          // Visual objects accessors
          std::string GetSelectedData( ) const;
          vtkProp* GetProp( const std::string& name );
@@ -115,6 +157,8 @@ namespace cpExtensions
       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;