// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__VTK__Image__PathToPolyDataFilter__hxx__ #define __fpa__VTK__Image__PathToPolyDataFilter__hxx__ #include #include #include #include #include #include // ------------------------------------------------------------------------- template< class _TPath > typename fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: Self* fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: New( ) { return( new Self( ) ); } // ------------------------------------------------------------------------- template< class _TPath > const typename fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: TPath* fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: GetInput( ) const { return( this->m_Path ); } // ------------------------------------------------------------------------- template< class _TPath > void fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: SetInput( const TPath* path ) { if( this->m_Path != path ) { this->m_Path = path; this->Modified( ); } // fi } // ------------------------------------------------------------------------- template< class _TPath > fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: PathToPolyDataFilter( ) : vtkPolyDataAlgorithm( ), m_Path( NULL ) { this->SetNumberOfInputPorts( 0 ); } // ------------------------------------------------------------------------- template< class _TPath > fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: ~PathToPolyDataFilter( ) { } // ------------------------------------------------------------------------- template< class _TPath > int fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: RequestData( vtkInformation* information, vtkInformationVector** input, vtkInformationVector* output ) { static const unsigned int dim = TPath::PathDimension; if( this->m_Path == 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( ) ); vtkSmartPointer< vtkUnsignedIntArray > darray = vtkSmartPointer< vtkUnsignedIntArray >::New( ); darray->SetNumberOfComponents( 1 ); out->GetPointData( )->SetScalars( darray ); vtkPoints* points = out->GetPoints( ); vtkCellArray* lines = out->GetLines( ); // Assign all data const TPath* path = this->GetInput( ); for( unsigned long i = 0; i < path->GetSize( ); ++i ) { auto pnt = path->GetPoint( i ); if( dim == 1 ) points->InsertNextPoint( pnt[ 0 ], 0, 0 ); else if( dim == 2 ) points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], 0 ); else points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] ); darray->InsertNextTuple1( double( i ) ); if( i > 0 ) { lines->InsertNextCell( 2 ); lines->InsertCellPoint( points->GetNumberOfPoints( ) - 2 ); lines->InsertCellPoint( points->GetNumberOfPoints( ) - 1 ); } // fi } // rof return( 1 ); } // ------------------------------------------------------------------------- template< class _TPath > int fpa::VTK::Image::PathToPolyDataFilter< _TPath >:: RequestInformation( vtkInformation* information, vtkInformationVector** input, vtkInformationVector* output ) { return( 1 ); } #endif // __fpa__VTK__Image__PathToPolyDataFilterFilter__hxx__ // eof - $RCSfile$