From b297ab18ee3b89f6fc1d298d09a2ef51019a4db6 Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Mon, 30 Dec 2024 21:19:52 +0800 Subject: [PATCH] FIX: update check extruder type and diameter on sending to print; update trans jira: [STUDIO-8650] [STUDIO-9220] [STUDIO-9392] Change-Id: Ib543b8043d517ce312e7489cbee72e93bf0d9757 (cherry picked from commit 77abf5ad6e57cf392b868d38e65610e4d0716977) --- localization/i18n/list.txt | 1 + src/slic3r/GUI/SelectMachine.cpp | 47 +++++++++++++++++++--------- src/slic3r/GUI/Widgets/TempInput.cpp | 2 +- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index 3453e4ce51..28dacef8ce 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -40,6 +40,7 @@ src/slic3r/GUI/Widgets/SideTools.cpp src/slic3r/GUI/Widgets/AMSControl.cpp src/slic3r/GUI/Widgets/FanControl.cpp src/slic3r/GUI/Widgets/FilamentLoad.cpp +src/slic3r/GUI/Widgets/TempInput.cpp src/slic3r/GUI/ImGuiWrapper.cpp src/slic3r/GUI/Jobs/ArrangeJob.cpp src/slic3r/GUI/Jobs/OrientJob.cpp diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 99ffb5f53b..9a6ce01ffd 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1912,7 +1912,7 @@ bool SelectMachineDialog::is_blocking_printing(MachineObject* obj_) * @param tag_nozzle_diameter -- return the target nozzle_diameter but mismatch * @return is same or not /*************************************************************/ -bool SelectMachineDialog::is_same_nozzle_diameters(float &tag_nozzle_diameter) const +bool SelectMachineDialog::is_same_nozzle_diameters(float& tag_nozzle_diameter) const { DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return false; @@ -1929,11 +1929,22 @@ bool SelectMachineDialog::is_same_nozzle_diameters(float &tag_nozzle_diameter) c try { - auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); - for (auto i = 0; i < extruders.size(); i++) { - auto extruder = extruders[i] - 1; - tag_nozzle_diameter = float(opt_nozzle_diameters->get_at(extruder)); - if (tag_nozzle_diameter != obj_->m_extder_data.extders[0].current_nozzle_diameter) { + auto used_extruder_idxs = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders();/*the index is started from 1*/ + for (int extruder_idx : used_extruder_idxs) + { + if (opt_nozzle_diameters->size() < extruder_idx) + { + return false; + } + + tag_nozzle_diameter = float(opt_nozzle_diameters->get_at(extruder_idx)); + if (obj_->m_extder_data.extders.size() < extruder_idx) + { + return false; + } + + if (tag_nozzle_diameter != obj_->m_extder_data.extders[extruder_idx - 1].current_nozzle_diameter) + { return false; } } @@ -2163,18 +2174,24 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) + "\n " + nozzle_in_printer + "\n", ConfirmBeforeSendInfo::InfoLevel::Warning)); } - - std::string filament_type; - if (!is_same_nozzle_type(obj_->m_extder_data.extders[0], filament_type)) - { - has_slice_warnings = true; - is_printing_block = true; - wxString nozzle_in_preset = wxString::Format(_L("Printing high temperature material (%s material) with %s may cause nozzle damage"), filament_type, format_steel_name(obj_->m_extder_data.extders[0].current_nozzle_type)); - confirm_text.push_back(ConfirmBeforeSendInfo(nozzle_in_preset, ConfirmBeforeSendInfo::InfoLevel::Warning)); + /*check nozzle type*/ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + MachineObject* obj = dev ? dev->get_selected_machine() : nullptr; + const std::vector& extders = obj ? obj->m_extder_data.extders : std::vector(); + for (const auto& extder : extders) + { + std::string filament_type; + if (!is_same_nozzle_type(extder, filament_type)) + { + has_slice_warnings = true; + is_printing_block = true; + wxString nozzle_in_preset = wxString::Format(_L("Printing high temperature material(%s material) with %s may cause nozzle damage"), + filament_type, format_steel_name(obj_->m_extder_data.extders[0].current_nozzle_type)); + confirm_text.push_back(ConfirmBeforeSendInfo(nozzle_in_preset, ConfirmBeforeSendInfo::InfoLevel::Warning)); + } } } - if (has_slice_warnings) { wxString confirm_title = _L("Warning"); diff --git a/src/slic3r/GUI/Widgets/TempInput.cpp b/src/slic3r/GUI/Widgets/TempInput.cpp index f961fe7d30..f2cdcf4312 100644 --- a/src/slic3r/GUI/Widgets/TempInput.cpp +++ b/src/slic3r/GUI/Widgets/TempInput.cpp @@ -251,7 +251,7 @@ void TempInput::Warning(bool warn, WarningType type) wxString warning_string; if (type == WarningType::WARNING_TOO_HIGH) - warning_string = _L("The maximum temperature cannot exceed" + wxString::Format("%d", max_temp)); + warning_string = _L("The maximum temperature cannot exceed " + wxString::Format("%d", max_temp)); else if (type == WarningType::WARNING_TOO_LOW) warning_string = _L("The minmum temperature should not be less than " + wxString::Format("%d", max_temp));