]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Mesh.cxx
Ortho normal bases added.
[cpPlugins.git] / lib / cpPlugins / Mesh.cxx
index 2854840d33f8eeb5158f2cec010214e79302bd82..f0e29f50b31054eb8a7fd34558b92640a6e14d62 100644 (file)
@@ -5,7 +5,14 @@
 #include <itkTriangleCell.h>
 #include <itkPolygonCell.h>
 
+#include <vtkActor.h>
+#include <vtkPolyDataNormals.h>
 #include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkQuadricLODActor.h>
+#include <vtkStripper.h>
+
+#define cpPlugins_Mesh_MAX_POLYS 65535
 
 // -------------------------------------------------------------------------
 void cpPlugins::Mesh::
@@ -129,14 +136,40 @@ _CreateVTKActor( ) const
     const_cast< vtkPolyData* >( this->GetVTK< vtkPolyData >( ) );
   if( mesh != NULL )
   {
-    std::cout << "Mesh: " << mesh << std::endl;
-    /* TODO
-       vtkImageSliceMapper* mapper = vtkImageSliceMapper::New( );
-       vtkImageActor* actor = vtkImageActor::New( );
-       mapper->SetInputData( image );
-       actor->SetMapper( mapper );
-       this->m_Actor = actor;
-    */
+    unsigned long nPolys = mesh->GetNumberOfPolys( );
+    if( nPolys >= cpPlugins_Mesh_MAX_POLYS )
+    {
+      auto normals = vtkPolyDataNormals::New( );
+      auto stripper = vtkStripper::New( );
+      auto mapper = vtkPolyDataMapper::New( );
+      auto actor = vtkQuadricLODActor::New( );
+
+      double r[ 2 ];
+      mesh->GetScalarRange( r );
+
+      normals->SetInputData( mesh );
+      normals->SetFeatureAngle( 60.0 );
+      stripper->SetInputConnection( normals->GetOutputPort( ) );
+      mapper->SetInputConnection( stripper->GetOutputPort( ) );
+      mapper->UseLookupTableScalarRangeOff( );
+      mapper->SetScalarRange( r[ 0 ], r[ 1 ] );
+      actor->SetMapper( mapper );
+      actor->DeferLODConstructionOff( );
+      this->m_Actor = actor;
+      mapper->Delete( );
+      stripper->Delete( );
+      normals->Delete( );
+    }
+    else
+    {
+      auto mapper = vtkPolyDataMapper::New( );
+      mapper->SetInputData( mesh );
+      auto actor = vtkActor::New( );
+      actor->SetMapper( mapper );
+      this->m_Actor = actor;
+      mapper->Delete( );
+
+    } // fi
 
   } // fi
 }