Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsupermerill <merill@free.fr>2022-09-12 22:15:38 +0300
committersupermerill <merill@free.fr>2022-09-13 01:31:27 +0300
commit4758e8a7e6d21399860197c5794411169aeb70f8 (patch)
tree813cb05594813f176a16a2c791a2b3e67d992ea0
parent4fdc0c9ed3f502fc408bf38db5d007f6f4a984e1 (diff)
Vase mode: no arachne
supermerill/SuperSlicer#3204
-rw-r--r--src/libslic3r/Flow.cpp28
-rw-r--r--src/slic3r/GUI/ConfigManipulation.cpp7
-rw-r--r--src/slic3r/GUI/Plater.cpp2
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",