diff options
author | Gael Guennebaud <g.gael@free.fr> | 2012-07-04 18:25:07 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2012-07-04 18:25:07 +0200 |
commit | 54d55aeaf61869f2bcb8af79869bf3eb0274eed4 (patch) | |
tree | 4342fccf0e30433fe75ca0ce06f24bcb84dcb2e9 /Eigen/src | |
parent | d878cf22276239771cf315d437508d8b41471968 (diff) |
fix bug #487: isometry * scaling was not compiling
Diffstat (limited to 'Eigen/src')
-rw-r--r-- | Eigen/src/Geometry/Scaling.h | 17 | ||||
-rw-r--r-- | Eigen/src/Geometry/Transform.h | 15 |
2 files changed, 12 insertions, 20 deletions
diff --git a/Eigen/src/Geometry/Scaling.h b/Eigen/src/Geometry/Scaling.h index 3d4b254ca..65364f07f 100644 --- a/Eigen/src/Geometry/Scaling.h +++ b/Eigen/src/Geometry/Scaling.h @@ -75,7 +75,12 @@ public: /** Concatenates a uniform scaling and an affine transformation */ template<int Dim, int Mode, int Options> - inline Transform<Scalar,Dim,Mode> operator* (const Transform<Scalar,Dim, Mode, Options>& t) const; + inline Transform<Scalar,Dim,int(Mode)==int(Isometry)?Affine:Mode> operator* (const Transform<Scalar,Dim, Mode, Options>& t) const + { + Transform<Scalar,Dim,int(Mode)==int(Isometry)?Affine:Mode> res = t; + res.prescale(factor()); + return res; +} /** Concatenates a uniform scaling and a linear transformation matrix */ // TODO returns an expression @@ -171,16 +176,6 @@ UniformScaling<Scalar>::operator* (const Translation<Scalar,Dim>& t) const return res; } -template<typename Scalar> -template<int Dim,int Mode,int Options> -inline Transform<Scalar,Dim,Mode> -UniformScaling<Scalar>::operator* (const Transform<Scalar,Dim, Mode, Options>& t) const -{ - Transform<Scalar,Dim,Mode> res = t; - res.prescale(factor()); - return res; -} - } // end namespace Eigen #endif // EIGEN_SCALING_H diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h index cd8d74bae..b2a503ad2 100644 --- a/Eigen/src/Geometry/Transform.h +++ b/Eigen/src/Geometry/Transform.h @@ -545,7 +545,12 @@ public: inline Transform& operator=(const UniformScaling<Scalar>& t); inline Transform& operator*=(const UniformScaling<Scalar>& s) { return scale(s.factor()); } - inline Transform operator*(const UniformScaling<Scalar>& s) const; + inline Transform<Scalar,Dim,int(Mode)==int(Isometry)?Affine:Isometry> operator*(const UniformScaling<Scalar>& s) const + { + Transform<Scalar,Dim,int(Mode)==int(Isometry)?Affine:Isometry,Options> res = *this; + res.scale(s.factor()); + return res; + } inline Transform& operator*=(const DiagonalMatrix<Scalar,Dim>& s) { linear() *= s; return *this; } @@ -974,14 +979,6 @@ inline Transform<Scalar,Dim,Mode,Options>& Transform<Scalar,Dim,Mode,Options>::o } template<typename Scalar, int Dim, int Mode, int Options> -inline Transform<Scalar,Dim,Mode,Options> Transform<Scalar,Dim,Mode,Options>::operator*(const UniformScaling<Scalar>& s) const -{ - Transform res = *this; - res.scale(s.factor()); - return res; -} - -template<typename Scalar, int Dim, int Mode, int Options> template<typename Derived> inline Transform<Scalar,Dim,Mode,Options>& Transform<Scalar,Dim,Mode,Options>::operator=(const RotationBase<Derived,Dim>& r) { |