diff --git a/resources/profiles/BIBO.ini b/resources/profiles/BIBO.ini index 8247a34a7..38c2e8bb9 100644 --- a/resources/profiles/BIBO.ini +++ b/resources/profiles/BIBO.ini @@ -30,7 +30,7 @@ default_materials = Generic PLA @BIBO2; Generic PETG @BIBO2; Generic ABS @BIBO2; avoid_crossing_perimeters = 0 bottom_fill_pattern = rectilinear bridge_angle = 0 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% bridge_speed = 25 brim_width = 0 clip_multipart_objects = 1 @@ -125,7 +125,7 @@ xy_size_compensation = 0 inherits = *common* bottom_solid_layers = 10 bridge_acceleration = 300 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% default_acceleration = 500 external_perimeter_speed = 20 fill_density = 20% @@ -150,7 +150,7 @@ top_solid_layers = 15 inherits = *common* bottom_solid_layers = 8 bridge_acceleration = 300 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% bridge_speed = 20 default_acceleration = 1000 external_perimeter_speed = 20 @@ -175,7 +175,7 @@ top_solid_layers = 11 [print:*0.10mm*] inherits = *common* bottom_solid_layers = 7 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% layer_height = 0.1 perimeter_acceleration = 800 top_solid_layers = 9 @@ -241,7 +241,7 @@ top_solid_layers = 4 [print:*0.30mm*] inherits = *common* bottom_solid_layers = 4 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% external_perimeter_speed = 40 infill_acceleration = 1100 infill_speed = 60 diff --git a/resources/profiles/Basic.ini b/resources/profiles/Basic.ini index 706fb9de1..d9210ac76 100644 --- a/resources/profiles/Basic.ini +++ b/resources/profiles/Basic.ini @@ -406,7 +406,7 @@ inherits = *common* bottom_solid_layers = 7 top_solid_layers = 9 layer_height = 0.08 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% perimeter_acceleration = 400 [print:*0.16mm*] @@ -414,7 +414,7 @@ inherits = *common* bottom_solid_layers = 5 top_solid_layers = 6 layer_height = 0.16 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:*0.24mm*] @@ -422,21 +422,21 @@ inherits = *common* bottom_solid_layers = 4 top_solid_layers = 5 layer_height = 0.24 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:*0.32mm*] inherits = *common* bottom_solid_layers = 3 top_solid_layers = 4 layer_height = 0.32 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:*0.48mm*] inherits = *common* bottom_solid_layers = 2 top_solid_layers = 3 layer_height = 0.48 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:*0.05mm*] diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index a5f8b5634..2456fafa4 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -286,8 +286,8 @@ inherits = *CR-10S5*; *0.8nozzle* avoid_crossing_perimeters = 0 bridge_acceleration = 1000 bridge_angle = 0 -bridge_flow_ratio = 0.8 -over_bridge_flow_ratio = 1.1 +bridge_flow_ratio = 80% +over_bridge_flow_ratio = 110% fill_top_flow_ratio = 100% bottom_fill_pattern = rectilineargapfill bridge_speed = 20 @@ -445,7 +445,7 @@ inherits = *common* bottom_solid_layers = 7 top_solid_layers = 9 layer_height = 0.08 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% perimeter_acceleration = 400 [print:*0.16mm*] @@ -453,7 +453,7 @@ inherits = *common* bottom_solid_layers = 5 top_solid_layers = 6 layer_height = 0.16 -bridge_flow_ratio = 0.8 +bridge_flow_ratio = 80% [print:*0.24mm*] @@ -461,21 +461,21 @@ inherits = *common* bottom_solid_layers = 4 top_solid_layers = 5 layer_height = 0.24 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:*0.32mm*] inherits = *common* bottom_solid_layers = 3 top_solid_layers = 4 layer_height = 0.32 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:*0.48mm*] inherits = *common* bottom_solid_layers = 2 top_solid_layers = 3 layer_height = 0.48 -bridge_flow_ratio = 0.9 +bridge_flow_ratio = 90% [print:0.08mm DETAIL 0.2 nozzle] inherits = *0.08mm*; *0.2nozzle* diff --git a/resources/profiles/LulzBot.ini b/resources/profiles/LulzBot.ini index 53151d819..b900bb7ad 100644 --- a/resources/profiles/LulzBot.ini +++ b/resources/profiles/LulzBot.ini @@ -26,7 +26,7 @@ bottom_fill_pattern = rectilinear bottom_solid_layers = 3 bridge_acceleration = 500 bridge_angle = 0 -bridge_flow_ratio = 1 +bridge_flow_ratio = 100% bridge_speed = 30 brim_width = 0 clip_multipart_objects = 0 diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index a0de336a5..21947751d 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -377,7 +377,7 @@ perimeter_extrusion_width = 0.65 solid_infill_extrusion_width = 0.65 top_infill_extrusion_width = 0.6 support_material_extrusion_width = 0.55 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% bridge_speed = 25 support_material_contact_distance = 0.15 support_material_xy_spacing = 80% @@ -392,7 +392,7 @@ perimeter_extrusion_width = 0.65 solid_infill_extrusion_width = 0.68 top_infill_extrusion_width = 0.6 support_material_extrusion_width = 0.55 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% bridge_speed = 25 support_material_contact_distance = 0.15 support_material_xy_spacing = 80% @@ -432,7 +432,7 @@ support_material_interface_speed = 80% inherits = *common* bottom_solid_layers = 10 bridge_acceleration = 300 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% default_acceleration = 1000 external_perimeter_speed = 20 fill_density = 20% @@ -497,7 +497,7 @@ fill_density = 20% inherits = *common* bottom_solid_layers = 8 bridge_acceleration = 300 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% bridge_speed = 20 default_acceleration = 1000 external_perimeter_speed = 20 @@ -546,7 +546,7 @@ fill_density = 20% [print:*0.10mm*] inherits = *common* bottom_solid_layers = 7 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1 layer_height = 0.1 perimeter_acceleration = 800 @@ -623,7 +623,7 @@ top_solid_layers = 7 # MK2 # [print:0.15mm 100mms Linear Advance] inherits = *0.15mm* -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 external_perimeter_speed = 50 infill_speed = 100 @@ -646,7 +646,7 @@ top_infill_extrusion_width = 0.45 inherits = *0.15mm*; *0.25nozzle* # alias = 0.15mm OPTIMAL bridge_acceleration = 600 -bridge_flow_ratio = 0.7 +bridge_flow_ratio = 70% compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 external_perimeter_speed = 20 infill_acceleration = 1000 @@ -764,7 +764,7 @@ top_solid_infill_speed = 45 [print:*0.20mm*] inherits = *common* bottom_solid_layers = 4 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% external_perimeter_speed = 40 infill_acceleration = 2000 infill_speed = 60 @@ -890,7 +890,7 @@ top_solid_infill_speed = 45 [print:*0.25mm*] inherits = *common* bottom_solid_layers = 4 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% external_perimeter_speed = 40 perimeter_acceleration = 800 layer_height = 0.25 @@ -904,7 +904,7 @@ top_solid_layers = 4 [print:*0.30mm*] inherits = *common* bottom_solid_layers = 4 -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% external_perimeter_speed = 40 infill_acceleration = 2000 infill_speed = 60 @@ -998,7 +998,7 @@ top_solid_layers = 4 # MK2 # [print:0.35mm FAST] inherits = *0.35mm* -bridge_flow_ratio = 0.95 +bridge_flow_ratio = 95% compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 first_layer_extrusion_width = 0.42 perimeter_extrusion_width = 0.43 @@ -1245,7 +1245,7 @@ solid_infill_speed = 80 top_solid_infill_speed = 40 fill_pattern = gyroid fill_density = 15% -bridge_flow_ratio = 0.85 +bridge_flow_ratio = 85% support_material_xy_spacing = 60% [print:0.15mm SPEED @MINI] @@ -1258,7 +1258,7 @@ external_perimeter_speed = 40 infill_speed = 140 solid_infill_speed = 140 top_solid_infill_speed = 40 -bridge_flow_ratio = 0.85 +bridge_flow_ratio = 85% support_material_xy_spacing = 60% [print:0.20mm QUALITY @MINI] diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 5fee84f38..667de0cb4 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -123,7 +123,7 @@ enum ConfigOptionType { coString = 3, // vector of strings coStrings = coString + coVectorType, - // percent value. Currently only used for infill. + // percent value. Currently only used for infill & flow ratio. coPercent = 4, // percents value. Currently used for retract before wipe only. coPercents = coPercent + coVectorType, diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 4393c4c52..36ce850a2 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -247,38 +247,43 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionInts{ 100 }); - def = this->add("bridge_flow_ratio", coFloatOrPercent); + def = this->add("bridge_flow_ratio", coPercent); def->label = L("Bridge"); def->full_label = L("Bridge flow ratio"); + def->sidetext = L("%"); def->category = OptionCategory::width; def->tooltip = L("This factor affects the amount of plastic for bridging. " "You can decrease it slightly to pull the extrudates and prevent sagging, " "although default settings are usually good and you should experiment " "with cooling (use a fan) before tweaking this."); - def->min = 0; - def->max = 2; + def->min = 1; + def->max = 200; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); + def->set_default_value(new ConfigOptionPercent(100)); - def = this->add("over_bridge_flow_ratio", coFloatOrPercent); + def = this->add("over_bridge_flow_ratio", coPercent); def->label = L("Above the bridges"); def->full_label = L("Above bridge flow ratio"); + def->sidetext = L("%"); def->category = OptionCategory::width; def->tooltip = L("Flow ratio to compensate for the gaps in a bridged top surface. Used for ironing infill" "pattern to prevent regions where the low-flow pass does not provide a smooth surface due to a lack of plastic." " You can increase it slightly to pull the top layer at the correct height. Recommended maximum: 120%."); - def->min = 0; + def->min = 1; + def->max = 200; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); + def->set_default_value(new ConfigOptionPercent(100)); - def = this->add("bridge_overlap", coFloatOrPercent); + def = this->add("bridge_overlap", coPercent); def->label = L("Bridge overlap"); def->full_label = L("Bridge overlap"); + def->sidetext = L("%"); def->category = OptionCategory::width; def->tooltip = L("Amount of overlap between lines of the bridge. If your bridge flow ratio is low, it may be useful to increaase this setting to let lines touch each other. Default to 100%. A value of 200% will create two times more lines."); - def->min = 0; + def->min = 50; + def->max = 200; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloatOrPercent(105, true)); + def->set_default_value(new ConfigOptionPercent(100)); def = this->add("bridge_speed", coFloat); def->label = L("Bridges"); @@ -1252,23 +1257,25 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Scattered Rectilinear")); def->set_default_value( new ConfigOptionEnum(ipStars)); - def = this->add("fill_top_flow_ratio", coFloatOrPercent); + def = this->add("fill_top_flow_ratio", coPercent); def->label = L("Top fill"); def->full_label = L("Top fill flow ratio"); + def->sidetext = L("%"); def->category = OptionCategory::width; def->tooltip = L("You can increase this to over-extrude on the top layer if there are not enough plastic to make a good fill."); def->min = 0; def->mode = comExpert; - def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); + def->set_default_value(new ConfigOptionPercent(100)); - def = this->add("first_layer_flow_ratio", coFloatOrPercent); + def = this->add("first_layer_flow_ratio", coPercent); def->label = L("First layer"); def->full_label = L("First layer flow ratio"); + def->sidetext = L("%"); def->category = OptionCategory::width; def->tooltip = L("You can increase this to over-extrude on the first layer if there are not enough plastic because your bed isn't levelled."); def->min = 0; def->mode = comExpert; - def->set_default_value(new ConfigOptionFloatOrPercent(100, true)); + def->set_default_value(new ConfigOptionPercent(100)); def = this->add("fill_smooth_width", coFloatOrPercent); def->label = L("width"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index a020655f9..b05122773 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -562,9 +562,10 @@ class PrintRegionConfig : public StaticPrintConfig public: ConfigOptionFloat bridge_angle; ConfigOptionInt bottom_solid_layers; - ConfigOptionFloat bottom_solid_min_thickness; ConfigOptionFloatOrPercent bridge_flow_ratio; - ConfigOptionFloatOrPercent over_bridge_flow_ratio; - ConfigOptionFloatOrPercent bridge_overlap; + ConfigOptionFloat bottom_solid_min_thickness; + ConfigOptionPercent bridge_flow_ratio; + ConfigOptionPercent over_bridge_flow_ratio; + ConfigOptionPercent bridge_overlap; ConfigOptionEnum bottom_fill_pattern; ConfigOptionFloatOrPercent bridged_infill_margin; ConfigOptionFloat bridge_speed; @@ -587,7 +588,7 @@ public: ConfigOptionFloat fill_angle; ConfigOptionPercent fill_density; ConfigOptionEnum fill_pattern; - ConfigOptionFloatOrPercent fill_top_flow_ratio; + ConfigOptionPercent fill_top_flow_ratio; ConfigOptionFloatOrPercent fill_smooth_distribution; ConfigOptionFloatOrPercent fill_smooth_width; ConfigOptionBool gap_fill; @@ -979,7 +980,7 @@ public: ConfigOptionFloat first_layer_acceleration; ConfigOptionInts first_layer_bed_temperature; ConfigOptionFloatOrPercent first_layer_extrusion_width; - ConfigOptionFloatOrPercent first_layer_flow_ratio; + ConfigOptionPercent first_layer_flow_ratio; ConfigOptionFloatOrPercent first_layer_speed; ConfigOptionFloatOrPercent first_layer_infill_speed; ConfigOptionInts first_layer_temperature; diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 5c63cd9b7..46f8ca3fc 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -155,6 +155,59 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con apply(config, &new_conf); } + // check forgotten '%' + { + struct optDescr { + ConfigOptionFloatOrPercent* opt; + std::string name; + float min; + float max; + }; + float diameter = 0.4f; + if (config->option("extrusion_width")->percent) { + //has to be percent + diameter = 0; + } + else { + diameter = config->option("extrusion_width")->value; + } + std::vector opts; + opts.push_back({ config->option("infill_overlap"), "infill_overlap", 0, diameter * 10 }); + for (int i = 0; i < opts.size(); i++) { + if ( (!opts[i].opt->percent) && (opts[i].opt->get_abs_value(diameter) < opts[i].min || opts[i].opt->get_abs_value(diameter) > opts[i].max) ) { + wxString msg_text = _(L("Did you forgot to put a '%' in the "+opts[i].name+" field? " + "it's currently set to "+std::to_string(opts[i].opt->get_abs_value(diameter)) + " mm.")); + if (is_global_config) + msg_text += "\n\n" + _(L("Shall I add the '%'?")); + wxMessageDialog dialog(nullptr, msg_text, _(L("Wipe Tower")), + wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK)); + DynamicPrintConfig new_conf = *config; + auto answer = dialog.ShowModal(); + if (!is_global_config || answer == wxID_YES) { + new_conf.set_key_value(opts[i].name, new ConfigOptionFloatOrPercent(opts[i].opt->value*100, true)); + apply(config, &new_conf); + } + } + } + } + + // check changes from FloatOrPercent to percent (useful to migrate cofnig from prusa to slic3r++) + { + std::vector names; + names.push_back("bridge_flow_ratio"); + names.push_back("over_bridge_flow_ratio"); + names.push_back("bridge_overlap"); + names.push_back("fill_top_flow_ratio"); + names.push_back("first_layer_flow_ratio"); + for (int i = 0; i < names.size(); i++) { + if (config->option(names[i])->value <= 2) { + DynamicPrintConfig new_conf = *config; + new_conf.set_key_value(names[i], new ConfigOptionPercent(config->option(names[i])->value * 100)); + apply(config, &new_conf); + } + } + } + static bool support_material_overhangs_queried = false; if (config->opt_bool("support_material")) {