From c9d897b4d02fa8e26192650ddcd0c6dd7285fe4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Benk=C3=B6?= <20401370+elcolumbio@users.noreply.github.com> Date: Tue, 20 Oct 2026 03:52:15 +0200 Subject: [PATCH] Fix send dialog crash for a single-nozzle plate on a two-extruder printer (#16599) update_material_item_pos() chose the left or right nozzle panel from the printer alone and then read m_filaments_map, which reset_and_sync_ams_list() fills only for a multi-nozzle plate. Clicking Print plate with a plate sliced for one nozzle (A1) and a two-extruder printer selected (X2D) read the empty map and crashed. For a single-nozzle plate the dialog now uses the single panel. --- src/slic3r/GUI/SelectMachine.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 3f5bf126a2..26441baf37 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -5738,8 +5738,9 @@ void SelectMachineDialog::reset_and_sync_ams_list() } // Orca: collapse the per-nozzle material items into the single panel when the printer has one -// extruder or a filament switch (both feed a single logical mapping surface); otherwise keep the -// left/right split. Early-returns unless an item is actually in the wrong panel. +// extruder or a filament switch (both feed a single logical mapping surface), or when the plate is +// sliced for one nozzle (it has no left/right filament map); otherwise keep the left/right split. +// Early-returns unless an item is actually in the wrong panel. void SelectMachineDialog::update_material_item_pos(MachineObject* obj_) { if (!obj_) { @@ -5748,7 +5749,10 @@ void SelectMachineDialog::update_material_item_pos(MachineObject* obj_) const bool is_single_head = obj_->GetExtderSystem()->GetTotalExtderCount() < 2; const bool has_switcher = obj_->GetFilaSwitch()->IsInstalled(); - const bool use_single_panel = is_single_head || has_switcher; + // reset_and_sync_ams_list() fills m_filaments_map only for a multi-nozzle plate + const auto& full_config = wxGetApp().preset_bundle->full_config(); + const bool single_nozzle_plate = full_config.option("nozzle_diameter")->values.size() < 2; + const bool use_single_panel = is_single_head || has_switcher || single_nozzle_plate; bool to_change_pos = false; for (const auto& iter : m_materialList) {