From ca6a3fe17bf338313fd5d6d166389bda78aeef61 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 30 Sep 2024 11:41:30 +0800 Subject: [PATCH] FIX: Prompt user when mix ams and vtslot in an extruder jira: none Change-Id: I9a1d4936056fc872c75bf0454e4ca89665ece2f8 (cherry picked from commit 65c00e00fe8709255c40e94679fa4ced6d3ae688) --- src/slic3r/GUI/DeviceManager.cpp | 17 +++++++++++++++++ src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/SelectMachine.cpp | 29 +++++++++++++++++++++++++++++ src/slic3r/GUI/SelectMachine.hpp | 9 +++++---- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 4cdfaa9e2a..a727c646ee 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1161,6 +1161,23 @@ bool MachineObject::need_SD_card() const return !is_multi_extruders(); } +int MachineObject::get_extruder_id_by_ams_id(const std::string &ams_id) +{ + if (ams_id.empty()) + return 0; + + auto it = amsList.find(ams_id); + if (it != amsList.end()) + return it->second->nozzle; + else if (stoi(ams_id) == VIRTUAL_TRAY_MAIN_ID) + return 0; + else if (stoi(ams_id) == VIRTUAL_TRAY_DEPUTY_ID) + return 1; + + assert(false); + return 0; +} + bool MachineObject::is_bbl_filament(std::string tag_uid) { if (tag_uid.empty()) diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 6ef2eb41b8..3b0c526052 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -630,6 +630,7 @@ public: bool is_main_extruder_on_left() const; bool is_multi_extruders() const; bool need_SD_card() const; + int get_extruder_id_by_ams_id(const std::string &ams_id); /*online*/ bool online_rfid; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 97ae980dd4..78b6030a9c 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1697,6 +1697,12 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector extruder_status(nozzle_nums); + for (const FilamentInfo &item : m_ams_mapping_result) { + int extruder_id = obj_->get_extruder_id_by_ams_id(item.ams_id); + if (DeviceManager::is_virtual_slot(stoi(item.ams_id))) + extruder_status[extruder_id].has_vt_slot = true; + else + extruder_status[extruder_id].has_ams = true; + } + for (auto extruder : extruder_status) { + if (extruder.has_ams && extruder.has_vt_slot) { + show_status(PrintDialogStatus::PrintStatusMixAmsAndVtSlotWarning); + return; + } + } + } + if (!obj_->is_support_ams_mapping()) { int exceed_index = -1; if (obj_->is_mapping_exceed_filament(m_ams_mapping_result, exceed_index)) { diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 69b184635e..b5a21a8ef2 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -90,7 +90,8 @@ enum PrintDialogStatus { PrintStatusNotSupportedPrintAll, PrintStatusBlankPlate, PrintStatusUnsupportedPrinter, - PrintStatusTimelapseWarning + PrintStatusTimelapseWarning, + PrintStatusMixAmsAndVtSlotWarning }; @@ -194,7 +195,7 @@ private: wxColour m_colour_bold_color{wxColour(38, 46, 48)}; StateColor m_btn_bg_enable; Label* m_text_bed_type; - + std::shared_ptr m_token = std::make_shared(0); std::map m_checkbox_list; //std::map m_checkbox_state_list; @@ -207,7 +208,7 @@ private: std::unique_ptr m_worker; Slic3r::DynamicPrintConfig m_required_data_config; - Slic3r::Model m_required_data_model; + Slic3r::Model m_required_data_model; Slic3r::PlateDataPtrs m_required_data_plate_data_list; std::string m_required_data_file_name; std::string m_required_data_file_path; @@ -221,7 +222,7 @@ protected: Plater * m_plater{nullptr}; wxBoxSizer* m_sizer_options{ nullptr }; wxBoxSizer* m_sizer_thumbnail{ nullptr }; - + wxBoxSizer* m_sizer_main{ nullptr }; wxBoxSizer* m_basicl_sizer{ nullptr }; wxBoxSizer* rename_sizer_v{ nullptr };