From 08402abf2bcc4ebbb8097f339580a2a862f2797d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Tue, 14 Dec 2021 14:48:25 +0100 Subject: Used double instead of float for computing distance between two polygon vertices in precompute_polygon_distances() in the avoid crossing perimeters. Using a float instead of a double caused accumulation of error in the calculated distance, which in rare cases triggered an assert in get_shortest_direction(). --- src/libslic3r/GCode/AvoidCrossingPerimeters.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index d29f7216a..48b9515f7 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -765,8 +765,8 @@ static void precompute_polygon_distances(const Polygon &polygon, std::vector() - polygon[point_idx - 1].cast()).norm(); - polygon_distances_out.back() = polygon_distances_out[polygon.size() - 1] + (polygon.points.back().cast() - polygon.points.front().cast()).norm(); + polygon_distances_out[point_idx] = polygon_distances_out[point_idx - 1] + float((polygon[point_idx] - polygon[point_idx - 1]).cast().norm()); + polygon_distances_out.back() = polygon_distances_out[polygon.size() - 1] + float((polygon.points.back() - polygon.points.front()).cast().norm()); } static void precompute_expolygon_distances(const ExPolygon &ex_polygon, std::vector> &expolygon_distances_out) -- cgit v1.2.3