From c7581e590c93625bac4d12ea093ae8cf88fd5a29 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 16 Jul 2026 14:58:58 +0800 Subject: [PATCH] Warn when a filament will switch extruders mid-print --- src/slic3r/GUI/PrePrintChecker.hpp | 1 + src/slic3r/GUI/SelectMachine.cpp | 25 +++++++++++++++++++++++++ src/slic3r/GUI/SelectMachine.hpp | 3 +++ 3 files changed, 29 insertions(+) diff --git a/src/slic3r/GUI/PrePrintChecker.hpp b/src/slic3r/GUI/PrePrintChecker.hpp index dbceb07bfe..61fb036439 100644 --- a/src/slic3r/GUI/PrePrintChecker.hpp +++ b/src/slic3r/GUI/PrePrintChecker.hpp @@ -111,6 +111,7 @@ enum PrintDialogStatus : unsigned int { PrintStatusFilamentWarningUnknownHighChamberTempSoft, PrintStatusWarningExtFilamentNotMatch, PrintStatusFilamentWarningNozzleHRC, + PrintStatusFilamentCrossExtruderWarning, PrintStatusFilamentWarningEnd, PrintStatusWarningEnd,//->end error<- diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index c33b4c4f45..77446f93fe 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1875,6 +1875,22 @@ bool SelectMachineDialog::check_sdcard_for_timelpase(MachineObject* obj) return false; } +bool SelectMachineDialog::CheckWarningFilamentCrossExtruder(MachineObject* obj_) +{ + if (!obj_ || m_print_type != PrintFromType::FROM_NORMAL) return true; + if (obj_->GetExtderSystem()->GetTotalExtderCount() != 2) return true; + + for (const auto& fila : m_ams_mapping_result) { + std::set used_extruder_ids; + for (const auto& [pos_id, nozzle] : get_mapped_nozzles(fila.id)) { + if (!nozzle.IsEmpty()) { used_extruder_ids.insert(nozzle.GetExtruderId()); } + } + if (used_extruder_ids.size() >= 2) { return false; } + } + + return true; +} + void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector params, wxString wiki_url) { wxString msg; @@ -2115,6 +2131,10 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector