Merge branch 'master_250' (NO CONFLICTS FIXED):

CONFLICT (content): Merge conflict in resources/profiles/PrusaResearch.idx
CONFLICT (content): Merge conflict in resources/profiles/PrusaResearch.ini
CONFLICT (content): Merge conflict in src/libslic3r/CMakeLists.txt
CONFLICT (content): Merge conflict in src/libslic3r/Fill/Fill.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode.hpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/GCodeProcessor.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/GCodeProcessor.hpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/SeamPlacer.cpp
CONFLICT (content): Merge conflict in src/libslic3r/GCode/SeamPlacer.hpp
CONFLICT (add/add): Merge conflict in src/libslic3r/Geometry/Curves.hpp
CONFLICT (content): Merge conflict in src/libslic3r/PerimeterGenerator.cpp
CONFLICT (content): Merge conflict in src/libslic3r/Point.hpp
CONFLICT (content): Merge conflict in src/libslic3r/PrintConfig.hpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/ConfigWizard.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/GCodeViewer.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/GLCanvas3D.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/GUI_App.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp
CONFLICT (content): Merge conflict in src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
CONFLICT (content): Merge conflict in src/slic3r/Utils/FixModelByWin10.cpp
CONFLICT (modify/delete): t/perimeters.t deleted in HEAD and modified in master_250.  Version master_250 of t/perimeters.t left in tree.
CONFLICT (content): Merge conflict in tests/fff_print/CMakeLists.txt
CONFLICT (content): Merge conflict in tests/fff_print/test_fill.cpp
CONFLICT (content): Merge conflict in version.inc
CONFLICT (modify/delete): xs/xsp/PerimeterGenerator.xsp deleted in HEAD and modified in master_250.  Version master_250 of xs/xsp/PerimeterGenerator.xsp left in tree.
This commit is contained in:
Lukas Matena 2022-06-29 14:34:55 +02:00
commit b61714bb3e
152 changed files with 86092 additions and 45493 deletions

View file

@ -170,8 +170,9 @@ static const t_config_enum_values s_keys_map_SLAPillarConnectionMode = {
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SLAPillarConnectionMode)
static const t_config_enum_values s_keys_map_SLAMaterialSpeed = {
{"slow", slamsSlow},
{"fast", slamsFast}
{"slow", slamsSlow},
{"fast", slamsFast},
{"high_viscosity", slamsHighViscosity}
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SLAMaterialSpeed);
@ -204,6 +205,12 @@ static const t_config_enum_values s_keys_map_ForwardCompatibilitySubstitutionRul
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(ForwardCompatibilitySubstitutionRule)
static t_config_enum_values s_keys_map_PerimeterGeneratorType {
{ "classic", int(PerimeterGeneratorType::Classic) },
{ "arachne", int(PerimeterGeneratorType::Arachne) }
};
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PerimeterGeneratorType)
static void assign_printer_technology_to_unknown(t_optiondef_map &options, PrinterTechnology printer_technology)
{
for (std::pair<const t_config_option_key, ConfigOptionDef> &kvp : options)
@ -615,7 +622,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm");
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(91.5f));
def->set_default_value(new ConfigOptionFloat(91.5));
def = this->add("cooling_tube_length", coFloat);
def->label = L("Cooling tube length");
@ -623,7 +630,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm");
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(5.f));
def->set_default_value(new ConfigOptionFloat(5.));
def = this->add("default_acceleration", coFloat);
def->label = L("Default");
@ -963,7 +970,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm/s");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloats { 2.2f });
def->set_default_value(new ConfigOptionFloats { 2.2 });
def = this->add("filament_minimal_purge_on_wipe_tower", coFloats);
def->label = L("Minimal purge on wipe tower");
@ -974,7 +981,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm³");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloats { 15.f });
def->set_default_value(new ConfigOptionFloats { 15. });
def = this->add("filament_cooling_final_speed", coFloats);
def->label = L("Speed of the last cooling move");
@ -982,7 +989,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm/s");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloats { 3.4f });
def->set_default_value(new ConfigOptionFloats { 3.4 });
def = this->add("filament_load_time", coFloats);
def->label = L("Filament load time");
@ -990,7 +997,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("s");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloats { 0.0f });
def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("filament_ramming_parameters", coStrings);
def->label = L("Ramming parameters");
@ -1005,7 +1012,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("s");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloats { 0.0f });
def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("filament_diameter", coFloats);
def->label = L("Diameter");
@ -1542,7 +1549,7 @@ void PrintConfigDef::init_fff_params()
def->min = 0;
def->category = L("Advanced");
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0.f));
def->set_default_value(new ConfigOptionFloat(0.));
def = this->add("ironing", coBool);
def->label = L("Enable ironing");
@ -1797,12 +1804,12 @@ void PrintConfigDef::init_fff_params()
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0));
#ifdef HAS_PRESSURE_EQUALIZER
def = this->add("max_volumetric_extrusion_rate_slope_positive", coFloat);
def->label = L("Max volumetric slope positive");
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate "
"for a transition from lower speed to higher speed. "
"A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
"of 1.8 mm³/s (0.45 mm extrusion width, 0.2 mm extrusion height, feedrate 20 mm/s) "
"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
def->sidetext = L("mm³/s²");
def->min = 0;
@ -1811,15 +1818,15 @@ void PrintConfigDef::init_fff_params()
def = this->add("max_volumetric_extrusion_rate_slope_negative", coFloat);
def->label = L("Max volumetric slope negative");
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. "
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate "
"for a transition from higher speed to lower speed. "
"A value of 1.8 mm³/s² ensures, that a change from the extrusion rate "
"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
"of 5.4 mm³/s (0.45 mm extrusion width, 0.2 mm extrusion height, feedrate 60 mm/s) "
"to 1.8 mm³/s (feedrate 20 mm/s) will take at least 2 seconds.");
def->sidetext = L("mm³/s²");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0));
#endif /* HAS_PRESSURE_EQUALIZER */
def = this->add("min_fan_speed", coInts);
def->label = L("Min");
@ -1936,7 +1943,7 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm");
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(92.f));
def->set_default_value(new ConfigOptionFloat(92.));
def = this->add("extra_loading_move", coFloat);
def->label = L("Extra loading distance");
@ -1945,7 +1952,7 @@ void PrintConfigDef::init_fff_params()
" if negative, the loading move is shorter than unloading.");
def->sidetext = L("mm");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(-2.f));
def->set_default_value(new ConfigOptionFloat(-2.));
def = this->add("perimeter_acceleration", coFloat);
def->label = L("Perimeters");
@ -2966,17 +2973,17 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("This vector saves required volumes to change from/to each tool used on the "
"wipe tower. These values are used to simplify creation of the full purging "
"volumes below.");
def->set_default_value(new ConfigOptionFloats { 70.f, 70.f, 70.f, 70.f, 70.f, 70.f, 70.f, 70.f, 70.f, 70.f });
def->set_default_value(new ConfigOptionFloats { 70., 70., 70., 70., 70., 70., 70., 70., 70., 70. });
def = this->add("wiping_volumes_matrix", coFloats);
def->label = L("Purging volumes - matrix");
def->tooltip = L("This matrix describes volumes (in cubic milimetres) required to purge the"
" new filament on the wipe tower for any given pair of tools.");
def->set_default_value(new ConfigOptionFloats { 0.f, 140.f, 140.f, 140.f, 140.f,
140.f, 0.f, 140.f, 140.f, 140.f,
140.f, 140.f, 0.f, 140.f, 140.f,
140.f, 140.f, 140.f, 0.f, 140.f,
140.f, 140.f, 140.f, 140.f, 0.f });
def->set_default_value(new ConfigOptionFloats { 0., 140., 140., 140., 140.,
140., 0., 140., 140., 140.,
140., 140., 0., 140., 140.,
140., 140., 140., 0., 140.,
140., 140., 140., 140., 0. });
def = this->add("wipe_tower_x", coFloat);
def->label = L("Position X");
@ -3011,7 +3018,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Wipe tower brim width");
def->sidetext = L("mm");
def->mode = comAdvanced;
def->min = 0.f;
def->min = 0.;
def->set_default_value(new ConfigOptionFloat(2.));
def = this->add("wipe_into_infill", coBool);
@ -3057,6 +3064,120 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def = this->add("perimeter_generator", coEnum);
def->label = L("Perimeter generator");
def->category = L("Layers and Perimeters");
def->tooltip = L("Classic perimeter generator produces perimeters with constant extrusion width and for "
"very thin areas is used gap-fill. "
"Arachne engine produces perimeters with variable extrusion width.");
def->enum_keys_map = &ConfigOptionEnum<PerimeterGeneratorType>::get_enum_values();
def->enum_values.push_back("classic");
def->enum_values.push_back("arachne");
def->enum_labels.push_back(L("Classic"));
def->enum_labels.push_back(L("Arachne"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionEnum<PerimeterGeneratorType>(PerimeterGeneratorType::Arachne));
def = this->add("wall_transition_length", coFloat);
def->label = L("Perimeter transition length");
def->category = L("Advanced");
def->tooltip = L("When transitioning between different numbers of perimeters as the part becomes "
"thinner, a certain amount of space is allotted to split or join the perimeter segments.");
def->sidetext = L("mm");
def->mode = comExpert;
def->min = 0;
def->set_default_value(new ConfigOptionFloat(0.4));
def = this->add("wall_transition_filter_deviation", coFloatOrPercent);
def->label = L("Perimeter transitioning filter margin");
def->category = L("Advanced");
def->tooltip = L("Prevent transitioning back and forth between one extra perimeter and one less. This "
"margin extends the range of extrusion widths which follow to [Minimum perimeter width "
"- margin, 2 * Minimum perimeter width + margin]. Increasing this margin "
"reduces the number of transitions, which reduces the number of extrusion "
"starts/stops and travel time. However, large extrusion width variation can lead to "
"under- or overextrusion problems. "
"If expressed as a percentage (for example 25%), it will be computed based on the nozzle diameter.");
def->sidetext = L("mm or %");
def->mode = comExpert;
def->min = 0;
def->set_default_value(new ConfigOptionFloatOrPercent(25, true));
def = this->add("wall_transition_angle", coFloat);
def->label = L("Perimeter transitioning threshold angle");
def->category = L("Advanced");
def->tooltip = L("When to create transitions between even and odd numbers of perimeters. A wedge shape with"
" an angle greater than this setting will not have transitions and no perimeters will be "
"printed in the center to fill the remaining space. Reducing this setting reduces "
"the number and length of these center perimeters, but may leave gaps or overextrude.");
def->sidetext = L("°");
def->mode = comExpert;
def->min = 1.;
def->max = 59.;
def->set_default_value(new ConfigOptionFloat(10.));
def = this->add("wall_distribution_count", coInt);
def->label = L("Perimeter distribution count");
def->category = L("Advanced");
def->tooltip = L("The number of perimeters, counted from the center, over which the variation needs to be "
"spread. Lower values mean that the outer perimeters don't change in width.");
def->mode = comExpert;
def->min = 1;
def->set_default_value(new ConfigOptionInt(1));
def = this->add("wall_split_middle_threshold", coPercent);
def->label = L("Split middle perimeter threshold");
def->category = L("Advanced");
def->tooltip = L("The smallest extrusion width, as a factor of the normal extrusion width, above which the middle "
"perimeter (if there is one) will be split into two. Reduce this setting to use more, thinner "
"perimeters. Increase to use fewer, wider perimeters. Note that this applies -as if- the entire "
"shape should be filled with perimeter, so the middle here refers to the middle of the object "
"between two outer edges of the shape, even if there actually is infill or other extrusion types in "
"the print instead of the perimeter.");
def->sidetext = L("%");
def->mode = comAdvanced;
def->min = 1;
def->max = 99;
def->set_default_value(new ConfigOptionPercent(50));
def = this->add("wall_add_middle_threshold", coPercent);
def->label = L("Add middle perimeter threshold");
def->category = L("Advanced");
def->tooltip = L("The smallest extrusion width, as a factor of the normal extrusion width, above which a middle "
"perimeter (if there wasn't one already) will be added. Reduce this setting to use more, "
"thinner perimeters. Increase to use fewer, wider perimeters. Note that this applies -as if- the "
"entire shape should be filled with perimeter, so the middle here refers to the middle of the "
"object between two outer edges of the shape, even if there actually is infill or other "
"extrusion types in the print instead of the perimeter.");
def->sidetext = L("%");
def->mode = comAdvanced;
def->min = 1;
def->max = 99;
def->set_default_value(new ConfigOptionPercent(75));
def = this->add("min_feature_size", coFloat);
def->label = L("Minimum feature size");
def->category = L("Advanced");
def->tooltip = L("Minimum thickness of thin features. Model features that are thinner than this value will "
"not be printed, while features thicker than the Minimum feature size will be widened to "
"the Minimum perimeter width.");
def->sidetext = L("mm");
def->mode = comExpert;
def->min = 0;
def->set_default_value(new ConfigOptionFloat(0.1));
def = this->add("min_bead_width", coFloatOrPercent);
def->label = L("Minimum perimeter width");
def->category = L("Advanced");
def->tooltip = L("Width of the perimeter that will replace thin features (according to the Minimum feature size) "
"of the model. If the Minimum perimeter width is thinner than the thickness of the feature,"
" the perimeter will become as thick as the feature itself. "
"If expressed as a percentage (for example 85%), it will be computed based on the nozzle diameter.");
def->sidetext = L("mm or %");
def->mode = comExpert;
def->min = 0;
def->set_default_value(new ConfigOptionFloatOrPercent(85, true));
// Declare retract values for filament profile, overriding the printer's extruder profile.
for (const char *opt_key : {
// floats
@ -3185,6 +3306,15 @@ void PrintConfigDef::init_sla_params()
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(8.));
def = this->add("high_viscosity_tilt_time", coFloat);
def->label = L("High viscosity");
def->full_label = L("Tilt for high viscosity resin");
def->tooltip = L("Time of the super slow tilt");
def->sidetext = L("s");
def->min = 0;
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(10.));
def = this->add("area_fill", coFloat);
def->label = L("Area fill");
def->tooltip = L("The percentage of the bed area. \nIf the print area exceeds the specified value, \nthen a slow tilt will be used, otherwise - a fast tilt");
@ -3613,7 +3743,7 @@ void PrintConfigDef::init_sla_params()
def->tooltip = L("No support points will be placed closer than this threshold.");
def->sidetext = L("mm");
def->min = 0;
def->set_default_value(new ConfigOptionFloat(1.f));
def->set_default_value(new ConfigOptionFloat(1.));
def = this->add("pad_enable", coBool);
def->label = L("Use pad");
@ -3792,8 +3922,10 @@ void PrintConfigDef::init_sla_params()
def->enum_keys_map = &ConfigOptionEnum<SLAMaterialSpeed>::get_enum_values();
def->enum_values.push_back("slow");
def->enum_values.push_back("fast");
def->enum_values.push_back("high_viscosity");
def->enum_labels.push_back(L("Slow"));
def->enum_labels.push_back(L("Fast"));
def->enum_labels.push_back(L("High viscosity"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionEnum<SLAMaterialSpeed>(slamsFast));
@ -3891,10 +4023,7 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
"standby_temperature", "scale", "rotate", "duplicate", "duplicate_grid",
"start_perimeters_at_concave_points", "start_perimeters_at_non_overhang", "randomize_start",
"seal_position", "vibration_limit", "bed_size",
"print_center", "g0", "threads", "pressure_advance", "wipe_tower_per_color_wipe"
#ifndef HAS_PRESSURE_EQUALIZER
, "max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative",
#endif /* HAS_PRESSURE_EQUALIZER */
"print_center", "g0", "threads", "pressure_advance", "wipe_tower_per_color_wipe",
"serial_port", "serial_speed",
// Introduced in some PrusaSlicer 2.3.1 alpha, later renamed or removed.
"fuzzy_skin_perimeter_mode", "fuzzy_skin_shape",
@ -4001,6 +4130,11 @@ void DynamicPrintConfig::normalize_fdm()
if (auto *opt_gcode_resolution = this->opt<ConfigOptionFloat>("gcode_resolution", false); opt_gcode_resolution)
// Resolution will be above 1um.
opt_gcode_resolution->value = std::max(opt_gcode_resolution->value, 0.001);
if (auto *opt_min_bead_width = this->opt<ConfigOptionFloat>("min_bead_width", false); opt_min_bead_width)
opt_min_bead_width->value = std::max(opt_min_bead_width->value, 0.001);
if (auto *opt_wall_transition_length = this->opt<ConfigOptionFloat>("wall_transition_length", false); opt_wall_transition_length)
opt_wall_transition_length->value = std::max(opt_wall_transition_length->value, 0.001);
}
void handle_legacy_sla(DynamicPrintConfig &config)