diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index adaf101fb..a0eef72fe 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -1291,7 +1291,7 @@ sub async_apply_config { # We also need to reload 3D scene because of the wipe tower preview box if ($self->{config}->wipe_tower) { - Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1) if $self->{canvas3D} + Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1) if $self->{canvas3D} } } } diff --git a/xs/src/libslic3r/GCode.cpp b/xs/src/libslic3r/GCode.cpp index 7edd55077..b34ba5441 100644 --- a/xs/src/libslic3r/GCode.cpp +++ b/xs/src/libslic3r/GCode.cpp @@ -524,13 +524,21 @@ void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data) m_silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Y, print.config.machine_max_jerk_y.values[1]); m_silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::Z, print.config.machine_max_jerk_z.values[1]); m_silent_time_estimator.set_axis_max_jerk(GCodeTimeEstimator::E, print.config.machine_max_jerk_e.values[1]); - m_silent_time_estimator.set_filament_load_times(print.config.filament_load_time.values); - m_silent_time_estimator.set_filament_unload_times(print.config.filament_unload_time.values); + if (print.config.single_extruder_multi_material) { + // As of now the fields are shown at the UI dialog in the same combo box as the ramming values, so they + // are considered to be active for the single extruder multi-material printers only. + m_silent_time_estimator.set_filament_load_times(print.config.filament_load_time.values); + m_silent_time_estimator.set_filament_unload_times(print.config.filament_unload_time.values); + } } } // Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful. - m_normal_time_estimator.set_filament_load_times(print.config.filament_load_time.values); - m_normal_time_estimator.set_filament_unload_times(print.config.filament_unload_time.values); + if (print.config.single_extruder_multi_material) { + // As of now the fields are shown at the UI dialog in the same combo box as the ramming values, so they + // are considered to be active for the single extruder multi-material printers only. + m_normal_time_estimator.set_filament_load_times(print.config.filament_load_time.values); + m_normal_time_estimator.set_filament_unload_times(print.config.filament_unload_time.values); + } // resets analyzer m_analyzer.reset(); diff --git a/xs/src/libslic3r/Print.cpp b/xs/src/libslic3r/Print.cpp index ab5d13950..7d2906bcc 100644 --- a/xs/src/libslic3r/Print.cpp +++ b/xs/src/libslic3r/Print.cpp @@ -128,7 +128,6 @@ bool Print::invalidate_state_by_config_options(const std::vector osteps; bool invalidated = false; - // Always invalidate the wipe tower. This is probably necessary because of the wipe_into_infill / wipe_into_objects - // features - nearly anything can influence what should (and could) be wiped into. - // Only these three parameters don't invalidate the wipe tower (they only affect the gcode export): - for (const t_config_option_key &opt_key : opt_keys) - if (opt_key != "wipe_tower_x" && opt_key != "wipe_tower_y" && opt_key != "wipe_tower_rotation_angle") { - steps.emplace_back(psWipeTower); - break; - } - for (const t_config_option_key &opt_key : opt_keys) { if (steps_ignore.find(opt_key) != steps_ignore.end()) { // These options only affect G-code export or they are just notes without influence on the generated G-code, @@ -218,6 +208,7 @@ bool Print::invalidate_state_by_config_options(const std::vectoradd("filament_minimal_purge_on_wipe_tower", coFloats); def->label = L("Minimal purge on wipe tower"); - def->tooltip = L("After a toolchange, certain amount of filament is used for purging. This " - "can end up on the wipe tower, infill or sacrificial object. If there was " - "enough infill etc. available, this could result in bad quality at the beginning " - "of purging. This is a minimum that must be wiped on the wipe tower before " - "Slic3r considers moving elsewhere. "); + def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside " + "the nozzle may not be known, and the filament pressure is likely not yet stable. " + "Before purging the print head into an infill or a sacrificial object, Slic3r will always prime " + "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."); def->cli = "filament-minimal-purge-on-wipe-tower=f@"; def->sidetext = L("mm³"); def->min = 0; diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/xs/src/slic3r/GUI/3DScene.cpp index 33b3768ed..3f01eb20c 100644 --- a/xs/src/slic3r/GUI/3DScene.cpp +++ b/xs/src/slic3r/GUI/3DScene.cpp @@ -715,6 +715,7 @@ int GLVolumeCollection::load_wipe_tower_preview( v.select_group_id = obj_idx * 1000000; v.drag_group_id = obj_idx * 1000; v.is_wipe_tower = true; + v.shader_outside_printer_detection_enabled = ! size_unknown; return int(this->volumes.size() - 1); } diff --git a/xs/src/slic3r/GUI/Field.cpp b/xs/src/slic3r/GUI/Field.cpp index 0885e041b..85fa790a5 100644 --- a/xs/src/slic3r/GUI/Field.cpp +++ b/xs/src/slic3r/GUI/Field.cpp @@ -95,10 +95,10 @@ namespace Slic3r { namespace GUI { wxString tooltip_text(""); wxString tooltip = _(m_opt.tooltip); if (tooltip.length() > 0) - tooltip_text = tooltip + "\n " + _(L("default value")) + "\t: " + + tooltip_text = tooltip + "\n" + _(L("default value")) + "\t: " + (boost::iends_with(m_opt_id, "_gcode") ? "\n" : "") + default_string + - (boost::iends_with(m_opt_id, "_gcode") ? "" : "\n") + "\n " + - _(L("variable name")) + "\t: " + m_opt_id; + (boost::iends_with(m_opt_id, "_gcode") ? "" : "\n") + + _(L("parameter name")) + "\t: " + m_opt_id; return tooltip_text; }