aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2012-07-04 18:25:07 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2012-07-04 18:25:07 +0200
commit54d55aeaf61869f2bcb8af79869bf3eb0274eed4 (patch)
tree4342fccf0e30433fe75ca0ce06f24bcb84dcb2e9 /Eigen/src
parentd878cf22276239771cf315d437508d8b41471968 (diff)
fix bug #487: isometry * scaling was not compiling
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/Geometry/Scaling.h17
-rw-r--r--Eigen/src/Geometry/Transform.h15
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)
{