From b3ca79146be4bafb2eb05207d6dbf49c9dd08a15 Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Tue, 11 Feb 2025 18:26:11 +0800 Subject: [PATCH] FIX: complete the AMS fresh while state changed jira: [STUDIO-10305] Change-Id: Ie6cbc359bdf9fe02f103f58e25f490105faaf381 (cherry picked from commit 9d7c9c54fc47d6e9000d2570fd391a9823e8b33e) --- src/slic3r/GUI/Widgets/AMSControl.cpp | 6 +- src/slic3r/GUI/Widgets/AMSItem.cpp | 84 +++++++++++++------- src/slic3r/GUI/Widgets/AMSItem.hpp | 107 +++++++++++++++----------- 3 files changed, 118 insertions(+), 79 deletions(-) diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 2551155f5e..3336c6bb67 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1118,8 +1118,7 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vectorget_ext_image()) { - ams1->get_ext_image()->setShowState(false); + if (ams1->get_ext_image()) { ams1->get_ext_image()->setShowState(false); } if (ams1->get_ams_model() == AMSModel::EXT_AMS) { if (ams1->get_ext_type() == LITE_EXT) { @@ -1487,8 +1486,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (ams->get_can_count() == GENERIC_AMS_SLOT_NUM){ length = left ? 129 : 145; model = ams->get_ams_model(); - } - else if (ams->get_can_count() == 1){ + } else if (ams->get_can_count() == 1) { for (auto it : pair_id){ if (it.first == ams_id){ length = left ? 218 : 124; diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index 92225dcb28..bbcff7ae63 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -1917,8 +1917,11 @@ void AMSRoadUpPart::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, void AMSRoadUpPart::Update(AMSinfo amsinfo) { - m_amsinfo = amsinfo; - Refresh(); + if (m_amsinfo != amsinfo) + { + m_amsinfo = amsinfo; + Refresh(); + } } void AMSRoadUpPart::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY500*/) @@ -1928,12 +1931,22 @@ void AMSRoadUpPart::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY50 Refresh();*/ } -void AMSRoadUpPart::SetPassRoadColour(wxColour col) { m_road_color = col; } +void AMSRoadUpPart::SetPassRoadColour(wxColour col) +{ + if (m_road_color != col) + { + m_road_color = col; + Refresh(); + } +} void AMSRoadUpPart::SetMode(AMSRoadShowMode mode) { - m_road_mode = mode; - Refresh(); + if (m_road_mode != mode) + { + m_road_mode = mode; + Refresh(); + } } void AMSRoadUpPart::paintEvent(wxPaintEvent& evt) @@ -2019,10 +2032,19 @@ void AMSRoadUpPart::doRender(wxDC& dc) // left mode } -void AMSRoadUpPart::UpdatePassRoad(std::string ams_index, std::string slot_index, AMSPassRoadType type, AMSPassRoadSTEP step) { - m_load_ams_index = atoi(ams_index.c_str()); - m_load_slot_index = atoi(slot_index.c_str()); +void AMSRoadUpPart::UpdatePassRoad(std::string ams_index, std::string slot_index, AMSPassRoadType type, AMSPassRoadSTEP step) +{ + int ams_idx = atoi(ams_index.c_str()); + int slot_idx = atoi(slot_index.c_str()); + if (m_load_ams_index == ams_idx && m_load_slot_index == slot_idx && m_load_step == step) + { + return; + }; + + m_load_ams_index = ams_idx; + m_load_slot_index = slot_idx; m_load_step = step; + Refresh(); } void AMSRoadUpPart::OnPassRoad(std::vector prord_list) @@ -2069,25 +2091,18 @@ AMSRoadDownPart::AMSRoadDownPart(wxWindow* parent, wxWindowID id, const wxPoint& void AMSRoadDownPart::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { wxWindow::Create(parent, id, pos, size); } -//void AMSRoadDownPart::Update(int nozzle_num, AMSRoadShowMode left_mode, AMSRoadShowMode right_mode, int left_len, int right_len) -//{ -// this->m_nozzle_num = nozzle_num; -// this->m_left_rode_mode = left_mode; -// this->m_right_rode_mode = right_mode; -// -// m_left_road_length = left_len; -// m_right_road_length = right_len; -// m_selected = false; -// -// Refresh(); -//} +void AMSRoadDownPart::UpdateLeft(int nozzle_num, AMSRoadShowMode mode) +{ + if (nozzle_num == m_nozzle_num && m_left_rode_mode == mode) { return;} -void AMSRoadDownPart::UpdateLeft(int nozzle_num, AMSRoadShowMode mode) { this->m_left_rode_mode = mode; m_nozzle_num = nozzle_num; Refresh(); } -void AMSRoadDownPart::UpdateRight(int nozzle_num, AMSRoadShowMode mode) { +void AMSRoadDownPart::UpdateRight(int nozzle_num, AMSRoadShowMode mode) +{ + if (nozzle_num == m_nozzle_num && m_right_rode_mode == mode) { return; } + this->m_right_rode_mode = mode; m_nozzle_num = nozzle_num; Refresh(); @@ -2102,20 +2117,33 @@ void AMSRoadDownPart::OnVamsLoading(bool load, wxColour col /*= AMS_CONTROL_GRAY void AMSRoadDownPart::SetPassRoadColour(bool left, wxColour col) { - if (left){ + if (left) + { + if (m_road_color[DEPUTY_NOZZLE_ID] == col) + { + return; + } m_road_color[DEPUTY_NOZZLE_ID] = col; } - else{ + else + { + if (m_road_color[MAIN_NOZZLE_ID] == col) + { + return; + } m_road_color[MAIN_NOZZLE_ID] = col; } + + Refresh(); } -//void AMSRoadDownPart::SetMode(AMSRoadDownPartMode mode) { -// -//} -void AMSRoadDownPart::SetShowMode(AMSRoadShowMode left_mode, AMSRoadShowMode right_mode) { +void AMSRoadDownPart::SetShowMode(AMSRoadShowMode left_mode, AMSRoadShowMode right_mode) +{ + if (m_left_rode_mode == left_mode && m_right_rode_mode == right_mode) { return; } + m_left_rode_mode = left_mode; m_right_rode_mode = right_mode; + Refresh(); } void AMSRoadDownPart::paintEvent(wxPaintEvent& evt) diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 57b6625d8c..548ef44fd6 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -236,6 +236,16 @@ public: return false; }; + bool operator!=(const AMSinfo &other) const + { + if (operator==(other)) + { + return false; + } + + return true; + }; + bool parse_ams_info(MachineObject* obj, Ams *ams, bool remain_flag = false, bool humidity_flag = false); void parse_ext_info(MachineObject* obj, AmsTray tray); }; @@ -530,29 +540,7 @@ public: void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); public: - AMSinfo m_amsinfo; - //Caninfo m_info; - int m_load_slot_index = { 0 }; - int m_load_ams_index = { 0 }; - //AMSRoadMode m_rode_mode = { AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT }; - std::vector m_pass_rode_mode = { AMSPassRoadMode::AMS_ROAD_MODE_NONE }; - AMSRoadShowMode m_road_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; - AMSPassRoadSTEP m_load_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; - - bool m_selected = { false }; - int m_passroad_width = { 6 }; - double m_radius = { 4 }; - wxColour m_road_def_color; - wxColour m_road_color; - void Update(AMSinfo amsinfo); - - std::vector ams_humidity_img; - - - int m_humidity = { 0 }; - bool m_show_humidity = { false }; - bool m_vams_loading{ false }; - AMSModel m_ams_model; + void Update(AMSinfo amsinfo); void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); void SetPassRoadColour(wxColour col); @@ -565,6 +553,32 @@ public: void doRender(wxDC& dc); void msw_rescale(); + +private: + AMSinfo m_amsinfo; + + // Caninfo m_info; + + int m_load_slot_index = {0}; + int m_load_ams_index = {0}; + + // AMSRoadMode m_rode_mode = { AMSRoadMode::AMS_ROAD_MODE_LEFT_RIGHT }; + std::vector m_pass_rode_mode = {AMSPassRoadMode::AMS_ROAD_MODE_NONE}; + AMSRoadShowMode m_road_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; + AMSPassRoadSTEP m_load_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; + + bool m_selected = {false}; + int m_passroad_width = {6}; + double m_radius = {4}; + wxColour m_road_def_color; + wxColour m_road_color; + + std::vector ams_humidity_img; + + int m_humidity = {0}; + bool m_show_humidity = {false}; + bool m_vams_loading{false}; + AMSModel m_ams_model; }; @@ -579,29 +593,9 @@ public: void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); public: - int m_nozzle_num = { 1 }; - AMSRoadShowMode m_single_ext_rode_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; - AMSRoadShowMode m_left_rode_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; - AMSRoadShowMode m_right_rode_mode = { AMSRoadShowMode::AMS_ROAD_MODE_FOUR }; - bool m_selected = { false }; - - int m_left_road_length = { -1 }; - int m_right_road_length = { -1 }; - int m_passroad_width = { 6 }; - double m_radius = { 4 }; - AMSPassRoadType m_pass_road_type = { AMSPassRoadType::AMS_ROAD_TYPE_NONE }; - AMSPassRoadSTEP m_pass_road_left_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; - AMSPassRoadSTEP m_pass_road_right_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; - - std::map m_road_color; - - //void Update(AMSRoadDownPartMode nozzle, AMSRoadShowMode left_mode, AMSRoadShowMode right_mode, int left_len, int right_len); - void UpdateLeft(int nozzle_num, AMSRoadShowMode mode); - void UpdateRight(int nozzle_num, AMSRoadShowMode mode); - - bool m_vams_loading{ false }; - - AMSModel m_ams_model; + // void Update(AMSRoadDownPartMode nozzle, AMSRoadShowMode left_mode, AMSRoadShowMode right_mode, int left_len, int right_len); + void UpdateLeft(int nozzle_num, AMSRoadShowMode mode); + void UpdateRight(int nozzle_num, AMSRoadShowMode mode); void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); void SetPassRoadColour(bool left, wxColour col); @@ -612,7 +606,26 @@ public: void render(wxDC& dc); void doRender(wxDC& dc); - void msw_rescale(); + void msw_rescale(); + +private: + int m_nozzle_num = {1}; + AMSRoadShowMode m_single_ext_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; + AMSRoadShowMode m_left_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; + AMSRoadShowMode m_right_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; + bool m_selected = {false}; + + int m_left_road_length = {-1}; + int m_right_road_length = {-1}; + int m_passroad_width = {6}; + double m_radius = {4}; + AMSPassRoadType m_pass_road_type = {AMSPassRoadType::AMS_ROAD_TYPE_NONE}; + AMSPassRoadSTEP m_pass_road_left_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; + AMSPassRoadSTEP m_pass_road_right_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; + + std::map m_road_color; + bool m_vams_loading{false}; + AMSModel m_ams_model; }; /*************************************************