diff options
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Core/util/Memory.h | 2 | ||||
-rw-r--r-- | Eigen/src/Geometry/Transform.h | 26 |
2 files changed, 23 insertions, 5 deletions
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h index 5e42327e4..8494c5552 100644 --- a/Eigen/src/Core/util/Memory.h +++ b/Eigen/src/Core/util/Memory.h @@ -40,7 +40,7 @@ template <typename T, int Size, bool Align> struct ei_aligned_array ei_aligned_array() { - ei_assert(reinterpret_cast<unsigned int>(array)%16 == 0 + ei_assert((reinterpret_cast<unsigned int>(array) & 0xf) == 0 && "this assertion is explained here: http://eigen.tuxfamily.org/api/UnalignedArrayAssert.html **** READ THIS WEB PAGE !!! ****"); } }; diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h index 00cc8e47a..6ae49e90f 100644 --- a/Eigen/src/Geometry/Transform.h +++ b/Eigen/src/Geometry/Transform.h @@ -100,6 +100,11 @@ public: inline Transform(const Transform& other) { m_matrix = other.m_matrix; } + inline explicit Transform(const TranslationType& t) { *this = t; } + inline explicit Transform(const ScalingType& s) { *this = s; } + template<typename Derived> + inline explicit Transform(const RotationBase<Derived, Dim>& r) { *this = r; } + inline Transform& operator=(const Transform& other) { m_matrix = other.m_matrix; return *this; } @@ -226,8 +231,8 @@ public: return res; } -// template<typename Derived> -// inline Transform& operator=(const Rotation<Derived,Dim>& t); + template<typename Derived> + inline Transform& operator=(const RotationBase<Derived,Dim>& r); template<typename Derived> inline Transform& operator*=(const RotationBase<Derived,Dim>& r) { return rotate(r.toRotationMatrix()); } template<typename Derived> @@ -523,8 +528,10 @@ Transform<Scalar,Dim>::preshear(Scalar sx, Scalar sy) template<typename Scalar, int Dim> inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const TranslationType& t) { - setIdentity(); + linear().setIdentity; translation() = t.vector(); + m_matrix.template block<1,Dim>(Dim,0).setZero(); + m_matrix(Dim,Dim) = Scalar(1); return *this; } @@ -555,6 +562,17 @@ inline Transform<Scalar,Dim> Transform<Scalar,Dim>::operator*(const ScalingType& template<typename Scalar, int Dim> template<typename Derived> +inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const RotationBase<Derived,Dim>& r) +{ + linear() = ei_toRotationMatrix<Scalar,Dim>(r); + translation().setZero(); + m_matrix.template block<1,Dim>(Dim,0).setZero(); + m_matrix(Dim,Dim) = Scalar(1); + return *this; +} + +template<typename Scalar, int Dim> +template<typename Derived> inline Transform<Scalar,Dim> Transform<Scalar,Dim>::operator*(const RotationBase<Derived,Dim>& r) const { Transform res = *this; @@ -617,8 +635,8 @@ Transform<Scalar,Dim>::fromPositionOrientationScale(const MatrixBase<PositionDer linear() = ei_toRotationMatrix<Scalar,Dim>(orientation); linear() *= scale.asDiagonal(); translation() = position; - m_matrix(Dim,Dim) = 1.; m_matrix.template block<1,Dim>(Dim,0).setZero(); + m_matrix(Dim,Dim) = Scalar(1); return *this; } |