diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index 49f6a9c837..853c5e22e9 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -403,7 +403,7 @@ ExtrusionEntityCollection make_brim(const Print &print, PrintTryCancel try_cance return (bt == btOuterOnly || bt == btOuterAndInner) && print.config().skirt_distance.value < object->config().brim_width; }); - const bool draft_shield = print.config().draft_shield; + const bool draft_shield = print.config().draft_shield != dsDisabled; // If there is a possibility that brim intersects skirt, go through loops and split those extrusions diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 22b10315c5..e0946523bb 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -339,12 +339,12 @@ std::vector Print::print_object_ids() const bool Print::has_infinite_skirt() const { - return (m_config.draft_shield && m_config.skirts > 0) || (m_config.ooze_prevention && this->extruders().size() > 1); + return (m_config.draft_shield == dsEnabled && m_config.skirts > 0) || (m_config.ooze_prevention && this->extruders().size() > 1); } bool Print::has_skirt() const { - return (m_config.skirt_height > 0 && m_config.skirts > 0) || this->has_infinite_skirt(); + return (m_config.skirt_height > 0 && m_config.skirts > 0) || m_config.draft_shield != dsDisabled; } bool Print::has_brim() const @@ -864,7 +864,7 @@ void Print::process() m_skirt.clear(); m_skirt_convex_hull.clear(); m_first_layer_convex_hull.points.clear(); - const bool draft_shield = config().draft_shield; + const bool draft_shield = config().draft_shield != dsDisabled; if (this->has_skirt() && draft_shield) { // In case that draft shield is active, generate skirt first so brim @@ -971,7 +971,7 @@ void Print::_make_skirt() append(points, this->first_layer_wipe_tower_corners()); // Unless draft shield is enabled, include all brims as well. - if (! config().draft_shield) + if (config().draft_shield == dsDisabled) append(points, m_first_layer_convex_hull.points); if (points.size() < 3) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 76dbac263b..d0569ea119 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -173,6 +173,13 @@ static const t_config_enum_values s_keys_map_BrimType = { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(BrimType) +static const t_config_enum_values s_keys_map_DraftShield = { + { "disabled", dsDisabled }, + { "limited", dsLimited }, + { "enabled", dsEnabled } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(DraftShield) + static const t_config_enum_values s_keys_map_ForwardCompatibilitySubstitutionRule = { { "disable", ForwardCompatibilitySubstitutionRule::Disable }, { "enable", ForwardCompatibilitySubstitutionRule::Enable }, @@ -2147,27 +2154,34 @@ void PrintConfigDef::init_fff_params() #endif def = this->add("skirt_distance", coFloat); - def->label = L("Distance from object"); - def->tooltip = L("Distance between skirt and object(s). Set this to zero to attach the skirt " - "to the object(s) and get a brim for better adhesion."); + def->label = L("Distance from brim/object"); + def->tooltip = L("Distance between skirt and brim (when draft shield is not used) or objects."); def->sidetext = L("mm"); def->min = 0; def->set_default_value(new ConfigOptionFloat(6)); def = this->add("skirt_height", coInt); def->label = L("Skirt height"); - def->tooltip = L("Height of skirt expressed in layers. Set this to a tall value to use skirt " - "as a shield against drafts."); + def->tooltip = L("Height of skirt expressed in layers."); def->sidetext = L("layers"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("draft_shield", coBool); + def = this->add("draft_shield", coEnum); def->label = L("Draft shield"); - def->tooltip = L("If enabled, the skirt will be as tall as a highest printed object. " + def->tooltip = L("With draft shield active, the skirt will be printed skirt_distance from the object, possibly intersecting brim.\n" + "Enabled = skirt is as tall as the highest printed object.\n" + "Limited = skirt is as tall as specified by skirt_height.\n" "This is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft."); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("disabled"); + def->enum_values.push_back("limited"); + def->enum_values.push_back("enabled"); + def->enum_labels.push_back(L("Disabled")); + def->enum_labels.push_back(L("Limited")); + def->enum_labels.push_back(L("Enabled")); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); + def->set_default_value(new ConfigOptionEnum(dsDisabled)); def = this->add("skirts", coInt); def->label = L("Loops (minimum)"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index efe71822b1..b15651ba70 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -121,6 +121,10 @@ enum BrimType { btOuterAndInner, }; +enum DraftShield { + dsDisabled, dsLimited, dsEnabled +}; + #define CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NAME) \ template<> const t_config_enum_names& ConfigOptionEnum::get_enum_names(); \ template<> const t_config_enum_values& ConfigOptionEnum::get_enum_values(); @@ -141,6 +145,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SeamPosition) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SLADisplayOrientation) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SLAPillarConnectionMode) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(BrimType) +CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(DraftShield) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(ForwardCompatibilitySubstitutionRule) #undef CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS @@ -689,6 +694,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBools, cooling)) ((ConfigOptionFloat, default_acceleration)) ((ConfigOptionInts, disable_fan_first_layers)) + ((ConfigOptionEnum, draft_shield)) ((ConfigOptionFloat, duplicate_distance)) ((ConfigOptionFloat, extruder_clearance_height)) ((ConfigOptionFloat, extruder_clearance_radius)) @@ -728,7 +734,6 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBools, retract_layer_change)) ((ConfigOptionFloat, skirt_distance)) ((ConfigOptionInt, skirt_height)) - ((ConfigOptionBool, draft_shield)) ((ConfigOptionInt, skirts)) ((ConfigOptionInts, slowdown_below_layer_time)) ((ConfigOptionBool, spiral_vase)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 5596bb6339..47d2831778 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -276,7 +276,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config) toggle_field(el, have_default_acceleration); bool have_skirt = config->opt_int("skirts") > 0; - toggle_field("skirt_height", have_skirt && !config->opt_bool("draft_shield")); + toggle_field("skirt_height", have_skirt && config->opt_enum("draft_shield") != dsEnabled); for (auto el : { "skirt_distance", "draft_shield", "min_skirt_length" }) toggle_field(el, have_skirt);