From 269ade4859f606da4dde71a6cdfd7b65a897dc9f Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 15 Dec 2021 19:28:35 +0100 Subject: fix div/0 in libnest2D supermerill/SuperSlicer#2053 --- src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp b/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp index 29a1ccd04..07b34f47d 100644 --- a/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp +++ b/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp @@ -281,9 +281,10 @@ inline NfpResult nfpConvexOnly(const RawShape& sh, // cos function. But with the quadrant info we can get the sign back int sign = q[0] == 1 || q[0] == 2 ? -1 : 1; + // supermerill: add safe-check for when two points are on the same position // If Ratio is an actual rational type, there is no precision loss - auto pcos1 = Ratio(lcos[0]) / lsq1 * sign * lcos[0]; - auto pcos2 = Ratio(lcos[1]) / lsq2 * sign * lcos[1]; + auto pcos1 = lsq1 != 0 ? Ratio(lcos[0]) / lsq1 * sign * lcos[0] : 1 * sign * lcos[0]; + auto pcos2 = lsq2 != 0 ? Ratio(lcos[1]) / lsq2 * sign * lcos[1] : 1 * sign * lcos[1]; return q[0] < 2 ? pcos1 < pcos2 : pcos1 > pcos2; } -- cgit v1.2.3