diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index b582be3b002..c85c69e8e56 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -9805,9 +9805,9 @@ static bool top_surface_image_append_recolored_perimeter_path(ExtrusionEntitiesP }; for (size_t point_idx = 1; point_idx < path.polyline.points.size(); ++point_idx) { - const Point &p0 = path.polyline.points[point_idx - 1]; - const Point &p1 = path.polyline.points[point_idx]; - const double len_mm = unscale(p0.distance_to(p1)); + const Point3 &p0 = path.polyline.points[point_idx - 1]; + const Point3 &p1 = path.polyline.points[point_idx]; + const double len_mm = unscale(p0.to_point().distance_to(p1.to_point())); if (!std::isfinite(len_mm) || len_mm <= EPSILON) continue; const int steps = std::max(1, int(std::floor(len_mm / min_run_mm))); diff --git a/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp index 88671391db9..c14d6329e94 100644 --- a/src/libslic3r/Polyline.hpp +++ b/src/libslic3r/Polyline.hpp @@ -302,6 +302,8 @@ public: virtual Lines3 lines() const; + bool is_closed() const { return this->points.size() >= 2 && this->points.front() == this->points.back(); } + // Convert to 2D Polyline by dropping Z coordinates Polyline to_polyline() const;