Allow reverse on odd without detect overhang wall (SoftFever/OrcaSlicer#6920)

This commit is contained in:
Noisyfox 2024-09-27 09:24:21 +08:00
parent 17492c1e5b
commit 8709f22597
3 changed files with 16 additions and 2 deletions

View file

@ -735,6 +735,12 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
if(paths.empty()) continue;
chain_and_reorder_extrusion_paths(paths, &paths.front().first_point());
} else {
if (overhangs_reverse && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) {
// Always reverse if detect overhang wall is not enabled
steep_overhang_contour = true;
steep_overhang_hole = true;
}
ExtrusionPath path(role);
//BBS.
path.polyline = polygon.split_at_first_point();
@ -1219,6 +1225,12 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p
}
}
else {
if (overhangs_reverse && perimeter_generator.layer_id > perimeter_generator.object_config->raft_layers) {
// Always reverse if detect overhang wall is not enabled
steep_overhang_contour = true;
steep_overhang_hole = true;
}
extrusion_paths_append(paths, *extrusion, role, is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow);
}

View file

@ -1056,7 +1056,8 @@ void PrintConfigDef::init_fff_params()
def->category = L("Quality");
// xgettext:no-c-format, no-boost-format
def->tooltip = L("Number of mm the overhang need to be for the reversal to be considered useful. Can be a % of the perimeter width."
"\nValue 0 enables reversal on every even layers regardless.");
"\nValue 0 enables reversal on every even layers regardless."
"\nWhen Detect overhang wall is not enabled, this option is ignored and reversal happens on every even layers regardless.");
def->sidetext = L("mm or %");
def->ratio_over = "line_width";
def->min = 0;

View file

@ -736,8 +736,9 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
bool has_detect_overhang_wall = config->opt_bool("detect_overhang_wall");
bool has_overhang_reverse = config->opt_bool("overhang_reverse");
bool force_wall_direction = config->opt_enum<WallDirection>("wall_direction") != WallDirection::Auto;
bool allow_overhang_reverse = has_detect_overhang_wall && !has_spiral_vase && !force_wall_direction;
bool allow_overhang_reverse = !has_spiral_vase && !force_wall_direction;
toggle_field("overhang_reverse", allow_overhang_reverse);
toggle_field("overhang_reverse_threshold", has_detect_overhang_wall);
toggle_line("overhang_reverse_threshold", allow_overhang_reverse && has_overhang_reverse);
toggle_line("overhang_reverse_internal_only", allow_overhang_reverse && has_overhang_reverse);
bool has_overhang_reverse_internal_only = config->opt_bool("overhang_reverse_internal_only");