#ifndef __cpExtensions__DataStructures__Simple3DCurve__h__ #define __cpExtensions__DataStructures__Simple3DCurve__h__ #include #include #include #include #include namespace cpExtensions { namespace DataStructures { /** */ template< class _TScalar > class cpExtensions_EXPORT Simple3DCurve : public itk::DataObject { public: typedef Simple3DCurve Self; typedef itk::DataObject Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef _TScalar TScalar; typedef itk::Matrix< TScalar, 3, 3 > TMatrix; typedef itk::Point< TScalar, 3 > TPoint; typedef typename TPoint::VectorType TVector; public: itkNewMacro( Self ); itkTypeMacro( Simple3DCurve, itk::DataObject ); public: template< class _TVector > inline void AddPoint( const _TVector& v ) { TPoint p; p[ 0 ] = v[ 0 ]; p[ 1 ] = v[ 1 ]; p[ 2 ] = v[ 2 ]; this->m_Points.push_back( p ); this->Modified( ); } virtual void Modified( ) const cpExtensions_OVERRIDE; void Clear( ); unsigned long GetNumberOfPoints( ) const; const TMatrix& GetFrame( unsigned int id ) const; const TPoint& GetPoint( unsigned int id ) const; TVector GetVector( unsigned int id ) const; protected: Simple3DCurve( ); virtual ~Simple3DCurve( ); private: // Purposely not implemented Simple3DCurve( const Self& other ); Self& operator=( const Self& other ); protected: std::vector< TPoint > m_Points; mutable std::vector< TMatrix > m_Frames; mutable bool m_FramesUpdated; }; } // ecapseman } // ecapseman #endif // __cpExtensions__DataStructures__Simple3DCurve__h__ // eof - $RCSfile$