]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/QT/SimpleMPRWidget.h
...
[cpPlugins.git] / lib / cpExtensions / QT / SimpleMPRWidget.h
index 802846063e4c89fcbd019aab8e531e9d500f2339..04ed994898f710f698a629205ffbead51c8b759e 100644 (file)
@@ -6,11 +6,11 @@
 #ifdef cpExtensions_QT4
 
 #include <map>
+#include <set>
 #include <QWidget>
-#include <vtkPolyDataNormals.h>
-#include <vtkQuadricLODActor.h>
-#include <vtkRenderer.h>
-#include <vtkStripper.h>
+#include <vtkInteractorStyleTrackballCamera.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkProp.h>
 #include <vtkSmartPointer.h>
 #include <cpExtensions/Visualization/ImageSliceActors.h>
 
@@ -39,54 +39,37 @@ namespace cpExtensions
     public:
       typedef SimpleMPRWidget Self;
 
+      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:
       /**
        */
-      struct PolyDataActor
+      class _3DInteractorStyle
+        : public vtkInteractorStyleTrackballCamera
       {
-        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
-          }
+      public:
+        vtkTypeMacro(
+          _3DInteractorStyle, vtkInteractorStyleTrackballCamera
+          );
+
+      public:
+        static _3DInteractorStyle* New( );
+        virtual void OnChar( )       { }
+        virtual void OnKeyDown( )    { }
+        virtual void OnKeyUp( )      { }
+        virtual void OnKeyRelease( ) { }
+        virtual void OnKeyPress( );
       };
 
     public:
@@ -95,23 +78,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( vtkActor* 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 +107,7 @@ namespace cpExtensions
       vtkSmartPointer< TSliceActors > m_2DSlices[ 3 ];
       vtkSmartPointer< TSliceActors > m_3DSlices[ 3 ];
 
-      std::map< vtkPolyData*, PolyDataActor > m_PolyDatas;
+      TNamedActors m_NamedActors;
     };
 
   } // ecapseman