2011-11-25 14:53:40 +01:00
// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 20010-2011 Hauke Heibel <hauke.heibel@gmail.com>
//
2012-07-13 14:42:47 -04:00
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
2011-11-25 14:53:40 +01:00
# ifndef EIGEN_SPLINES_FWD_H
# define EIGEN_SPLINES_FWD_H
# include <Eigen/Core>
namespace Eigen
{
template < typename Scalar , int Dim , int Degree = Dynamic > class Spline ;
2011-12-04 18:44:01 +01:00
template < typename SplineType , int DerivativeOrder = Dynamic > struct SplineTraits { } ;
2011-11-25 14:53:40 +01:00
2011-12-04 18:44:01 +01:00
/**
* \ ingroup Splines_Module
* \ brief Compile - time attributes of the Spline class for Dynamic degree .
* */
2011-11-25 14:53:40 +01:00
template < typename _Scalar , int _Dim , int _Degree >
struct SplineTraits < Spline < _Scalar , _Dim , _Degree > , Dynamic >
{
2011-12-04 18:44:01 +01:00
typedef _Scalar Scalar ; /*!< The spline curve's scalar type. */
enum { Dimension = _Dim /*!< The spline curve's dimension. */ } ;
enum { Degree = _Degree /*!< The spline curve's degree. */ } ;
2011-11-25 14:53:40 +01:00
2011-12-04 18:44:01 +01:00
enum { OrderAtCompileTime = _Degree = = Dynamic ? Dynamic : _Degree + 1 /*!< The spline curve's order at compile-time. */ } ;
enum { NumOfDerivativesAtCompileTime = OrderAtCompileTime /*!< The number of derivatives defined for the current spline. */ } ;
2011-11-25 14:53:40 +01:00
2011-12-04 18:44:01 +01:00
/** \brief The data type used to store non-zero basis functions. */
2011-11-25 14:53:40 +01:00
typedef Array < Scalar , 1 , OrderAtCompileTime > BasisVectorType ;
2011-12-04 18:44:01 +01:00
/** \brief The data type used to store the values of the basis function derivatives. */
2011-11-25 14:53:40 +01:00
typedef Array < Scalar , Dynamic , Dynamic , RowMajor , NumOfDerivativesAtCompileTime , OrderAtCompileTime > BasisDerivativeType ;
2011-12-04 18:44:01 +01:00
/** \brief The data type used to store the spline's derivative values. */
2011-11-25 14:53:40 +01:00
typedef Array < Scalar , Dimension , Dynamic , ColMajor , Dimension , NumOfDerivativesAtCompileTime > DerivativeType ;
2011-12-04 18:44:01 +01:00
/** \brief The point type the spline is representing. */
2011-11-25 14:53:40 +01:00
typedef Array < Scalar , Dimension , 1 > PointType ;
2011-12-04 18:44:01 +01:00
/** \brief The data type used to store knot vectors. */
2011-11-25 14:53:40 +01:00
typedef Array < Scalar , 1 , Dynamic > KnotVectorType ;
2011-12-04 18:44:01 +01:00
/** \brief The data type representing the spline's control points. */
2011-11-25 14:53:40 +01:00
typedef Array < Scalar , Dimension , Dynamic > ControlPointVectorType ;
} ;
2011-12-04 18:44:01 +01:00
/**
* \ ingroup Splines_Module
* \ brief Compile - time attributes of the Spline class for fixed degree .
*
* The traits class inherits all attributes from the SplineTraits of Dynamic degree .
* */
2011-11-25 14:53:40 +01:00
template < typename _Scalar , int _Dim , int _Degree , int _DerivativeOrder >
struct SplineTraits < Spline < _Scalar , _Dim , _Degree > , _DerivativeOrder > : public SplineTraits < Spline < _Scalar , _Dim , _Degree > >
{
2011-12-04 18:44:01 +01:00
enum { OrderAtCompileTime = _Degree = = Dynamic ? Dynamic : _Degree + 1 /*!< The spline curve's order at compile-time. */ } ;
enum { NumOfDerivativesAtCompileTime = _DerivativeOrder = = Dynamic ? Dynamic : _DerivativeOrder + 1 /*!< The number of derivatives defined for the current spline. */ } ;
2011-11-25 14:53:40 +01:00
2011-12-04 18:44:01 +01:00
/** \brief The data type used to store the values of the basis function derivatives. */
2011-11-25 14:53:40 +01:00
typedef Array < _Scalar , Dynamic , Dynamic , RowMajor , NumOfDerivativesAtCompileTime , OrderAtCompileTime > BasisDerivativeType ;
2011-12-04 18:44:01 +01:00
/** \brief The data type used to store the spline's derivative values. */
2011-11-25 14:53:40 +01:00
typedef Array < _Scalar , _Dim , Dynamic , ColMajor , _Dim , NumOfDerivativesAtCompileTime > DerivativeType ;
} ;
2011-12-04 18:44:01 +01:00
/** \brief 2D float B-spline with dynamic degree. */
2011-11-25 14:53:40 +01:00
typedef Spline < float , 2 > Spline2f ;
2011-12-04 18:44:01 +01:00
/** \brief 3D float B-spline with dynamic degree. */
2011-11-25 14:53:40 +01:00
typedef Spline < float , 3 > Spline3f ;
2011-12-04 18:44:01 +01:00
/** \brief 2D double B-spline with dynamic degree. */
2011-11-25 14:53:40 +01:00
typedef Spline < double , 2 > Spline2d ;
2011-12-04 18:44:01 +01:00
/** \brief 3D double B-spline with dynamic degree. */
2011-11-25 14:53:40 +01:00
typedef Spline < double , 3 > Spline3d ;
}
# endif // EIGEN_SPLINES_FWD_H