00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef EIGEN_SPLINES_FWD_H
00011 #define EIGEN_SPLINES_FWD_H
00012
00013 #include <Eigen/Core>
00014
00015 namespace Eigen
00016 {
00017 template <typename Scalar, int Dim, int Degree = Dynamic> class Spline;
00018
00019 template < typename SplineType, int DerivativeOrder = Dynamic > struct SplineTraits {};
00020
00025 template <typename _Scalar, int _Dim, int _Degree>
00026 struct SplineTraits< Spline<_Scalar, _Dim, _Degree>, Dynamic >
00027 {
00028 typedef _Scalar Scalar;
00029 enum { Dimension = _Dim };
00030 enum { Degree = _Degree };
00031
00032 enum { OrderAtCompileTime = _Degree==Dynamic ? Dynamic : _Degree+1 };
00033 enum { NumOfDerivativesAtCompileTime = OrderAtCompileTime };
00034
00036 typedef Array<Scalar,1,OrderAtCompileTime> BasisVectorType;
00037
00039 typedef Array<Scalar,Dynamic,Dynamic,RowMajor,NumOfDerivativesAtCompileTime,OrderAtCompileTime> BasisDerivativeType;
00040
00042 typedef Array<Scalar,Dimension,Dynamic,ColMajor,Dimension,NumOfDerivativesAtCompileTime> DerivativeType;
00043
00045 typedef Array<Scalar,Dimension,1> PointType;
00046
00048 typedef Array<Scalar,1,Dynamic> KnotVectorType;
00049
00051 typedef Array<Scalar,Dimension,Dynamic> ControlPointVectorType;
00052 };
00053
00060 template < typename _Scalar, int _Dim, int _Degree, int _DerivativeOrder >
00061 struct SplineTraits< Spline<_Scalar, _Dim, _Degree>, _DerivativeOrder > : public SplineTraits< Spline<_Scalar, _Dim, _Degree> >
00062 {
00063 enum { OrderAtCompileTime = _Degree==Dynamic ? Dynamic : _Degree+1 };
00064 enum { NumOfDerivativesAtCompileTime = _DerivativeOrder==Dynamic ? Dynamic : _DerivativeOrder+1 };
00065
00067 typedef Array<_Scalar,Dynamic,Dynamic,RowMajor,NumOfDerivativesAtCompileTime,OrderAtCompileTime> BasisDerivativeType;
00068
00070 typedef Array<_Scalar,_Dim,Dynamic,ColMajor,_Dim,NumOfDerivativesAtCompileTime> DerivativeType;
00071 };
00072
00074 typedef Spline<float,2> Spline2f;
00075
00077 typedef Spline<float,3> Spline3f;
00078
00080 typedef Spline<double,2> Spline2d;
00081
00083 typedef Spline<double,3> Spline3d;
00084 }
00085
00086 #endif // EIGEN_SPLINES_FWD_H