From 9ccb413c0258a2be076a9d2aeeb74dad4c08e3aa Mon Sep 17 00:00:00 2001 From: PavelMikus Date: Wed, 11 Jan 2023 14:32:46 +0100 Subject: [PATCH] Extra perimeters fix --- src/libslic3r/PerimeterGenerator.cpp | 8 ++------ src/libslic3r/PrintObject.cpp | 3 --- src/libslic3r/SupportSpotsGenerator.cpp | 5 +++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index b6e0520d7c..15210b6414 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -837,12 +837,8 @@ std::tuple, Polygons> generate_extra_perimeters_over for (size_t i = 0; i < anchor_areas_w_delta_anchor_size.size() - 1; i++) { // Then, clip off each anchor area by the next area expanded back to original size, so that this smaller anchor region is only where larger wouldnt fit - Polygons clipped = diff(anchor_areas_w_delta_anchor_size[i], expand(anchor_areas_w_delta_anchor_size[i + 1], - deltas[i], EXTRA_PERIMETER_OFFSET_PARAMETERS)); - // Finally, intersect the region with clipped part - anchor_areas_w_delta_anchor_size[i] = intersection(anchor_areas_w_delta_anchor_size[i], - expand(clipped, deltas[i + 1] + 0.1 * overhang_flow.scaled_spacing(), - EXTRA_PERIMETER_OFFSET_PARAMETERS)); + anchor_areas_w_delta_anchor_size[i] = diff(anchor_areas_w_delta_anchor_size[i], expand(anchor_areas_w_delta_anchor_size[i + 1], + deltas[i + 1], EXTRA_PERIMETER_OFFSET_PARAMETERS)); } for (size_t i = 0; i < anchor_areas_w_delta_anchor_size.size(); i++) { diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 7381f5f563..5423a3ad19 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -780,9 +780,6 @@ bool PrintObject::invalidate_state_by_config_options( bool PrintObject::invalidate_step(PrintObjectStep step) { bool invalidated = Inherited::invalidate_step(step); - if (invalidated && step == posSupportSpotsSearch) { - this->m_shared_regions->generated_support_points.reset(); - } // propagate to dependent steps if (step == posPerimeters) { diff --git a/src/libslic3r/SupportSpotsGenerator.cpp b/src/libslic3r/SupportSpotsGenerator.cpp index ceb06a7d1b..68a8a40111 100644 --- a/src/libslic3r/SupportSpotsGenerator.cpp +++ b/src/libslic3r/SupportSpotsGenerator.cpp @@ -265,8 +265,9 @@ std::vector check_extrusion_entity_stability(const ExtrusionEntit float sign = (prev_layer_boundary.distance_from_lines(curr_point.position) + 0.5f * flow_width) < 0.0f ? -1.0f : 1.0f; curr_point.distance *= sign; - - float max_bridge_len = params.bridge_distance / (1.0f + std::abs(curr_point.curvature)); + + float max_bridge_len = params.bridge_distance / + ((1.0f + std::abs(curr_point.curvature)) * (1.0f + std::abs(curr_point.curvature))); if (curr_point.distance > 2.0f * flow_width) { line_out.form_quality = 0.8f;