]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/Mesh.cxx
...
[cpPlugins.git] / lib / cpPlugins / Interface / Mesh.cxx
index 0f7468199ef2770928b68ae8b202ec34a03a9002..d56d1929aebeb81719640b70f20d80460975c775 100644 (file)
@@ -1,38 +1,91 @@
 #include <cpPlugins/Interface/Mesh.h>
 
+#include <itkMesh.h>
+#include <itkLineCell.h>
+#include <itkTriangleCell.h>
+#include <itkPolygonCell.h>
+
 #include <vtkPolyData.h>
 
 // -------------------------------------------------------------------------
 void cpPlugins::Interface::Mesh::
-SetVTKMesh( vtkPolyData* mesh )
+SetVTK( vtkObject* object )
 {
-  this->m_VTKObject = mesh;
-  this->Modified( );
-}
+  typedef itk::Mesh< double, 3 >      _TMesh;
+  typedef _TMesh::CellType            _TCell;
+  typedef _TCell::CellAutoPointer     _TCellAutoPointer;
+  typedef itk::LineCell< _TCell >     _TLine;
+  typedef itk::TriangleCell< _TCell > _TTriangle;
+  typedef itk::PolygonCell< _TCell >  _TPolygon;
 
-// -------------------------------------------------------------------------
-vtkPolyData* cpPlugins::Interface::Mesh::
-GetVTKMesh( )
-{
-  return( dynamic_cast< vtkPolyData* >( this->m_VTKObject.GetPointer( ) ) );
-}
+  vtkPolyData* mesh = dynamic_cast< vtkPolyData* >( object );
+  if( mesh == NULL )
+  {
+    this->m_ITKObject = NULL;
+    this->Modified( );
+    return;
 
-// -------------------------------------------------------------------------
-const vtkPolyData* cpPlugins::Interface::Mesh::
-GetVTKMesh( ) const
-{
-  return(
-    dynamic_cast< const vtkPolyData* >( this->m_VTKObject.GetPointer( ) )
-    );
-}
+  } // fi
 
+  if( this->m_VTKObject.GetPointer( ) != mesh )
+  {
+    this->m_VTKObject = mesh;
+
+    // Copy points
+    _TMesh::Pointer imesh = _TMesh::New( );
+    double point[ 3 ];
+    for( long i = 0; i < mesh->GetNumberOfPoints( ); ++i )
+    {
+      mesh->GetPoint( i, point );
+      _TMesh::PointType ipoint;
+      ipoint[ 0 ] = point[ 0 ];
+      ipoint[ 1 ] = point[ 1 ];
+      ipoint[ 2 ] = point[ 2 ];
+      imesh->SetPoint( i, ipoint );
+
+    } // rof
+
+    // Copy cells
+    for( long i = 0; i < mesh->GetNumberOfCells( ); ++i )
+    {
+      auto cell = mesh->GetCell( i );
+      long nPoints = cell->GetNumberOfPoints( );
+      _TCellAutoPointer icell;
+      if( nPoints == 2 )
+      {
+        icell.TakeOwnership( new _TLine );
+        icell->SetPointId( 0, cell->GetPointId( 0 ) );
+        icell->SetPointId( 1, cell->GetPointId( 1 ) );
+      }
+      else if( nPoints == 3 )
+      {
+        icell.TakeOwnership( new _TTriangle );
+        icell->SetPointId( 0, cell->GetPointId( 0 ) );
+        icell->SetPointId( 1, cell->GetPointId( 1 ) );
+        icell->SetPointId( 2, cell->GetPointId( 2 ) );
+      }
+      else if( nPoints > 3 )
+      {
+        _TPolygon* polygon = new _TPolygon( );
+        for( long j = 0; j < nPoints; ++j )
+          polygon->AddPointId( cell->GetPointId( j ) );
+        icell.TakeOwnership( polygon );
+
+      } // fi
+      imesh->SetCell( imesh->GetNumberOfCells( ), icell );
+
+    } // rof
+
+    this->m_ITKObject = imesh;
+    this->Modified( );
+
+  } // fi
+}
 // -------------------------------------------------------------------------
 cpPlugins::Interface::Mesh::
 Mesh( )
   : Superclass( )
 {
-  this->m_ClassName = "cpPlugins::Interface::Mesh";
-  this->m_ClassCategory = "BasicObject";
 }
 
 // -------------------------------------------------------------------------