FIX: blockers are not working correctly with organic supports.

jira: STUDIO-6278
Change-Id: If74e611821db25241dd67dfc4a3e44fac557a10d
(cherry picked from commit 76b9b2b7e856f648082cd3a09386775695c6accb)
This commit is contained in:
Arthur 2024-03-08 16:35:05 +08:00 committed by Lane.Wei
parent c7d12b703e
commit cf35d0268f
1 changed files with 3 additions and 2 deletions

View File

@ -231,6 +231,7 @@ static std::vector<std::pair<TreeSupportSettings, std::vector<size_t>>> group_me
//FIXME this is a fudge constant!
double support_tree_tip_diameter = 0.8;
auto enforcer_overhang_offset = scaled<double>(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<std::pair<TreeSupportSettings, std::vector<size_t>>> 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<LayerIndex>(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<LayerIndex> &range) {
for (LayerIndex layer_id = range.begin(); layer_id < range.end(); ++ layer_id) {
const Layer &current_layer = *print_object.get_layer(layer_id);
@ -280,7 +281,7 @@ static std::vector<std::pair<TreeSupportSettings, std::vector<size_t>>> 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,