src/lib/VSDContentCollector.cpp | 15 +++++++-------- src/lib/libvisio_utils.h | 3 ++- 2 files changed, 9 insertions(+), 9 deletions(-)
New commits: commit 246155061002dc7e373f9cad435ff4382f4ff000 Author: David Tardon <dtar...@redhat.com> Date: Mon Jul 3 15:56:15 2017 +0200 ofz#2335 avoid divide by zero Change-Id: Icdc998f3415be6b70612305320faf2e08160f279 diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index 720ff41..f43ac24 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -1464,14 +1464,14 @@ void libvisio::VSDContentCollector::collectInfiniteLine(unsigned /* id */, unsig double xline = 0.0; double yline = 0.0; - if (x1 == x2) + if (VSD_APPROX_EQUAL(x1, x2)) { xmove = x1; ymove = 0; xline = x1; yline = m_pageHeight; } - else if (y1 == y2) + else if (VSD_APPROX_EQUAL(y1, y2)) { xmove = 0; ymove = y1; diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h index 3216ba2..d69b14c 100644 --- a/src/lib/libvisio_utils.h +++ b/src/lib/libvisio_utils.h @@ -22,6 +22,7 @@ #define VSD_EPSILON 1E-10 #define VSD_ALMOST_ZERO(m) (fabs(m) <= VSD_EPSILON) +#define VSD_APPROX_EQUAL(x, y) VSD_ALMOST_ZERO((x) - (y)) #include <librevenge/librevenge.h> #include <librevenge-stream/librevenge-stream.h> commit 2501d71f919cc3234718634eda82fd81ba9c9e78 Author: David Tardon <dtar...@redhat.com> Date: Mon Jul 3 15:52:07 2017 +0200 use VSD_ALMOST_ZERO macro consistently Change-Id: I8a40d35ac9a90d1e1683172dbff27bfd3250428c diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index 98fae36..720ff41 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -1327,7 +1327,6 @@ void libvisio::VSDContentCollector::collectDocumentTheme(const VSDXTheme *theme) m_documentTheme = theme; } -#define LIBVISIO_EPSILON 1E-10 void libvisio::VSDContentCollector::collectEllipticalArcTo(unsigned /* id */, unsigned level, double x3, double y3, double x2, double y2, double angle, double ecc) { _handleLevelChange(level); @@ -1348,7 +1347,7 @@ void libvisio::VSDContentCollector::collectEllipticalArcTo(unsigned /* id */, un m_x = x3; m_y = y3; - if (fabs(((x1-x2n)*(y2n-y3n) - (x2n-x3n)*(y1-y2n))) <= LIBVISIO_EPSILON || fabs(((x2n-x3n)*(y1-y2n) - (x1-x2n)*(y2n-y3n))) <= LIBVISIO_EPSILON) + if (VSD_ALMOST_ZERO(((x1-x2n)*(y2n-y3n) - (x2n-x3n)*(y1-y2n))) || VSD_ALMOST_ZERO(((x2n-x3n)*(y1-y2n) - (x1-x2n)*(y2n-y3n)))) // most probably all of the points lie on the same line, so use lineTo instead { librevenge::RVNGPropertyList end; @@ -2065,10 +2064,10 @@ double libvisio::VSDContentCollector::_NURBSBasis(unsigned knot, unsigned degree else return 0; } - if (knotVector.size() > knot+degree && fabs(knotVector[knot+degree]-knotVector[knot]) > LIBVISIO_EPSILON) + if (knotVector.size() > knot+degree && !VSD_ALMOST_ZERO(knotVector[knot+degree]-knotVector[knot])) basis = (point-knotVector[knot])/(knotVector[knot+degree]-knotVector[knot]) * _NURBSBasis(knot, degree-1, point, knotVector); - if (knotVector.size() > knot+degree+1 && fabs(knotVector[knot+degree+1] - knotVector[knot+1]) > LIBVISIO_EPSILON) + if (knotVector.size() > knot+degree+1 && !VSD_ALMOST_ZERO(knotVector[knot+degree+1] - knotVector[knot+1])) basis += (knotVector[knot+degree+1]-point)/(knotVector[knot+degree+1]-knotVector[knot+1]) * _NURBSBasis(knot+1, degree-1, point, knotVector); return basis; @@ -2090,7 +2089,7 @@ void libvisio::VSDContentCollector::_generatePolylineFromNURBS(unsigned degree, node.insert("librevenge:path-action", "L"); double x = 0; double y = 0; - double denominator = LIBVISIO_EPSILON; + double denominator = VSD_EPSILON; for (unsigned p = 0; p < controlPoints.size() && p < weights.size(); p++) { @@ -2119,7 +2118,7 @@ bool libvisio::VSDContentCollector::_isUniform(const std::vector<double> &weight double previousValue = weights[0]; for (std::vector<double>::size_type i = 0; i < weights.size(); ++i) { - if (fabs(weights[i] - previousValue) < LIBVISIO_EPSILON) + if (VSD_ALMOST_ZERO(weights[i] - previousValue)) previousValue = weights[i]; else return false; diff --git a/src/lib/libvisio_utils.h b/src/lib/libvisio_utils.h index 773f5b0..3216ba2 100644 --- a/src/lib/libvisio_utils.h +++ b/src/lib/libvisio_utils.h @@ -20,7 +20,7 @@ #include "VSDTypes.h" -#define VSD_EPSILON 1E-6 +#define VSD_EPSILON 1E-10 #define VSD_ALMOST_ZERO(m) (fabs(m) <= VSD_EPSILON) #include <librevenge/librevenge.h> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits