X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FVTK%2FImage%2FPolyLineParametricPathToPolyDataFilter.hxx;fp=lib%2Ffpa%2FVTK%2FImage%2FPolyLineParametricPathToPolyDataFilter.hxx;h=ad995aab2d08190f73b0ce6fccb4fb565f03fe03;hb=2047276c8f1a02432fbcc7014722d460d6c1e60f;hp=0000000000000000000000000000000000000000;hpb=3c639e5da479c7216a0a302ffa156ac6762caeed;p=FrontAlgorithms.git diff --git a/lib/fpa/VTK/Image/PolyLineParametricPathToPolyDataFilter.hxx b/lib/fpa/VTK/Image/PolyLineParametricPathToPolyDataFilter.hxx new file mode 100644 index 0000000..ad995aa --- /dev/null +++ b/lib/fpa/VTK/Image/PolyLineParametricPathToPolyDataFilter.hxx @@ -0,0 +1,133 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= +#ifndef __fpa__VTK__Image__PolyLineParametricPathToPolyDataFilter__hxx__ +#define __fpa__VTK__Image__PolyLineParametricPathToPolyDataFilter__hxx__ + +#include +#include +#include +#include +#include +#include + +// ------------------------------------------------------------------------- +template< class _TPath > +typename fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +Self* fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +New( ) +{ + return( new Self( ) ); +} + +// ------------------------------------------------------------------------- +template< class _TPath > +const typename +fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +TPath* fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +GetInput( ) const +{ + return( this->m_PolyLineParametricPath ); +} + +// ------------------------------------------------------------------------- +template< class _TPath > +void fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +SetInput( const TPath* path ) +{ + if( this->m_PolyLineParametricPath != path ) + { + this->m_PolyLineParametricPath = path; + this->Modified( ); + + } // fi +} + +// ------------------------------------------------------------------------- +template< class _TPath > +fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +PolyLineParametricPathToPolyDataFilter( ) + : vtkPolyDataAlgorithm( ), + m_PolyLineParametricPath( NULL ) +{ + this->SetNumberOfInputPorts( 0 ); +} + +// ------------------------------------------------------------------------- +template< class _TPath > +fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +~PolyLineParametricPathToPolyDataFilter( ) +{ +} + +// ------------------------------------------------------------------------- +template< class _TPath > +int fpa::VTK::Image::PolyLineParametricPathToPolyDataFilter< _TPath >:: +RequestData( + vtkInformation* information, + vtkInformationVector** input, + vtkInformationVector* output + ) +{ + static const unsigned int dim = TPath::PathDimension; + if( this->m_PolyLineParametricPath == 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::PolyLineParametricPathToPolyDataFilter< _TPath >:: +RequestInformation( + vtkInformation* information, + vtkInformationVector** input, + vtkInformationVector* output + ) +{ + return( 1 ); +} + +#endif // __fpa__VTK__Image__PolyLineParametricPathToPolyDataFilterFilter__hxx__ +// eof - $RCSfile$