From 3d3753b787ef968f20ba3fc80a9c15ebd6ef6176 Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Mon, 17 Mar 2025 09:21:51 +0800 Subject: [PATCH] FIX: only check the nozzle type of used nozzle indexes jira: [STUDIO-] Change-Id: Iba19086e8774811f86efdb449d8046112cd26ad7 --- src/slic3r/GUI/SelectMachine.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 72a22ed0b..9f5a20eec 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1998,6 +1998,30 @@ bool SelectMachineDialog::is_blocking_printing(MachineObject* obj_) return false; } +static std::unordered_set _get_used_nozzle_idxes() +{ + std::unordered_set used_nozzle_idxes; + + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + MachineObject *obj_ = dev->get_selected_machine(); + if (obj_) { + try { + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + PartPlate *cur_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + auto used_filament_idxs = cur_plate->get_used_filaments(); /*the index is started from 1*/ + for (int used_filament_idx : used_filament_idxs) { + int used_nozzle_idx = cur_plate->get_physical_extruder_by_filament_id(preset_bundle->full_config(), used_filament_idx); + used_nozzle_idxes.insert(used_nozzle_idx); + } + } catch (const std::exception &) {} + } + } + + return used_nozzle_idxes; +} + + bool SelectMachineDialog::is_nozzle_data_valid(const ExtderData &ext_data) const { DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); @@ -3477,8 +3501,11 @@ void SelectMachineDialog::update_show_status() return show_status(PrintDialogStatus::PrintStatusNozzleDiameterMismatch, msg_params); } + const auto &used_nozzle_idxes = _get_used_nozzle_idxes(); for (const auto& extder : obj_->m_extder_data.extders) { + if (used_nozzle_idxes.count(extder.nozzle_id) == 0) { continue; } + std::string filament_type; if (!is_same_nozzle_type(extder, filament_type)) {