From 65c00e00fe8709255c40e94679fa4ced6d3ae688 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 --- src/slic3r/GUI/DeviceManager.cpp | 17 +++++++++++++++++ src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/SelectMachine.cpp | 29 +++++++++++++++++++++++++++++ src/slic3r/GUI/SelectMachine.hpp | 15 ++++++++------- 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 43bb4c4f9..45b0fdca5 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1147,6 +1147,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 5eafd45ed..40a10ce0e 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -588,6 +588,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 11e64dee3..b7f286cc7 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2538,6 +2538,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 7c3b49bac..01e11b0ac 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -174,7 +174,7 @@ public: const wxSize & size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString &name = wxEmptyString); - + ~MachineObjectPanel(); void show_bind_dialog(); @@ -192,7 +192,7 @@ protected: }; #define SELECT_MACHINE_POPUP_SIZE wxSize(FromDIP(216), FromDIP(364)) -#define SELECT_MACHINE_LIST_SIZE wxSize(FromDIP(212), FromDIP(360)) +#define SELECT_MACHINE_LIST_SIZE wxSize(FromDIP(212), FromDIP(360)) #define SELECT_MACHINE_ITEM_SIZE wxSize(FromDIP(190), FromDIP(35)) #define SELECT_MACHINE_GREY900 wxColour(38, 46, 48) #define SELECT_MACHINE_GREY600 wxColour(144,144,144) @@ -274,7 +274,7 @@ private: std::string m_print_info = ""; bool m_dismiss { false }; - std::map m_bind_machine_list; + std::map m_bind_machine_list; std::map m_free_machine_list; private: @@ -331,7 +331,8 @@ enum PrintDialogStatus { PrintStatusNotSupportedPrintAll, PrintStatusBlankPlate, PrintStatusUnsupportedPrinter, - PrintStatusTimelapseWarning + PrintStatusTimelapseWarning, + PrintStatusMixAmsAndVtSlotWarning }; @@ -362,7 +363,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; @@ -374,7 +375,7 @@ private: std::shared_ptr m_status_bar; 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; @@ -388,7 +389,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 };