// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Base__PolyLineParametricPath__h__ #define __fpa__Base__PolyLineParametricPath__h__ #include #include namespace fpa { namespace Base { /** */ template< unsigned int _VDim > class PolyLineParametricPath : public itk::PolyLineParametricPath< _VDim > { public: typedef PolyLineParametricPath Self; typedef itk::PolyLineParametricPath< _VDim > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef itk::ImageBase< _VDim > TImageBase; typedef typename TImageBase::SpacingType TSpacing; typedef typename TImageBase::PointType TPoint; typedef typename TImageBase::DirectionType TDirection; typedef typename Superclass::ContinuousIndexType TContinuousIndex; typedef typename TContinuousIndex::IndexType TIndex; public: itkNewMacro( Self ); itkTypeMacro( PolyLineParametricPath, itk::PolyLineParametricPath ); itkGetConstReferenceMacro( Spacing, TSpacing ); itkGetConstReferenceMacro( Origin, TPoint ); itkGetConstReferenceMacro( Direction, TDirection ); itkGetConstReferenceMacro( InverseDirection, TDirection ); itkSetMacro( Origin, TPoint ); public: unsigned long GetSize( ) const; TContinuousIndex GetContinuousVertex( unsigned long i ) const; TIndex GetVertex( unsigned long i ) const; TPoint GetPoint( unsigned long i ) const; virtual void SetSpacing( const TSpacing& spac ); virtual void SetSpacing( const double spac[ _VDim ] ); virtual void SetSpacing( const float spac[ _VDim ] ); virtual void SetOrigin( const double ori[ _VDim ] ); virtual void SetOrigin( const float ori[ _VDim ] ); virtual void SetDirection( const TDirection& dir ); template< class _TRefImage > inline void SetReferenceImage( const _TRefImage* image ) { this->SetSpacing( image->GetSpacing( ) ); this->SetOrigin( image->GetOrigin( ) ); this->SetDirection( image->GetDirection( ) ); } protected: PolyLineParametricPath( ); virtual ~PolyLineParametricPath( ); virtual void _ComputeIndexToPhysicalPointMatrices( ); private: // Purposely not implemented PolyLineParametricPath( const Self& other ); Self& operator=( const Self& other ); protected: TSpacing m_Spacing; TPoint m_Origin; TDirection m_Direction; TDirection m_InverseDirection; TDirection m_IndexToPhysicalPoint; TDirection m_PhysicalPointToIndex; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Base__PolyLineParametricPath__h__ // eof - $RCSfile$