diff options
author | supermerill <merill@free.fr> | 2022-09-12 22:15:38 +0300 |
---|---|---|
committer | supermerill <merill@free.fr> | 2022-09-13 01:31:27 +0300 |
commit | 4758e8a7e6d21399860197c5794411169aeb70f8 (patch) | |
tree | 813cb05594813f176a16a2c791a2b3e67d992ea0 | |
parent | 4fdc0c9ed3f502fc408bf38db5d007f6f4a984e1 (diff) |
Vase mode: no arachne
supermerill/SuperSlicer#3204
-rw-r--r-- | src/libslic3r/Flow.cpp | 28 | ||||
-rw-r--r-- | src/slic3r/GUI/ConfigManipulation.cpp | 7 | ||||
-rw-r--r-- | src/slic3r/GUI/Plater.cpp | 2 |
3 files changed, 26 insertions, 11 deletions
diff --git a/src/libslic3r/Flow.cpp b/src/libslic3r/Flow.cpp index 085049866..4dbda8fd9 100644 --- a/src/libslic3r/Flow.cpp +++ b/src/libslic3r/Flow.cpp @@ -180,15 +180,23 @@ const ConfigOptionFloatOrPercent* Flow::extrusion_width_option(std::string opt_k const ConfigOptionFloatOrPercent* Flow::extrusion_spacing_option(std::string opt_key, const ConfigOptionResolver& config) { std::string opt_key_width; - if (boost::ends_with(opt_key, "_extrusion_width")) { - boost::replace_first(opt_key, "_width", "_spacing"); - } - if (!boost::ends_with(opt_key, "_extrusion_spacing")) { - opt_key_width = opt_key + "_extrusion_width"; - opt_key += "_extrusion_spacing"; - } else { + if (boost::starts_with(opt_key, "skirt")) { + //skirt have only width setting + if (!boost::ends_with(opt_key, "_extrusion_width")) { + opt_key += "_extrusion_width"; + } opt_key_width = opt_key; - boost::replace_first(opt_key_width, "_spacing", "_width"); + } else {//brim + if (boost::ends_with(opt_key, "_extrusion_width")) { + boost::replace_first(opt_key, "_width", "_spacing"); + } + if (!boost::ends_with(opt_key, "_extrusion_spacing")) { + opt_key_width = opt_key + "_extrusion_width"; + opt_key += "_extrusion_spacing"; + } else { + opt_key_width = opt_key; + boost::replace_first(opt_key_width, "_spacing", "_width"); + } } const ConfigOptionFloatOrPercent* opt = config.option<ConfigOptionFloatOrPercent>(opt_key); @@ -206,8 +214,10 @@ const ConfigOptionFloatOrPercent* Flow::extrusion_spacing_option(std::string opt } } - if (opt == nullptr) + if (opt == nullptr) { + opt_key = opt_key_width; opt = config.option<ConfigOptionFloatOrPercent>(opt_key_width); + } if (opt == nullptr) throw_on_missing_variable(opt_key, opt_key.c_str()); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index e464377ef..b4b9103d6 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -76,6 +76,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con && fill_density == 0 && config->opt_bool("support_material") == false && config->opt_int("support_material_enforce_layers") == 0 + && config->opt_enum<PerimeterGeneratorType>("perimeter_generator") == PerimeterGeneratorType::Classic && config->opt_bool("exact_last_layer_height") == false && config->opt_bool("ensure_vertical_shell_thickness") == true && config->opt_bool("infill_dense") == false @@ -89,6 +90,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con wxString msg_text = _(L("The Spiral Vase mode requires:\n" "- no top solid layers\n" "- 0% fill density\n" + "- classic perimeter slicing\n" "- no support material\n" "- Ensure vertical shell thickness enabled\n" "- disabled 'no solid infill over perimeters'\n" @@ -111,6 +113,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con new_conf.set_key_value("top_solid_layers", new ConfigOptionInt(0)); else if (this->local_config->get().optptr("fill_density")) new_conf.set_key_value("fill_density", new ConfigOptionPercent(0)); + else if (this->local_config->get().optptr("perimeter_generator")) + new_conf.set_key_value("perimeter_generator", new ConfigOptionEnum<PerimeterGeneratorType>(PerimeterGeneratorType::Classic)); else if (this->local_config->get().optptr("support_material")) new_conf.set_key_value("support_material", new ConfigOptionBool(false)); else if (this->local_config->get().optptr("support_material_enforce_layers")) @@ -137,6 +141,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } else if (answer == wxID_YES) { new_conf.set_key_value("top_solid_layers", new ConfigOptionInt(0)); new_conf.set_key_value("fill_density", new ConfigOptionPercent(0)); + new_conf.set_key_value("perimeter_generator", new ConfigOptionEnum<PerimeterGeneratorType>(PerimeterGeneratorType::Classic)); new_conf.set_key_value("support_material", new ConfigOptionBool(false)); new_conf.set_key_value("support_material_enforce_layers", new ConfigOptionInt(0)); new_conf.set_key_value("exact_last_layer_height", new ConfigOptionBool(false)); @@ -323,6 +328,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config) "perimeter_generator"}) toggle_field(el, have_perimeters); + bool has_spiral_vase = have_perimeters && config->opt_bool("spiral_vase"); for (auto el : { "external_perimeters_vase", "external_perimeters_nothole", "external_perimeters_hole", "perimeter_bonding"}) toggle_field(el, config->opt_bool("external_perimeters_first")); @@ -385,7 +391,6 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config) for (auto el : { "infill_every_layers", "infill_only_where_needed" }) toggle_field(el, !have_infill_dense); - bool has_spiral_vase = have_perimeters && config->opt_bool("spiral_vase"); bool has_top_solid_infill = config->opt_int("top_solid_layers") > 0 || has_spiral_vase; bool has_bottom_solid_infill = config->opt_int("bottom_solid_layers") > 0; bool has_solid_infill = has_top_solid_infill || has_bottom_solid_infill || (have_infill && (config->opt_int("solid_infill_every_layers") > 0 || config->opt_float("solid_infill_below_area") > 0)); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a6458519c..f69106b67 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2043,7 +2043,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) "perimeter_extrusion_width", "extrusion_width", "skirts", "skirt_brim", "skirt_distance", "skirt_distance_from_brim", - "skirt_extrusion_width", "skirt_height", + "skirt_extrusion_width", "skirt_height", "first_layer_extrusion_spacing", "perimeter_extrusion_spacing", "extrusion_spacing", "variable_layer_height", "nozzle_diameter", "single_extruder_multi_material", "wipe_tower", "wipe_tower_brim_width", "wipe_tower_rotation_angle", "wipe_tower_width", "wipe_tower_x", "wipe_tower_y", "extruder_colour", "filament_colour", "material_colour", |