From bcd89aba5e4695bbb5f840fc1a57d58911c57c93 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 15:39:07 +0800 Subject: [PATCH 1/5] Skip flushing volume validation for multi-tool printers Flushing volumes only apply to SEMM and BBL printers. Multi-tool printers don't perform filament purging between tool changes, so the zero-volume warning was being incorrectly triggered. --- src/slic3r/GUI/GLCanvas3D.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 46401acdb5..b9becfa63c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -9797,6 +9797,10 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) bool GLCanvas3D::is_flushing_matrix_error() { + // Flushing volumes only apply to single-extruder multi-material (SEMM) and BBL printers + if (!Sidebar::should_show_SEMM_buttons()) + return false; + const auto &project_config = wxGetApp().preset_bundle->project_config; const std::vector &config_matrix = (project_config.option("flush_volumes_matrix"))->values; const std::vector &config_multiplier = (project_config.option("flush_multiplier"))->values; From 13b08385c8df6ecd531675536d4cce5d6c600431 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 16:59:20 +0800 Subject: [PATCH 2/5] check precise_z_height and enable_prime_tower conflicts in print validate --- src/libslic3r/Print.cpp | 10 ++++++++++ src/slic3r/GUI/Tab.cpp | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 914cfe4bec..2576d7956c 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1235,6 +1235,16 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } if (m_config.enable_prime_tower) { + for (const PrintObject* object : m_objects) { + if (object->config().precise_z_height.value && warning != nullptr) { + StringObjectException warningtemp; + warningtemp.string = L("Enabling both precise Z height and the prime tower may cause the slicing errors."); + warningtemp.opt_key = "precise_z_height"; + warningtemp.is_warning = true; + *warning = warningtemp; + break; + } + } } else { if (m_config.enable_wrapping_detection && warning!=nullptr) { StringObjectException warningtemp; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 954923cfdd..05844c63bb 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1589,11 +1589,11 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } bool is_precise_z_height = m_config->option("precise_z_height")->value; if (boost::any_cast(value) && is_precise_z_height) { - MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the size of prime tower to increase. Do you still want to enable?"), + MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable?"), _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; - new_conf.set_key_value("enable_prime_tower", new ConfigOptionBool(false)); + new_conf.set_key_value("precise_z_height", new ConfigOptionBool(false)); m_config_manipulation.apply(m_config, &new_conf); } wxGetApp().plater()->update(); @@ -1631,7 +1631,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (opt_key == "precise_z_height") { bool wipe_tower_enabled = m_config->option("enable_prime_tower")->value; if (boost::any_cast(value) && wipe_tower_enabled) { - MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the size of prime tower to increase. Do you still want to enable?"), + MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the slicing errors when there are multiple parts."), _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; From 70b9bedf94b3ce6d5fe96c285fa71ba2a4c7e6ad Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 17:50:39 +0800 Subject: [PATCH 3/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/libslic3r/Print.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 2576d7956c..6463338f7d 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1238,7 +1238,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* for (const PrintObject* object : m_objects) { if (object->config().precise_z_height.value && warning != nullptr) { StringObjectException warningtemp; - warningtemp.string = L("Enabling both precise Z height and the prime tower may cause the slicing errors."); + warningtemp.string = L("Enabling both precise Z height and the prime tower may cause slicing errors."); warningtemp.opt_key = "precise_z_height"; warningtemp.is_warning = true; *warning = warningtemp; From eb5082f37b87c225e621003c682c96b25fac82d5 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 17:51:29 +0800 Subject: [PATCH 4/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 05844c63bb..64fcb9a9a4 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1631,7 +1631,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (opt_key == "precise_z_height") { bool wipe_tower_enabled = m_config->option("enable_prime_tower")->value; if (boost::any_cast(value) && wipe_tower_enabled) { - MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the slicing errors when there are multiple parts."), + MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?"), _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; From 991464ed956a6398865234d3b980af7a759f6b95 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 17:52:24 +0800 Subject: [PATCH 5/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 64fcb9a9a4..c94fd1c7a4 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1593,7 +1593,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; - new_conf.set_key_value("precise_z_height", new ConfigOptionBool(false)); + new_conf.set_key_value("enable_prime_tower", new ConfigOptionBool(false)); m_config_manipulation.apply(m_config, &new_conf); } wxGetApp().plater()->update();