FIX: tree(manual) didn't support well

1. We have a logic to add supports at corners for tree(auto), now I extend
it to tree(manual) also.
2. Only show support_critical_regions_only option to tree(auto).

Github: #2008
Change-Id: I161444da93464fd2ef0e0f3b40a0c5852beba351
(cherry picked from commit af4efb4aadc2a4d16de3eea881c6610955985fff)
This commit is contained in:
Arthur 2023-07-12 10:47:15 +08:00 committed by Lane.Wei
parent 24bd494ad9
commit 44fdfe8fff
2 changed files with 7 additions and 4 deletions

View file

@ -1101,7 +1101,7 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only)
SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers); SupportLayer* ts_layer = m_object->get_support_layer(layer_nr + m_raft_layers);
auto layer = m_object->get_layer(layer_nr); auto layer = m_object->get_layer(layer_nr);
auto lower_layer = layer->lower_layer; auto lower_layer = layer->lower_layer;
if (support_critical_regions_only) { if (support_critical_regions_only && is_auto(stype)) {
ts_layer->overhang_areas.clear(); ts_layer->overhang_areas.clear();
if (lower_layer == nullptr) if (lower_layer == nullptr)
ts_layer->overhang_areas = layer->sharp_tails; ts_layer->overhang_areas = layer->sharp_tails;
@ -1153,7 +1153,8 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only)
if (svg.is_opened()) { if (svg.is_opened()) {
svg.draw_outline(m_object->get_layer(layer->id())->lslices, "yellow"); svg.draw_outline(m_object->get_layer(layer->id())->lslices, "yellow");
svg.draw(layer->overhang_areas, "orange"); svg.draw(layer->overhang_areas, "orange");
svg.draw(blockers[layer->id()], "red"); if (blockers.size() > layer->id())
svg.draw(blockers[layer->id()], "red");
for (auto& overhang : layer->overhang_areas) { for (auto& overhang : layer->overhang_areas) {
double aarea = overhang.area()/ area_thresh_well_supported; double aarea = overhang.area()/ area_thresh_well_supported;
auto pt = get_extents(overhang).center(); auto pt = get_extents(overhang).center();
@ -3481,7 +3482,8 @@ void TreeSupport::generate_contact_points(std::vector<std::vector<TreeSupport::N
curr_nodes.emplace_back(contact_node); curr_nodes.emplace_back(contact_node);
} }
} }
if (ts_layer->overhang_types[&overhang_part] == SupportLayer::Detected) { // add supports at corners for both auto and manual overhangs, github #2008
if (/*ts_layer->overhang_types[&overhang_part] == SupportLayer::Detected*/1) {
// add points at corners // add points at corners
auto &points = overhang_part.contour.points; auto &points = overhang_part.contour.points;
int nSize = points.size(); int nSize = points.size();

View file

@ -607,7 +607,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
"support_interface_pattern", "support_interface_top_layers", "support_interface_bottom_layers", "support_interface_pattern", "support_interface_top_layers", "support_interface_bottom_layers",
"bridge_no_support", "max_bridge_length", "support_top_z_distance", "support_bottom_z_distance", "bridge_no_support", "max_bridge_length", "support_top_z_distance", "support_bottom_z_distance",
//BBS: add more support params to dependent of enable_support //BBS: add more support params to dependent of enable_support
"support_type", "support_on_build_plate_only", "support_critical_regions_only", "support_type", "support_on_build_plate_only",
"support_remove_small_overhang", "support_remove_small_overhang",
"support_object_xy_distance"/*, "independent_support_layer_height"*/}) "support_object_xy_distance"/*, "independent_support_layer_height"*/})
toggle_field(el, have_support_material); toggle_field(el, have_support_material);
@ -621,6 +621,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
// hide tree support settings when normal is selected // hide tree support settings when normal is selected
for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", "tree_support_branch_diameter", "max_bridge_length","tree_support_brim_width" }) for (auto el : {"tree_support_branch_angle", "tree_support_wall_count", "tree_support_branch_distance", "tree_support_branch_diameter", "max_bridge_length","tree_support_brim_width" })
toggle_line(el, support_is_tree); toggle_line(el, support_is_tree);
toggle_line("support_critical_regions_only", is_auto(support_type) && support_is_tree);
// tree support use max_bridge_length instead of bridge_no_support // tree support use max_bridge_length instead of bridge_no_support
toggle_line("bridge_no_support", !support_is_tree); toggle_line("bridge_no_support", !support_is_tree);