From a41435d0449e3cd6ccf170189a2a8130fd3ad1e1 Mon Sep 17 00:00:00 2001 From: PavelMikus Date: Tue, 2 Aug 2022 10:05:48 +0200 Subject: [PATCH] fixed overhang estimation correclty --- src/libslic3r/GCode/SeamPlacer.cpp | 7 +++++-- src/libslic3r/GCode/SeamPlacer.hpp | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp index 94086c56d6..5b7e525af1 100644 --- a/src/libslic3r/GCode/SeamPlacer.cpp +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -1159,11 +1159,14 @@ void SeamPlacer::calculate_overhangs_and_layer_embedding(const PrintObject *po) Point point = Point::new_scale(Vec2f { perimeter_point.position.head<2>() }); if (prev_layer_distancer.get() != nullptr) { perimeter_point.overhang = prev_layer_distancer->distance_from_perimeter(point) - - tan(SeamPlacer::overhang_angle_threshold * PI / 180.0f) * po->layers()[layer_idx]->height; + + 0.5f * perimeter_point.perimeter.flow_width + - tan(SeamPlacer::overhang_angle_threshold * PI / 180.0f) + * po->layers()[layer_idx]->height; } if (should_compute_layer_embedding) { // search for embedded perimeter points (points hidden inside the print ,e.g. multimaterial join, best position for seam) - perimeter_point.embedded_distance = current_layer_distancer->distance_from_perimeter(point); + perimeter_point.embedded_distance = current_layer_distancer->distance_from_perimeter(point) + + 0.5f * perimeter_point.perimeter.flow_width; } } diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp index 30f077e1af..0a6f013d0c 100644 --- a/src/libslic3r/GCode/SeamPlacer.hpp +++ b/src/libslic3r/GCode/SeamPlacer.hpp @@ -134,7 +134,7 @@ public: // max allowed overhang angle for seam placement, in degrees, measured from vertical direction //TODO There is some problem in layer distance computation, so the current angle is much lower to counter that issue // However, it should be fixed correctly - static constexpr float overhang_angle_threshold = 15.0f; + static constexpr float overhang_angle_threshold = 50.0f; // determines angle importance compared to visibility ( neutral value is 1.0f. ) static constexpr float angle_importance_aligned = 0.6f;