diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2008-03-22 21:18:07 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2008-03-22 21:18:07 +0000 |
| commit | 5571f5a7524c631e6f531910d1ec9d2c5de12b5d (patch) | |
| tree | 15841ae94a9f7514191ac55cf37add088712349c /src/2geom/matrix.cpp | |
| parent | More multiple inheritance delegation. 53 files to go. (diff) | |
| download | inkscape-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.cpp | 36 |
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 { |
