aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/src/Geometry/Homogeneous.h6
-rw-r--r--Eigen/src/Geometry/RotationBase.h49
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