src/lib/VSDContentCollector.cpp | 43 +++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 16 deletions(-)
New commits: commit c156c530df29972d6c9391348ec4351809cfd2e2 Author: David Tardon <dtar...@redhat.com> Date: Tue Jun 20 09:58:13 2017 +0200 ofz#2307 avoid division by 0 Change-Id: I963ea7f7d7349c2614572b101be559b2f365a803 diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index f8f6d1e..98fae36 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -51,16 +51,25 @@ void computeRounding(double &prevX, double &prevY, double x0, double y0, double angle -= M_PI; sweep = !sweep; } - double q = fabs(rounding / tan(angle / 2.0)); - if (q > prevHalfLength) + double t = tan(angle / 2.0); + double q; + if (t != 0) { - q = prevHalfLength; - rounding = fabs(q*tan(angle / 2.0)); + q = fabs(rounding / t); + if (q > prevHalfLength) + { + q = prevHalfLength; + rounding = fabs(q * t); + } + if (q > halfLength) + { + q = halfLength; + rounding = fabs(q * t); + } } - if (q > halfLength) + else { - q = halfLength; - rounding = fabs(q*tan(angle / 2.0)); + q = fabs(rounding); } newX0 = x0-q*cos(lambda1); newY0 = y0-q*sin(lambda1); commit d131eedbeb087f4eae263a927ed1c253e30d007b Author: David Tardon <dtar...@redhat.com> Date: Tue Jun 20 09:43:13 2017 +0200 ofz#2268 avoid division by 0 Change-Id: Iaa07db26a677557499c9a1dc8cd4ce47c283aa2b diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index 639e12a..f8f6d1e 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -2430,7 +2430,8 @@ void libvisio::VSDContentCollector::transformAngle(double &angle, XForm *txtxfor double y1 =m_xform.pinLocY + sin(angle); transformPoint(x0, y0, txtxform); transformPoint(x1, y1, txtxform); - angle = fmod(2.0*M_PI + (y1 > y0 ? 1.0 : -1.0)*acos((x1-x0) / hypot(x1-x0, y1-y0)), 2.0*M_PI); + const double h = hypot(x1-x0, y1-y0); + angle = h != 0 ? fmod(2.0*M_PI + (y1 > y0 ? 1.0 : -1.0)*acos((x1-x0) / h), 2.0*M_PI) : 0; } void libvisio::VSDContentCollector::transformFlips(bool &flipX, bool &flipY) commit 40a0f2216a4279942d2f8c367ff59d843062086c Author: David Tardon <dtar...@redhat.com> Date: Tue Jun 20 09:25:34 2017 +0200 ofz#2252 avoid division by 0 Change-Id: Icb58538864ce87554b2777de9177995166ed2795 diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index b01afa0..639e12a 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -1396,7 +1396,8 @@ void libvisio::VSDContentCollector::collectEllipse(unsigned /* id */, unsigned l { _handleLevelChange(level); librevenge::RVNGPropertyList ellipse; - double angle = fmod(2.0*M_PI + (cy > yleft ? 1.0 : -1.0)*acos((cx-xleft) / hypot(xleft - cx, yleft - cy)), 2.0*M_PI); + double h = hypot(xleft - cx, yleft - cy); + double angle = h != 0 ? fmod(2.0*M_PI + (cy > yleft ? 1.0 : -1.0)*acos((cx-xleft) / h), 2.0*M_PI) : 0; transformPoint(cx, cy); transformPoint(xleft, yleft); transformPoint(xtop, ytop); commit e5d9a09912e484db5fa9c62e27b2a1f4e13e065a Author: David Tardon <dtar...@redhat.com> Date: Tue Jun 20 09:19:05 2017 +0200 use std::hypot Change-Id: Ie15d7b3727077a45ec69e1727785a8ce16f5fafc diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index a12066a..b01afa0 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -39,8 +39,8 @@ namespace void computeRounding(double &prevX, double &prevY, double x0, double y0, double x, double y, double &rounding, double &newX0, double &newY0, double &newX, double &newY, bool &sweep) { - double prevHalfLength = sqrt((y0-prevY)*(y0-prevY)+(x0-prevX)*(x0-prevX)) / 2.0; - double halfLength = sqrt((y-y0)*(y-y0)+(x-x0)*(x-x0)) / 2.0; + double prevHalfLength = hypot(y0 - prevY, x0 - prevX) / 2.0; + double halfLength = hypot(y - y0, x - x0) / 2.0; double lambda1 = atan2(y0-prevY, x0-prevX); double lambda2 = atan2(y-y0, x-x0); double angle = M_PI - lambda2 + lambda1; @@ -1362,7 +1362,7 @@ void libvisio::VSDContentCollector::collectEllipticalArcTo(unsigned /* id */, un VSD_DEBUG_MSG(("Centre: (%f,%f), angle %f\n", x0, y0, angle)); - double rx = sqrt(pow(x1-x0, 2) + pow(y1-y0, 2)); + double rx = hypot(x1 - x0, y1 - y0); double ry = ecc != 0 ? rx / ecc : rx; librevenge::RVNGPropertyList arc; int largeArc = 0; @@ -1396,14 +1396,14 @@ void libvisio::VSDContentCollector::collectEllipse(unsigned /* id */, unsigned l { _handleLevelChange(level); librevenge::RVNGPropertyList ellipse; - double angle = fmod(2.0*M_PI + (cy > yleft ? 1.0 : -1.0)*acos((cx-xleft) / sqrt((xleft - cx)*(xleft - cx) + (yleft - cy)*(yleft - cy))), 2.0*M_PI); + double angle = fmod(2.0*M_PI + (cy > yleft ? 1.0 : -1.0)*acos((cx-xleft) / hypot(xleft - cx, yleft - cy)), 2.0*M_PI); transformPoint(cx, cy); transformPoint(xleft, yleft); transformPoint(xtop, ytop); transformAngle(angle); - double rx = sqrt((xleft - cx)*(xleft - cx) + (yleft - cy)*(yleft - cy)); - double ry = sqrt((xtop - cx)*(xtop - cx) + (ytop - cy)*(ytop - cy)); + double rx = hypot(xleft - cx, yleft - cy); + double ry = hypot(xtop - cx, ytop - cy); int largeArc = 0; double centreSide = (xleft-xtop)*(cy-ytop) - (yleft-ytop)*(cx-xtop); @@ -1853,7 +1853,7 @@ void libvisio::VSDContentCollector::collectArcTo(unsigned /* id */, unsigned lev else { librevenge::RVNGPropertyList arc; - double chord = sqrt(pow((y2 - m_y),2) + pow((x2 - m_x),2)); + double chord = hypot(y2 - m_y, x2 - m_x); double radius = (4 * bow * bow + chord * chord) / (8 * fabs(bow)); int largeArc = fabs(bow) > radius ? 1 : 0; bool sweep = (bow < 0); @@ -2429,7 +2429,7 @@ void libvisio::VSDContentCollector::transformAngle(double &angle, XForm *txtxfor double y1 =m_xform.pinLocY + sin(angle); transformPoint(x0, y0, txtxform); transformPoint(x1, y1, txtxform); - angle = fmod(2.0*M_PI + (y1 > y0 ? 1.0 : -1.0)*acos((x1-x0) / sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0))), 2.0*M_PI); + angle = fmod(2.0*M_PI + (y1 > y0 ? 1.0 : -1.0)*acos((x1-x0) / hypot(x1-x0, y1-y0)), 2.0*M_PI); } void libvisio::VSDContentCollector::transformFlips(bool &flipX, bool &flipY) commit 8e38c802d6631b4ec36a422be66fc2f12835b4db Author: David Tardon <dtar...@redhat.com> Date: Tue Jun 20 08:45:27 2017 +0200 ofz#2248 avoid division by 0 Change-Id: Ic77513d0f7d315122c5c396e2e09d39cfc6e4cc8 diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp index 26c1322..a12066a 100644 --- a/src/lib/VSDContentCollector.cpp +++ b/src/lib/VSDContentCollector.cpp @@ -1363,7 +1363,7 @@ void libvisio::VSDContentCollector::collectEllipticalArcTo(unsigned /* id */, un VSD_DEBUG_MSG(("Centre: (%f,%f), angle %f\n", x0, y0, angle)); double rx = sqrt(pow(x1-x0, 2) + pow(y1-y0, 2)); - double ry = rx / ecc; + double ry = ecc != 0 ? rx / ecc : rx; librevenge::RVNGPropertyList arc; int largeArc = 0; int sweep = 1; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits