-#ifndef __CPEXTENSIONS__DATASTRUCTURES__POLYLINEPARAMETRICPATH__H__
-#define __CPEXTENSIONS__DATASTRUCTURES__POLYLINEPARAMETRICPATH__H__
+#ifndef __cpExtensions__DataStructures__PolyLineParametricPath__h__
+#define __cpExtensions__DataStructures__PolyLineParametricPath__h__
#include <itkPolyLineParametricPath.h>
#include <itkImageBase.h>
+#include <cpExtensions/Algorithms/BezierCurveFunction.h>
namespace cpExtensions
{
{
/**
*/
- template< unsigned int _NDim >
+ template< unsigned int _VDim >
class PolyLineParametricPath
- : public itk::PolyLineParametricPath< _NDim >
+ : public itk::PolyLineParametricPath< _VDim >
{
public:
typedef PolyLineParametricPath Self;
- typedef itk::PolyLineParametricPath< _NDim > Superclass;
+ typedef itk::PolyLineParametricPath< _VDim > Superclass;
typedef itk::SmartPointer< Self > Pointer;
typedef itk::SmartPointer< const Self > ConstPointer;
- typedef itk::ImageBase< _NDim > TImageBase;
+ 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;
+
+ typedef typename TPoint::VectorType TVector;
+ typedef cpExtensions::Algorithms::BezierCurveFunction< TVector > TBezier;
public:
itkNewMacro( Self );
itkTypeMacro( PolyLineParametricPath, itk::PolyLineParametricPath );
+ itkGetConstReferenceMacro( Spacing, TSpacing );
+ itkGetConstReferenceMacro( Origin, TPoint );
+ itkGetConstReferenceMacro( Direction, TDirection );
+ itkGetConstReferenceMacro( InverseDirection, TDirection );
+
+ itkSetMacro( Origin, TPoint );
+
public:
- TImageBase* GetReferenceImage( )
- { return( this->m_ReferenceImage ); }
- const TImageBase* GetReferenceImage( ) const
- { return( this->m_ReferenceImage ); }
- void SetReferenceImage( const TImageBase* image )
+ void AddVertex( const TContinuousIndex& vertex );
+ unsigned long GetSize( ) const;
+ TContinuousIndex GetContinuousVertex( unsigned long i ) const;
+ TIndex GetVertex( unsigned long i ) const;
+ TPoint GetPoint( unsigned long i ) const;
+ TPoint GetSmoothPoint( double u ) 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->m_ReferenceImage = TImageBase::New( );
- this->m_ReferenceImage->SetDirection( image->GetDirection( ) );
- this->m_ReferenceImage->SetOrigin( image->GetOrigin( ) );
- this->m_ReferenceImage->SetSpacing( image->GetSpacing( ) );
- this->Modified( );
+ this->SetSpacing( image->GetSpacing( ) );
+ this->SetOrigin( image->GetOrigin( ) );
+ this->SetDirection( image->GetDirection( ) );
}
protected:
- PolyLineParametricPath( ) { }
- virtual ~PolyLineParametricPath( ) { }
+ PolyLineParametricPath( );
+ virtual ~PolyLineParametricPath( );
+
+ virtual void _ComputeIndexToPhysicalPointMatrices( );
private:
// Purposely not implemented
Self& operator=( const Self& other );
protected:
- typename TImageBase::Pointer m_ReferenceImage;
+ typename TBezier::Pointer m_Bezier;
+
+ TSpacing m_Spacing;
+ TPoint m_Origin;
+ TDirection m_Direction;
+ TDirection m_InverseDirection;
+ TDirection m_IndexToPhysicalPoint;
+ TDirection m_PhysicalPointToIndex;
};
} // ecapseman
} // ecapseman
-#endif // __CPEXTENSIONS__DATASTRUCTURES__POLYLINEPARAMETRICPATH__H__
+#ifndef ITK_MANUAL_INSTANTIATION
+# include <cpExtensions/DataStructures/PolyLineParametricPath.hxx>
+#endif // ITK_MANUAL_INSTANTIATION
+
+#endif // __cpExtensions__DataStructures__PolyLineParametricPath__h__
// eof - $RCSfile$