diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index dab6641e5..ecb9ae05c 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -806,8 +806,8 @@ void PerimeterGenerator::split_top_surfaces(const ExPolygons &orig_polygons, ExP else offset_top_surface = 0; // don't takes into account too thin areas - // skip if the exposed area is smaller than 2x perimeter width - double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), 2.5 * (double(perimeter_width))); + // skip if the exposed area is smaller than "min_width_top_surface" + double min_width_top_surface = std::max(double(ext_perimeter_spacing / 2 + 10), config->min_width_top_surface.get_abs_value(perimeter_width)); Polygons grown_upper_slices = offset(*this->upper_slices, min_width_top_surface); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index a1afee591..24a8b1eaa 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -780,7 +780,7 @@ static std::vector s_Preset_print_options { "wall_generator", "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "wall_distribution_count", "min_feature_size", "min_bead_width", "post_process", // SoftFever - "small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", + "small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", "min_width_top_surface", "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk", "top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio", "seam_gap", "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index fc8a4f4a3..8cecfa0b7 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -749,6 +749,21 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Use only one wall on flat top surface, to give more space to the top infill pattern"); def->set_default_value(new ConfigOptionBool(false)); + // the tooltip is copied from SuperStudio + def = this->add("min_width_top_surface", coFloatOrPercent); + def->label = L("One wall threshold"); + def->category = L("Quality"); + def->tooltip = L("If a top surface has to be printed and it's partially covered by another layer, it won't be considered at a top layer where its width is below this value." + " This can be useful to not let the 'one perimeter on top' trigger on surface that should be covered only by perimeters." + " This value can be a mm or a % of the perimeter extrusion width." + "\nWarning: If enabled, artifacts can be created is you have some thin features on the next layer, like letters. Set this setting to 0 to remove these artifacts."); + def->sidetext = L("mm or %"); + def->ratio_over = "inner_wall_line_width"; + def->min = 0; + def->max_literal = 15; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloatOrPercent(300, true)); + def = this->add("only_one_wall_first_layer", coBool); def->label = L("Only one wall on first layer"); def->category = L("Quality"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index a9fafbe23..ac415a38c 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -780,6 +780,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, only_one_wall_top)) //SoftFever + ((ConfigOptionFloatOrPercent, min_width_top_surface)) ((ConfigOptionBool, only_one_wall_first_layer)) ((ConfigOptionFloat, print_flow_ratio)) ((ConfigOptionFloatOrPercent, seam_gap)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index b7a1797b2..89a25c5c7 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -692,23 +692,23 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line(el, have_arachne); toggle_field("detect_thin_wall", !have_arachne); - // SoftFever + // Orca auto is_role_based_wipe_speed = config->opt_bool("role_based_wipe_speed"); toggle_field("wipe_speed",!is_role_based_wipe_speed); - // SoftFever for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"}) toggle_line(el, gcflavor == gcfKlipper); if(gcflavor == gcfKlipper) toggle_field("accel_to_decel_factor", config->opt_bool("accel_to_decel_enable")); - // SoftFever bool have_make_overhang_printable = config->opt_bool("make_overhang_printable"); toggle_line("make_overhang_printable_angle", have_make_overhang_printable); toggle_line("make_overhang_printable_hole_size", have_make_overhang_printable); toggle_line("exclude_object", gcflavor == gcfKlipper); + toggle_line("min_width_top_surface",config->opt_bool("only_one_wall_top")); + } void ConfigManipulation::update_print_sla_config(DynamicPrintConfig* config, const bool is_global_config/* = false*/) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 0ddf05dd2..1c34edb27 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1886,6 +1886,7 @@ void TabPrint::build() optgroup->append_single_option_line("top_solid_infill_flow_ratio"); optgroup->append_single_option_line("bottom_solid_infill_flow_ratio"); optgroup->append_single_option_line("only_one_wall_top"); + optgroup->append_single_option_line("min_width_top_surface"); optgroup->append_single_option_line("only_one_wall_first_layer"); optgroup->append_single_option_line("detect_overhang_wall"); optgroup->append_single_option_line("make_overhang_printable");