From 5a03f60c3196f09366b59ec90b90c53552d7d084 Mon Sep 17 00:00:00 2001 From: PavelMikus Date: Wed, 16 Feb 2022 16:11:47 +0100 Subject: [PATCH] fixed bug: wrong estimation of angles inside holes --- src/libslic3r/GCode/SeamPlacerNG.cpp | 6 +++--- src/libslic3r/GCode/SeamPlacerNG.hpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode/SeamPlacerNG.cpp b/src/libslic3r/GCode/SeamPlacerNG.cpp index fe7e7f2aed..69567cef3c 100644 --- a/src/libslic3r/GCode/SeamPlacerNG.cpp +++ b/src/libslic3r/GCode/SeamPlacerNG.cpp @@ -293,7 +293,7 @@ Polygons extract_perimeter_polygons(const Layer *layer) { void process_perimeter_polygon(const Polygon &orig_polygon, float z_coord, std::vector &result_vec, const GlobalModelInfo &global_model_info) { Polygon polygon = orig_polygon; - polygon.make_counter_clockwise(); + bool was_clockwise = polygon.make_counter_clockwise(); std::vector lengths = polygon.parameter_by_length(); std::vector angles = calculate_polygon_angles_at_vertices(polygon, lengths, SeamPlacer::polygon_angles_arm_distance); @@ -308,8 +308,6 @@ void process_perimeter_polygon(const Polygon &orig_polygon, float z_coord, std:: Vec3f unscaled_position = Vec3f { unscaled_p.x(), unscaled_p.y(), z_coord }; EnforcedBlockedSeamPoint type = EnforcedBlockedSeamPoint::NONE; - float ccw_angle = angles[index]; - if (enforcer_dist_sqr >= 0) { // if enforcer dist < 0, it means there are no enforcers, skip //if there is enforcer, any other enforcer cannot be in a sphere defined by last check point and enforcer distance // so as long as we are at least enforcer_blocker_distance_tolerance deep in that area, and the enforcer distance is greater than @@ -340,6 +338,8 @@ void process_perimeter_polygon(const Polygon &orig_polygon, float z_coord, std:: } } + float ccw_angle = was_clockwise ? -angles[index] : angles[index]; + result_vec.emplace_back(unscaled_position, polygon.size() - index - 1, ccw_angle, type); } } diff --git a/src/libslic3r/GCode/SeamPlacerNG.hpp b/src/libslic3r/GCode/SeamPlacerNG.hpp index 3379a19355..e30530b7ef 100644 --- a/src/libslic3r/GCode/SeamPlacerNG.hpp +++ b/src/libslic3r/GCode/SeamPlacerNG.hpp @@ -84,7 +84,7 @@ public: static constexpr float expected_hits_per_area = 100.0f; static constexpr size_t ray_count = 150000; //NOTE: fixed count of rays is better: // on small models, the visibility has huge impact and precision is welcomed. - // on large models, it would be very expensive to get similar results, and the effect is arguably less important. + // on large models, it would be very expensive to get similar results, and the local effect is arguably less important. static constexpr float cosine_hemisphere_sampling_power = 1.5f; static constexpr float polygon_angles_arm_distance = 0.6f; static constexpr float enforcer_blocker_sqr_distance_tolerance = 0.4f;