From cf35d0268fce05308d56b87bc2c50eb822451c02 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 8 Mar 2024 16:35:05 +0800 Subject: [PATCH] FIX: blockers are not working correctly with organic supports. jira: STUDIO-6278 Change-Id: If74e611821db25241dd67dfc4a3e44fac557a10d (cherry picked from commit 76b9b2b7e856f648082cd3a09386775695c6accb) --- src/libslic3r/Support/TreeSupport3D.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Support/TreeSupport3D.cpp b/src/libslic3r/Support/TreeSupport3D.cpp index 1995cf03d..c086e937a 100644 --- a/src/libslic3r/Support/TreeSupport3D.cpp +++ b/src/libslic3r/Support/TreeSupport3D.cpp @@ -231,6 +231,7 @@ static std::vector>> group_me //FIXME this is a fudge constant! double support_tree_tip_diameter = 0.8; auto enforcer_overhang_offset = scaled(support_tree_tip_diameter); + const coordf_t radius_sample_resolution = g_config_tree_support_collision_resolution; // calc the extrudable expolygons of each layer const coordf_t extrusion_width = config.line_width.value; @@ -249,7 +250,7 @@ static std::vector>> group_me size_t num_overhang_layers = support_auto ? num_object_layers : std::min(num_object_layers, std::max(size_t(support_enforce_layers), enforcers_layers.size())); tbb::parallel_for(tbb::blocked_range(1, num_overhang_layers), [&print_object, &config, &print_config, &enforcers_layers, &blockers_layers, - support_auto, support_enforce_layers, support_threshold_auto, tan_threshold, enforcer_overhang_offset, num_raft_layers, &throw_on_cancel, &out] + support_auto, support_enforce_layers, support_threshold_auto, tan_threshold, enforcer_overhang_offset, num_raft_layers, radius_sample_resolution, &throw_on_cancel, &out] (const tbb::blocked_range &range) { for (LayerIndex layer_id = range.begin(); layer_id < range.end(); ++ layer_id) { const Layer ¤t_layer = *print_object.get_layer(layer_id); @@ -280,7 +281,7 @@ static std::vector>> group_me raw_overhangs_calculated = true; } if (! (enforced_layer || blockers_layers.empty() || blockers_layers[layer_id].empty())) - overhangs = diff(overhangs, blockers_layers[layer_id], ApplySafetyOffset::Yes); + overhangs = diff(overhangs, offset_ex(union_(blockers_layers[layer_id]), scale_(radius_sample_resolution)), ApplySafetyOffset::Yes); //if (config.bridge_no_support) { // for (const LayerRegion *layerm : current_layer.regions()) // remove_bridges_from_contacts(print_config, lower_layer, *layerm,