ENH: some change for external bridge

1 move thick bridge from support to quality page

2 Fix the issue that some times the external bridge angle
is not the best, and the bridge line is not the shortest one.

Signed-off-by: salt.wei <salt.wei@bambulab.com>
Change-Id: Ie26570fb289898f6b62960f9333e79aa92c08ae4
This commit is contained in:
salt.wei 2022-09-27 11:34:22 +08:00 committed by Lane.Wei
parent d41e0db18f
commit 80575cd269
3 changed files with 8 additions and 6 deletions

View file

@ -119,25 +119,27 @@ bool BridgeDetector::detect_angle(double bridge_direction_override)
} }
double total_length = 0; double total_length = 0;
double arachored_length = 0;
double max_length = 0; double max_length = 0;
{ {
Lines clipped_lines = intersection_ln(lines, clip_area); Lines clipped_lines = intersection_ln(lines, clip_area);
for (size_t i = 0; i < clipped_lines.size(); ++i) { for (size_t i = 0; i < clipped_lines.size(); ++i) {
const Line &line = clipped_lines[i]; const Line &line = clipped_lines[i];
double len = line.length();
total_length += len;
if (expolygons_contain(this->_anchor_regions, line.a) && expolygons_contain(this->_anchor_regions, line.b)) { if (expolygons_contain(this->_anchor_regions, line.a) && expolygons_contain(this->_anchor_regions, line.b)) {
// This line could be anchored. // This line could be anchored.
double len = line.length(); arachored_length += len;
total_length += len;
max_length = std::max(max_length, len); max_length = std::max(max_length, len);
} }
} }
} }
if (total_length == 0.) if (arachored_length == 0.)
continue; continue;
have_coverage = true; have_coverage = true;
// Sum length of bridged lines. // Sum length of bridged lines.
candidates[i_angle].coverage = total_length; candidates[i_angle].coverage = arachored_length / total_length;
/* The following produces more correct results in some cases and more broken in others. /* The following produces more correct results in some cases and more broken in others.
TODO: investigate, as it looks more reliable than line clipping. */ TODO: investigate, as it looks more reliable than line clipping. */
// $directions_coverage{$angle} = sum(map $_->area, @{$self->coverage($angle)}) // 0; // $directions_coverage{$angle} = sum(map $_->area, @{$self->coverage($angle)}) // 0;

View file

@ -508,7 +508,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
for (auto el : { "support_style", "support_base_pattern", for (auto el : { "support_style", "support_base_pattern",
"support_base_pattern_spacing", "support_angle", "support_base_pattern_spacing", "support_angle",
"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", "thick_bridges", "max_bridge_length", "support_top_z_distance", "bridge_no_support", "max_bridge_length", "support_top_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_critical_regions_only",
"support_object_xy_distance", "independent_support_layer_height"}) "support_object_xy_distance", "independent_support_layer_height"})

View file

@ -1782,6 +1782,7 @@ void TabPrint::build()
optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup = page->new_optgroup(L("Advanced"), L"param_advanced");
optgroup->append_single_option_line("wall_infill_order"); optgroup->append_single_option_line("wall_infill_order");
optgroup->append_single_option_line("bridge_flow"); optgroup->append_single_option_line("bridge_flow");
optgroup->append_single_option_line("thick_bridges");
optgroup->append_single_option_line("only_one_wall_top"); optgroup->append_single_option_line("only_one_wall_top");
optgroup->append_single_option_line("detect_overhang_wall"); optgroup->append_single_option_line("detect_overhang_wall");
optgroup->append_single_option_line("reduce_crossing_wall"); optgroup->append_single_option_line("reduce_crossing_wall");
@ -1884,7 +1885,6 @@ void TabPrint::build()
optgroup->append_single_option_line("support_object_xy_distance", "support#supportobject-xy-distance"); optgroup->append_single_option_line("support_object_xy_distance", "support#supportobject-xy-distance");
optgroup->append_single_option_line("bridge_no_support", "support#base-pattern"); optgroup->append_single_option_line("bridge_no_support", "support#base-pattern");
optgroup->append_single_option_line("max_bridge_length", "support#base-pattern"); optgroup->append_single_option_line("max_bridge_length", "support#base-pattern");
optgroup->append_single_option_line("thick_bridges", "support#base-pattern");
//optgroup->append_single_option_line("independent_support_layer_height"); //optgroup->append_single_option_line("independent_support_layer_height");
page = add_options_page(L("Others"), "advanced"); page = add_options_page(L("Others"), "advanced");