diff options
-rw-r--r-- | Eigen/src/Geometry/Homogeneous.h | 6 | ||||
-rw-r--r-- | Eigen/src/Geometry/RotationBase.h | 49 |
2 files changed, 30 insertions, 25 deletions
diff --git a/Eigen/src/Geometry/Homogeneous.h b/Eigen/src/Geometry/Homogeneous.h index 530725d90..5f4cddcea 100644 --- a/Eigen/src/Geometry/Homogeneous.h +++ b/Eigen/src/Geometry/Homogeneous.h @@ -62,11 +62,13 @@ struct ei_traits<Homogeneous<MatrixType,Direction> > template<typename MatrixType,typename Lhs> struct ei_homogeneous_left_product_impl; template<typename MatrixType,typename Rhs> struct ei_homogeneous_right_product_impl; -template<typename MatrixType,int Direction> class Homogeneous - : public MatrixBase<Homogeneous<MatrixType,Direction> > +template<typename MatrixType,int _Direction> class Homogeneous + : public MatrixBase<Homogeneous<MatrixType,_Direction> > { public: + enum { Direction = _Direction }; + EIGEN_GENERIC_PUBLIC_INTERFACE(Homogeneous) inline Homogeneous(const MatrixType& matrix) diff --git a/Eigen/src/Geometry/RotationBase.h b/Eigen/src/Geometry/RotationBase.h index 632ea3991..7a4307ee7 100644 --- a/Eigen/src/Geometry/RotationBase.h +++ b/Eigen/src/Geometry/RotationBase.h @@ -25,8 +25,9 @@ #ifndef EIGEN_ROTATIONBASE_H #define EIGEN_ROTATIONBASE_H -// this file aims to contains the various representations of rotation/orientation -// in 2D and 3D space excepted Matrix and Quaternion. +// forward declaration +template<typename RotationDerived, typename MatrixType, bool IsVector=MatrixType::IsVectorAtCompileTime> +struct ei_rotation_base_generic_product_selector; /** \class RotationBase * @@ -47,25 +48,6 @@ class RotationBase typedef Matrix<Scalar,Dim,Dim> RotationMatrixType; typedef Matrix<Scalar,Dim,1> VectorType; - protected: - template<typename MatrixType, bool IsVector=MatrixType::IsVectorAtCompileTime> - struct generic_product_selector - { - typedef RotationMatrixType ReturnType; - inline static RotationMatrixType run(const Derived& r, const MatrixType& m) - { return r.toRotationMatrix() * m; } - }; - - template<typename OtherVectorType> - struct generic_product_selector<OtherVectorType,true> - { - typedef VectorType ReturnType; - inline static VectorType run(const Derived& r, const OtherVectorType& v) - { - return r._transformVector(v); - } - }; - public: inline const Derived& derived() const { return *static_cast<const Derived*>(this); } inline Derived& derived() { return *static_cast<Derived*>(this); } @@ -90,9 +72,9 @@ class RotationBase * - a vector of size Dim */ template<typename OtherDerived> - inline typename generic_product_selector<OtherDerived,OtherDerived::IsVectorAtCompileTime>::ReturnType + inline typename ei_rotation_base_generic_product_selector<Derived,OtherDerived,OtherDerived::IsVectorAtCompileTime>::ReturnType operator*(const MatrixBase<OtherDerived>& e) const - { return generic_product_selector<OtherDerived>::run(derived(), e.derived()); } + { return ei_rotation_base_generic_product_selector<Derived,OtherDerived>::run(derived(), e.derived()); } /** \returns the concatenation of a linear transformation \a l with the rotation \a r */ template<typename OtherDerived> friend @@ -109,6 +91,27 @@ class RotationBase { return toRotationMatrix() * v; } }; +// implementation of the generic product rotation * matrix +template<typename RotationDerived, typename MatrixType> +struct ei_rotation_base_generic_product_selector<RotationDerived,MatrixType,false> +{ + enum { Dim = RotationDerived::Dim }; + typedef Matrix<typename RotationDerived::Scalar,Dim,Dim> ReturnType; + inline static ReturnType run(const RotationDerived& r, const MatrixType& m) + { return r.toRotationMatrix() * m; } +}; + +template<typename RotationDerived,typename OtherVectorType> +struct ei_rotation_base_generic_product_selector<RotationDerived,OtherVectorType,true> +{ + enum { Dim = RotationDerived::Dim }; + typedef Matrix<typename RotationDerived::Scalar,Dim,1> ReturnType; + inline static ReturnType run(const RotationDerived& r, const OtherVectorType& v) + { + return r._transformVector(v); + } +}; + /** \geometry_module * * Constructs a Dim x Dim rotation matrix from the rotation \a r |