]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Visualization/Simple3DCurveToPolyData.cxx
697807f7648dae2b109ce6c90fbf6ecd1c2eb879
[cpPlugins.git] / lib / cpExtensions / Visualization / Simple3DCurveToPolyData.cxx
1 #include <cpExtensions/Visualization/Simple3DCurveToPolyData.h>
2
3 #include <vtkCellArray.h>
4 #include <vtkInformation.h>
5 #include <vtkInformationVector.h>
6 #include <vtkSmartPointer.h>
7
8 // -------------------------------------------------------------------------
9 template< class _TCurve >
10 typename cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
11 Self* cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
12 New( )
13 {
14   return( new Self( ) );
15 }
16
17 // -------------------------------------------------------------------------
18 template< class _TCurve >
19 const typename cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
20 TCurve* cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
21 GetInput( ) const
22 {
23   return( this->m_Curve );
24 }
25
26 // -------------------------------------------------------------------------
27 template< class _TCurve >
28 void
29 cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
30 SetInput( const TCurve* c )
31 {
32   if( this->m_Curve != c )
33   {
34     this->m_Curve = c;
35     this->Modified( );
36
37   } // fi
38 }
39
40 // -------------------------------------------------------------------------
41 template< class _TCurve >
42 cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
43 Simple3DCurveToPolyData( )
44   : vtkPolyDataAlgorithm( ),
45     m_Curve( NULL )
46 {
47   this->SetNumberOfInputPorts( 0 );
48 }
49
50 // -------------------------------------------------------------------------
51 template< class _TCurve >
52 cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
53 ~Simple3DCurveToPolyData( )
54 {
55 }
56
57 // -------------------------------------------------------------------------
58 template< class _TCurve >
59 int cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
60 RequestData(
61   vtkInformation* information,
62   vtkInformationVector** input,
63   vtkInformationVector* output
64   )
65 {
66   if( this->m_Curve == NULL )
67     return( 0 );
68
69   // Get output
70   vtkInformation* info = output->GetInformationObject( 0 );
71   vtkPolyData* out = vtkPolyData::SafeDownCast(
72     info->Get( vtkDataObject::DATA_OBJECT( ) )
73     );
74
75   // Prepare data
76   out->SetPoints( vtkSmartPointer< vtkPoints >::New( ) );
77   out->SetVerts( vtkSmartPointer< vtkCellArray >::New( ) );
78   out->SetLines( vtkSmartPointer< vtkCellArray >::New( ) );
79   out->SetPolys( vtkSmartPointer< vtkCellArray >::New( ) );
80   out->SetStrips( vtkSmartPointer< vtkCellArray >::New( ) );
81   vtkPoints* points = out->GetPoints( );
82   vtkCellArray* lines = out->GetLines( );
83
84   // Get data
85   for( unsigned long i = 0; i < this->m_Curve->GetNumberOfPoints( ); ++i )
86   {
87     typename _TCurve::TPoint pnt = this->m_Curve->GetPoint( i );
88     points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
89     if( i > 0 )
90     {
91       lines->InsertNextCell( 2 );
92       lines->InsertCellPoint( i - 1 );
93       lines->InsertCellPoint( i );
94
95     } // fi
96
97   } // rof
98   return( 1 );
99 }
100
101 // -------------------------------------------------------------------------
102 template< class _TCurve >
103 int cpExtensions::Visualization::Simple3DCurveToPolyData< _TCurve >::
104 RequestInformation(
105   vtkInformation* information,
106   vtkInformationVector** input,
107   vtkInformationVector* output
108   )
109 {
110   return( 1 );
111 }
112
113 // -------------------------------------------------------------------------
114 #include <cpExtensions/DataStructures/Simple3DCurve.h>
115
116 template class cpExtensions::Visualization::Simple3DCurveToPolyData< cpExtensions::DataStructures::Simple3DCurve< float > >;
117 template class cpExtensions::Visualization::Simple3DCurveToPolyData< cpExtensions::DataStructures::Simple3DCurve< double > >;
118
119 // eof - $RCSfile$