From 286eca79c2c0824522f0917123c9315f8df65dee Mon Sep 17 00:00:00 2001 From: "hang.xu" Date: Fri, 30 Aug 2024 19:09:32 +0800 Subject: [PATCH] FIX: Parse virtual slot info jira: STUDIO-7724, STUDIO-7725 Change-Id: Id9181511b7503787fe06403be6ecb782d78cb21e --- .../GUI/CalibrationWizardPresetPage.cpp | 4 +- src/slic3r/GUI/StatusPanel.cpp | 2 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 27 ---------- src/slic3r/GUI/Widgets/AMSControl.hpp | 1 - src/slic3r/GUI/Widgets/AMSItem.cpp | 49 ++++++++++++++----- src/slic3r/GUI/Widgets/AMSItem.hpp | 2 +- 6 files changed, 42 insertions(+), 43 deletions(-) diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index a1c584dc7..9c3782b66 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -2094,7 +2094,7 @@ void CalibrationPresetPage::sync_ams_info(MachineObject* obj) for (const AmsTray& vt_tray : obj->vt_slot) { if (vt_tray.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)) { AMSinfo info; - info.ReadExtInfo(vt_tray); + info.parse_ext_info(obj, vt_tray); info.ams_type = AMSModel::EXT_AMS; assert(m_main_ams_preview_list.size() == 4); @@ -2104,7 +2104,7 @@ void CalibrationPresetPage::sync_ams_info(MachineObject* obj) } else if (vt_tray.id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { AMSinfo info; - info.ReadExtInfo(vt_tray); + info.parse_ext_info(obj, vt_tray); info.ams_type = AMSModel::EXT_AMS; assert(m_deputy_ams_preview_list.size() == 4); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 0cd0319fd..eac5edd55 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2641,7 +2641,7 @@ void StatusPanel::update_ams(MachineObject *obj) ext_info.clear(); for (auto slot : obj->vt_slot) { AMSinfo info; - info.ReadExtInfo(slot); + info.parse_ext_info(obj, slot); if (ams_mode == AMSModel::AMS_LITE) info.ext_type = AMSModelOriginType::LITE_EXT; ext_info.push_back(info); } diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 32ffd27fd..cd357e2f3 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -3647,33 +3647,6 @@ void AMSControl::reset_vams() } -void AMSControl::ReadExtInfo(MachineObject* obj) { - m_ext_info.clear(); - if (!obj){ - return; - } - AMSinfo ext_info; - for (auto slot : obj->vt_slot){ - ext_info.ams_id = slot.id; - Caninfo can; - can.can_id = std::to_string(0); - can.material_name = slot.filament_setting_id; - ext_info.cans.push_back(can); - if (slot.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)){ - ext_info.nozzle_id = MAIN_NOZZLE_ID; - } - else{ - ext_info.nozzle_id = DEPUTY_NOZZLE_ID; - } - ext_info.cans[0].material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; - ext_info.cans[0].material_colour = slot.decode_color(slot.color); - ext_info.cans[0].material_remain = slot.remain; - ext_info.cans[0].material_name = slot.type; - - m_ext_info.push_back(ext_info); - } -} - std::vector AMSControl::GenerateSimulateData() { auto caninfo0_0 = Caninfo{ "0", (""), *wxRED, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo0_1 = Caninfo{ "1", (""), *wxGREEN, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 1ffaebb9c..23336f865 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -165,7 +165,6 @@ public: void CreateAmsSingleNozzle(); void ClearAms(); void UpdateAms(std::vector ams_info, std::vector ext_info, NozzleData data, std::string dev_id, bool is_reset = true, bool test = false); - void ReadExtInfo(MachineObject* obj); std::vector GenerateSimulateData(); void AddAms(AMSinfo info, AMSPanelPos pos = AMSPanelPos::LEFT_PANEL); diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index edb14b908..cc17413d6 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -120,23 +120,50 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo return true; } -void AMSinfo::ReadExtInfo(AmsTray tray) { +void AMSinfo::parse_ext_info(MachineObject* obj, AmsTray tray) { + this->ams_id = tray.id; this->ams_type = AMSModel::EXT_AMS; - Caninfo can; - can.can_id = std::to_string(0); - can.material_name = tray.filament_setting_id; - this->cans.push_back(can); - if (tray.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)) { + Caninfo info; + info.can_id = std::to_string(0); + this->cans.clear(); + + if (tray.id == std::to_string(VIRTUAL_TRAY_MAIN_ID)) this->nozzle_id = 0; + else if (tray.id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) + this->nozzle_id = 1; + + if (tray.is_tray_info_ready()) { + info.ctype = tray.ctype; + info.material_name = tray.get_display_filament_type(); + if (!tray.color.empty()) { + info.material_colour = AmsTray::decode_color(tray.color); + } + else { + // set to white by default + info.material_colour = AMS_TRAY_DEFAULT_COL; + } + + for (std::string cols : tray.cols) { + info.material_cols.push_back(AmsTray::decode_color(cols)); + } + info.material_remain = 100; } else { - this->nozzle_id = 1; + info.material_name = ""; + info.ctype = 0; + info.material_colour = AMS_TRAY_DEFAULT_COL; + wxColour(255, 255, 255); } - this->cans[0].material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; - this->cans[0].material_colour = tray.decode_color(tray.color); - this->cans[0].material_remain = tray.remain; - this->cans[0].material_name = tray.type; + info.material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; + if (tray.is_tray_info_ready() && obj->cali_version >= 0) { + CalibUtils::get_pa_k_n_value_by_cali_idx(obj, tray.cali_idx, info.k, info.n); + } + else { + info.k = tray.k; + info.n = tray.n; + } + this->cans.push_back(info); } /************************************************* diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 6c5cbf640..f3909542c 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -197,7 +197,7 @@ public: AMSModelOriginType ext_type = AMSModelOriginType::GENERIC_EXT; bool parse_ams_info(MachineObject* obj, Ams *ams, bool remain_flag = false, bool humidity_flag = false); - void ReadExtInfo(AmsTray tray); + void parse_ext_info(MachineObject* obj, AmsTray tray); }; /*************************************************