aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2008-12-07 17:49:56 +0000
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2008-12-07 17:49:56 +0000
commit09fd69d7344c8abea3179a4f4e68fb7f23f10d1f (patch)
treef1d637e2f7672ccfe5dd63896fb8c20ed875f829 /Eigen/src
parent6700f07fb0ba776cc226e5fd021e4ad4d5086fb0 (diff)
* add Transform explicit constructors taking translation/scaling/rotation
* add Transform::operator= taking rotation. An old remnant was left commented out. Why was it disabled? * slight optimization in operator= taking translation * slight optimization (perhaps) in the new memory assertion
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/Core/util/Memory.h2
-rw-r--r--Eigen/src/Geometry/Transform.h26
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;
}