From 263a745fabf6cb58c0ed7f88fca75db7210214f2 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Mon, 19 Oct 2026 15:16:48 +0800 Subject: [PATCH] Run the Flow Rate Fine Pass on the Extruder the Coarse Pass Used When the fine pass starts from the coarse page the filament comes from the cached preset, but the extruder was resolved from whatever the preset page currently has selected. After a restart or reconnect, or if the selection was changed, that no longer matches and the lookup falls back to the per-AMS map, which with a Filament Track Switch pins every AMS to the main extruder. Take the extruder from the cache in that path; it already records the one the coarse pass was sent with. --- src/slic3r/GUI/CalibrationWizard.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index 12e5369f2f..912973828c 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -1309,6 +1309,14 @@ void FlowRateWizard::on_cali_start(CaliPresetStage stage, float cali_value, Flow get_tray_ams_and_slot_id(curr_obj, selected_filaments.begin()->first, calib_info.ams_id, calib_info.slot_id, selected_tray_id); calib_info.select_ams = std::to_string(selected_tray_id); calib_info.extruder_id = preset_page->get_extruder_id_by_tray_id(selected_filaments.begin()->first); + if (from_page == FlowRatioCaliSource::FROM_COARSE_PAGE) { + // The fine pass must run on the extruder the coarse pass used. The cache records it; + // the preset page's selection may have changed or been reset since. + const auto cached = get_cached_selected_filament_for_multi_extruder(curr_obj); + const auto it = cached.find(selected_filaments.begin()->first); + if (it != cached.end()) + calib_info.extruder_id = it->second.extruder_id; + } calib_info.extruder_type = preset_page->get_extruder_type(calib_info.extruder_id); calib_info.nozzle_volume_type = preset_page->get_nozzle_volume_type(calib_info.extruder_id); calib_info.nozzle_diameter = preset_page->get_nozzle_diameter(calib_info.extruder_id);