]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/QT/SimpleMPRWidget.h
Visual properties dialog finished.
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.h
index fefe1446e70fb86ac51fd417607e54dbaa0ed456..35307a4e69de730cbaac427b30cba4db524ac655 100644 (file)
@@ -6,11 +6,9 @@
 #ifdef cpExtensions_QT4
 
 #include <map>
+#include <set>
 #include <QWidget>
-#include <vtkPolyDataNormals.h>
-#include <vtkQuadricLODActor.h>
-#include <vtkRenderer.h>
-#include <vtkStripper.h>
+#include <vtkProp.h>
 #include <vtkSmartPointer.h>
 #include <cpExtensions/Visualization/ImageSliceActors.h>
 
@@ -39,55 +37,17 @@ namespace cpExtensions
     public:
       typedef SimpleMPRWidget Self;
 
-      typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
-
-      /**
-       */
-      struct PolyDataActor
+      struct TActorCmp
       {
-        vtkSmartPointer< vtkPolyData >        Data;
-        vtkSmartPointer< vtkPolyDataNormals > Normals;
-        vtkSmartPointer< vtkStripper >        Stripper;
-        vtkSmartPointer< vtkPolyDataMapper >  Mapper;
-        vtkSmartPointer< vtkActor >           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->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 ] );
-
-            unsigned long nPolys = this->Data->GetNumberOfPolys( );
-            if( nPolys < cpExtensions_MAX_POLYS )
-            {
-              this->Actor = vtkSmartPointer< vtkActor >::New( );
-              this->Actor->SetMapper( this->Mapper );
-            }
-            else
-            {
-              vtkSmartPointer< vtkQuadricLODActor > actor =
-                vtkSmartPointer< vtkQuadricLODActor >::New( );
-              actor->SetMapper( this->Mapper );
-              actor->DeferLODConstructionOff( );
-              this->Actor = actor.GetPointer( );
-
-            } // fi
-          }
+        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;
 
     public:
       explicit SimpleMPRWidget( QWidget* parent = 0 );
@@ -95,23 +55,19 @@ namespace cpExtensions
 
       // Data management
       void Clear( );
-      void SetMainImage( vtkImageData* image );
-      void SetMainActor( vtkImageActor* actor );
-      void AddImage( vtkImageData* image );
-      void AddImageActor( vtkImageActor* actor );
-      void AddMesh( vtkPolyData* mesh );
-      void AddMeshActor( vtkProp3D* actor );
-      void AddActor( vtkProp* actor );
+      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 );
-      /* TODO
-         std::vector< std::pair< vtkImageActor*, vtkRenderer* > >
-         GetMainImageActors( );
-         vtkActor* GetActor( vtkPolyData* mesh );
-      */
 
     protected:
       void _AssociateSlices( );
@@ -128,7 +84,7 @@ namespace cpExtensions
       vtkSmartPointer< TSliceActors > m_2DSlices[ 3 ];
       vtkSmartPointer< TSliceActors > m_3DSlices[ 3 ];
 
-      std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
+      TNamedActors m_NamedActors;
     };
 
   } // ecapseman