]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/DataStructures/PolyLineParametricPath.h
...
[cpPlugins.git] / lib / cpExtensions / DataStructures / PolyLineParametricPath.h
index 77828ee46140efc3a5bd7154e53fb362807f6f61..7f122000948b60793d6f995152980e75939efd55 100644 (file)
@@ -1,8 +1,9 @@
-#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
 {
@@ -10,39 +11,65 @@ 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
@@ -50,13 +77,24 @@ namespace cpExtensions
       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$