From 3fe051b0ad557f0d4f67460c7c0cd7ae255b3b5a Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Tue, 29 Aug 2023 17:34:06 +0200 Subject: [PATCH] Fix arrange tests on raspberry pi There were indeed floating point divisions with zero --- src/libslic3r/Arrange/Core/NFP/EdgeCache.cpp | 7 +++++++ src/libslic3r/Arrange/Core/NFP/EdgeCache.hpp | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Arrange/Core/NFP/EdgeCache.cpp b/src/libslic3r/Arrange/Core/NFP/EdgeCache.cpp index 03e52fe0ab..b9f4e90ec6 100644 --- a/src/libslic3r/Arrange/Core/NFP/EdgeCache.cpp +++ b/src/libslic3r/Arrange/Core/NFP/EdgeCache.cpp @@ -30,6 +30,9 @@ void EdgeCache::sample_contour(double accuracy, std::vector &sa const auto N = m_contour.distances.size(); const auto S = stride(N, accuracy); + if (N == 0 || S == 0) + return; + samples.reserve(N / S + 1); for(size_t i = 0; i < N; i += S) { samples.emplace_back( @@ -41,6 +44,10 @@ void EdgeCache::sample_contour(double accuracy, std::vector &sa const auto NH = hc.distances.size(); const auto SH = stride(NH, accuracy); + + if (NH == 0 || SH == 0) + continue; + samples.reserve(samples.size() + NH / SH + 1); for (size_t i = 0; i < NH; i += SH) { samples.emplace_back( diff --git a/src/libslic3r/Arrange/Core/NFP/EdgeCache.hpp b/src/libslic3r/Arrange/Core/NFP/EdgeCache.hpp index 8146df1f8f..9823d4517b 100644 --- a/src/libslic3r/Arrange/Core/NFP/EdgeCache.hpp +++ b/src/libslic3r/Arrange/Core/NFP/EdgeCache.hpp @@ -48,8 +48,9 @@ public: // when fetching corners. static inline size_t stride(const size_t N, double accuracy) { + size_t n = std::max(size_t{1}, N); return static_cast( - std::round(N / std::pow(N, std::pow(accuracy, 1./3.))) + std::round(N / std::pow(n, std::pow(accuracy, 1./3.))) ); }