diff options
author | Lukáš Hejl <hejl.lukas@gmail.com> | 2021-12-14 16:48:25 +0300 |
---|---|---|
committer | Lukáš Hejl <hejl.lukas@gmail.com> | 2021-12-14 16:49:00 +0300 |
commit | 08402abf2bcc4ebbb8097f339580a2a862f2797d (patch) | |
tree | dea554722113cab9d8c93a247153ac69679c8fa0 | |
parent | e745ef095fd59049c6b7d709011c21069842c651 (diff) |
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().
-rw-r--r-- | src/libslic3r/GCode/AvoidCrossingPerimeters.cpp | 4 |
1 files 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<flo { polygon_distances_out.assign(polygon.size() + 1, 0.f); for (size_t point_idx = 1; point_idx < polygon.size(); ++point_idx) - polygon_distances_out[point_idx] = polygon_distances_out[point_idx - 1] + (polygon[point_idx].cast<float>() - polygon[point_idx - 1].cast<float>()).norm(); - polygon_distances_out.back() = polygon_distances_out[polygon.size() - 1] + (polygon.points.back().cast<float>() - polygon.points.front().cast<float>()).norm(); + polygon_distances_out[point_idx] = polygon_distances_out[point_idx - 1] + float((polygon[point_idx] - polygon[point_idx - 1]).cast<double>().norm()); + polygon_distances_out.back() = polygon_distances_out[polygon.size() - 1] + float((polygon.points.back() - polygon.points.front()).cast<double>().norm()); } static void precompute_expolygon_distances(const ExPolygon &ex_polygon, std::vector<std::vector<float>> &expolygon_distances_out) |