summaryrefslogtreecommitdiffstats
path: root/src/2geom/matrix.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-03-22 21:18:07 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-03-22 21:18:07 +0000
commit5571f5a7524c631e6f531910d1ec9d2c5de12b5d (patch)
tree15841ae94a9f7514191ac55cf37add088712349c /src/2geom/matrix.cpp
parentMore multiple inheritance delegation. 53 files to go. (diff)
downloadinkscape-5571f5a7524c631e6f531910d1ec9d2c5de12b5d.tar.gz
inkscape-5571f5a7524c631e6f531910d1ec9d2c5de12b5d.zip
update to latest 2geom
(bzr r5170)
Diffstat (limited to 'src/2geom/matrix.cpp')
-rw-r--r--src/2geom/matrix.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/2geom/matrix.cpp b/src/2geom/matrix.cpp
index 6d7c772c0..f90bb6d42 100644
--- a/src/2geom/matrix.cpp
+++ b/src/2geom/matrix.cpp
@@ -108,9 +108,9 @@ void Matrix::setIdentity() {
//TODO: use eps
bool Matrix::isIdentity(Coord const eps) const {
- return are_near(_c[0], 1.0) && are_near(_c[1], 0.0) &&
- are_near(_c[2], 0.0) && are_near(_c[3], 1.0) &&
- are_near(_c[4], 0.0) && are_near(_c[5], 0.0);
+ return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
+ are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps) &&
+ are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
}
/** Answers the question "Does this matrix perform a translation, and \em{only} a translation?"
@@ -118,9 +118,9 @@ bool Matrix::isIdentity(Coord const eps) const {
\return A bool representing yes/no.
*/
bool Matrix::isTranslation(Coord const eps) const {
- return are_near(_c[0], 1.0) && are_near(_c[1], 0.0) &&
- are_near(_c[2], 0.0) && are_near(_c[3], 1.0) &&
- (!are_near(_c[4], 0.0) || !are_near(_c[5], 0.0));
+ return are_near(_c[0], 1.0, eps) && are_near(_c[1], 0.0, eps) &&
+ are_near(_c[2], 0.0, eps) && are_near(_c[3], 1.0, eps) &&
+ (!are_near(_c[4], 0.0, eps) || !are_near(_c[5], 0.0, eps));
}
/** Answers the question "Does this matrix perform a scale, and \em{only} a Scale?"
@@ -128,9 +128,9 @@ bool Matrix::isTranslation(Coord const eps) const {
\return A bool representing yes/no.
*/
bool Matrix::isScale(Coord const eps) const {
- return !are_near(_c[0], 1.0) || !are_near(_c[3], 1.0) && //NOTE: these are the diags, and the next line opposite diags
- are_near(_c[1], 0.0) && are_near(_c[2], 0.0) &&
- are_near(_c[4], 0.0) && are_near(_c[5], 0.0);
+ return !are_near(_c[0], 1.0, eps) || !are_near(_c[3], 1.0, eps) && //NOTE: these are the diags, and the next line opposite diags
+ are_near(_c[1], 0.0, eps) && are_near(_c[2], 0.0, eps) &&
+ are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
}
/** Answers the question "Does this matrix perform a uniform scale, and \em{only} a uniform scale?"
@@ -138,9 +138,9 @@ bool Matrix::isScale(Coord const eps) const {
\return A bool representing yes/no.
*/
bool Matrix::isUniformScale(Coord const eps) const {
- return !are_near(_c[0], 1.0) && are_near(_c[0], _c[3]) &&
- are_near(_c[1], 0.0) && are_near(_c[2], 0.0) &&
- are_near(_c[4], 0.0) && are_near(_c[5], 0.0);
+ return !are_near(_c[0], 1.0, eps) && are_near(_c[0], _c[3], eps) &&
+ are_near(_c[1], 0.0, eps) && are_near(_c[2], 0.0, eps) &&
+ are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps);
}
/** Answers the question "Does this matrix perform a rotation, and \em{only} a rotation?"
@@ -148,13 +148,17 @@ bool Matrix::isUniformScale(Coord const eps) const {
\return A bool representing yes/no.
*/
bool Matrix::isRotation(Coord const eps) const {
- return !are_near(_c[0], _c[3]) && are_near(_c[1], -_c[2]) &&
- are_near(_c[4], 0.0) && are_near(_c[5], 0.0) &&
- are_near(_c[0]*_c[0] + _c[1]*_c[1], 1.0);
+ return !are_near(_c[0], _c[3], eps) && are_near(_c[1], -_c[2], eps) &&
+ are_near(_c[4], 0.0, eps) && are_near(_c[5], 0.0, eps) &&
+ are_near(_c[0]*_c[0] + _c[1]*_c[1], 1.0, eps);
}
bool Matrix::onlyScaleAndTranslation(Coord const eps) const {
- return are_near(_c[0], _c[3]) && are_near(_c[1], 0) && are_near(_c[2], 0);
+ return are_near(_c[0], _c[3], eps) && are_near(_c[1], 0, eps) && are_near(_c[2], 0, eps);
+}
+
+bool Matrix::isSingular(Coord const eps) const {
+ return are_near(det(), 0.0, eps);
}
bool Matrix::flips() const {