]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Visualization/Simple3DCurveToPolyData.cxx
yet another refactoring
[cpPlugins.git] / lib / cpExtensions / Visualization / Simple3DCurveToPolyData.cxx
diff --git a/lib/cpExtensions/Visualization/Simple3DCurveToPolyData.cxx b/lib/cpExtensions/Visualization/Simple3DCurveToPolyData.cxx
new file mode 100644 (file)
index 0000000..697807f
--- /dev/null
@@ -0,0 +1,119 @@
+#include <cpExtensions/Visualization/Simple3DCurveToPolyData.h>
+
+#include <vtkCellArray.h>
+#include <vtkInformation.h>
+#include <vtkInformationVector.h>
+#include <vtkSmartPointer.h>
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+typename cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+Self* cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+New( )
+{
+  return( new Self( ) );
+}
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+const typename cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+TCurve* cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+GetInput( ) const
+{
+  return( this->m_Curve );
+}
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+void
+cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+SetInput( const TCurve* c )
+{
+  if( this->m_Curve != c )
+  {
+    this->m_Curve = c;
+    this->Modified( );
+
+  } // fi
+}
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+Simple3DCurveToPolyData( )
+  : vtkPolyDataAlgorithm( ),
+    m_Curve( NULL )
+{
+  this->SetNumberOfInputPorts( 0 );
+}
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+~Simple3DCurveToPolyData( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+int cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+RequestData(
+  vtkInformation* information,
+  vtkInformationVector** input,
+  vtkInformationVector* output
+  )
+{
+  if( this->m_Curve == NULL )
+    return( 0 );
+
+  // Get output
+  vtkInformation* info = output->GetInformationObject( 0 );
+  vtkPolyData* out = vtkPolyData::SafeDownCast(
+    info->Get( vtkDataObject::DATA_OBJECT( ) )
+    );
+
+  // Prepare data
+  out->SetPoints( vtkSmartPointer< vtkPoints >::New( ) );
+  out->SetVerts( vtkSmartPointer< vtkCellArray >::New( ) );
+  out->SetLines( vtkSmartPointer< vtkCellArray >::New( ) );
+  out->SetPolys( vtkSmartPointer< vtkCellArray >::New( ) );
+  out->SetStrips( vtkSmartPointer< vtkCellArray >::New( ) );
+  vtkPoints* points = out->GetPoints( );
+  vtkCellArray* lines = out->GetLines( );
+
+  // Get data
+  for( unsigned long i = 0; i < this->m_Curve->GetNumberOfPoints( ); ++i )
+  {
+    typename _TCurve::TPoint pnt = this->m_Curve->GetPoint( i );
+    points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
+    if( i > 0 )
+    {
+      lines->InsertNextCell( 2 );
+      lines->InsertCellPoint( i - 1 );
+      lines->InsertCellPoint( i );
+
+    } // fi
+
+  } // rof
+  return( 1 );
+}
+
+// -------------------------------------------------------------------------
+template< class _TCurve >
+int cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
+RequestInformation(
+  vtkInformation* information,
+  vtkInformationVector** input,
+  vtkInformationVector* output
+  )
+{
+  return( 1 );
+}
+
+// -------------------------------------------------------------------------
+#include <cpExtensions/DataStructures/Simple3DCurve.h>
+
+template class cpExtensions::Visualization::Simple3DCurveToPolyData< cpExtensions::DataStructures::Simple3DCurve< float > >;
+template class cpExtensions::Visualization::Simple3DCurveToPolyData< cpExtensions::DataStructures::Simple3DCurve< double > >;
+
+// eof - $RCSfile$