From 12b6f064a093b02653d4cd8425037400adcc3d5e Mon Sep 17 00:00:00 2001 From: "hang.xu" Date: Fri, 9 Aug 2024 09:28:45 +0800 Subject: [PATCH] FIX:Use different ext-img for single/double nozzle jira: STUDIO-7852 Change-Id: I4d8181834bc57ff3c3ba54fafe5ed266a7a2b843 --- resources/images/ext_image_single_nozzle.svg | 5 + src/slic3r/GUI/StatusPanel.cpp | 4 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 247 ++++++------------- src/slic3r/GUI/Widgets/AMSControl.hpp | 4 +- src/slic3r/GUI/Widgets/AMSItem.cpp | 78 +++--- src/slic3r/GUI/Widgets/AMSItem.hpp | 11 +- 6 files changed, 130 insertions(+), 219 deletions(-) create mode 100644 resources/images/ext_image_single_nozzle.svg diff --git a/resources/images/ext_image_single_nozzle.svg b/resources/images/ext_image_single_nozzle.svg new file mode 100644 index 000000000..5cad887f9 --- /dev/null +++ b/resources/images/ext_image_single_nozzle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 228421eb7..1d2a3e65e 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2646,7 +2646,7 @@ void StatusPanel::update_ams(MachineObject *obj) ext_info.push_back(info); } std::string dev_id = obj->dev_id; - int nozzle_num = obj->m_nozzle_data.total_nozzle_count; + NozzleData data = obj->m_nozzle_data; //if (obj->ams_exist_bits != last_ams_exist_bits || obj->tray_exist_bits != last_tray_exist_bits || obj->tray_is_bbl_bits != last_tray_is_bbl_bits || // obj->tray_read_done_bits != last_read_done_bits || obj->ams_version != last_ams_version) { // m_ams_control->UpdateAms(ams_info, false); @@ -2661,7 +2661,7 @@ void StatusPanel::update_ams(MachineObject *obj) //} // must select a current can - m_ams_control->UpdateAms(ams_info, ext_info, nozzle_num, dev_id, false); + m_ams_control->UpdateAms(ams_info, ext_info, data, dev_id, false); last_tray_exist_bits = obj->tray_exist_bits; last_ams_exist_bits = obj->ams_exist_bits; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 0a738fec0..32ffd27fd 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2413,6 +2413,8 @@ Description:AMSControl #define AMS_CANS_SIZE wxSize(FromDIP(284), -1) #define AMS_CANS_WINDOW_SIZE wxSize(FromDIP(264), -1) #define SINGLE_SLOT_AMS_PANEL_SIZE wxSize(FromDIP(264), FromDIP(160)) + + AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) : wxSimplebook(parent, wxID_ANY, pos, size) , m_Humidity_tip_popup(AmsHumidityTipPopup(this)) @@ -2424,6 +2426,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons parse_object(obj); } + m_nozzle_data.total_nozzle_count = 1; SetBackgroundColour(*wxWHITE); // normal mode Freeze(); @@ -2592,7 +2595,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons /*option mid*/ - m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_nozzle_num, wxDefaultPosition, AMS_EXTRUDER_SIZE); + m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_nozzle_data.total_nozzle_count, wxDefaultPosition, AMS_EXTRUDER_SIZE); m_sizer_option_mid->Add( m_extruder, 0, wxALIGN_CENTER, 0 ); @@ -2975,7 +2978,7 @@ std::string AMSControl::GetCurrentCan(std::string amsid) } bool AMSControl::IsAmsInRightPanel(std::string ams_id) { - if (m_nozzle_num == 2){ + if (m_nozzle_data.total_nozzle_count == 2){ if (m_ams_item_list.find(ams_id) != m_ams_item_list.end() && m_ams_item_list[ams_id]->m_info.nozzle_id == MAIN_NOZZLE_ID){ return true; } @@ -3426,10 +3429,10 @@ void AMSControl::CreateAmsDoubleNozzle() auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL); - m_down_road->UpdateLeft(2, left_init_mode); - m_down_road->UpdateRight(2, right_init_mode); + m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, left_init_mode); + m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, right_init_mode); - m_extruder->updateNozzleNum(2); + m_extruder->updateNozzleNum(m_nozzle_data.total_nozzle_count); m_current_show_ams_left = m_item_ids[DEPUTY_NOZZLE_ID].size() > 0 ? m_item_ids[DEPUTY_NOZZLE_ID][0] : ""; m_current_show_ams_right = m_item_ids[MAIN_NOZZLE_ID].size() > 0 ? m_item_ids[MAIN_NOZZLE_ID][0] : ""; @@ -3460,7 +3463,7 @@ void AMSControl::CreateAmsSingleNozzle() } else if (ams_info->cans.size() == 1) { single_info.push_back(*ams_info); - if (single_info.size() == 2) { + if (single_info.size() == MAX_AMS_NUM_IN_PANEL) { m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[0].ams_id); m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[1].ams_id); m_item_nums[DEPUTY_NOZZLE_ID]++; @@ -3723,12 +3726,12 @@ std::vector AMSControl::GenerateSimulateData() { } -void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, int nozzle_num, std::string dev_id, bool is_reset, bool test) +void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, NozzleData data, std::string dev_id, bool is_reset, bool test) { if (!test){ // update item bool fresh = false; - if (m_ams_info.size() == ams_info.size() && m_nozzle_num == nozzle_num && m_dev_id == dev_id){ + if (m_ams_info.size() == ams_info.size() && m_nozzle_data.total_nozzle_count == data.total_nozzle_count && m_dev_id == dev_id){ for (int i = 0; i < m_ams_info.size(); i++){ if (m_ams_info[i].ams_id != ams_info[i].ams_id){ fresh = true; @@ -3742,11 +3745,11 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex m_ams_info = ams_info; m_ext_info.clear(); m_ext_info = ext_info; - m_nozzle_num = nozzle_num; + m_nozzle_data = data; m_dev_id = dev_id; if (fresh){ ClearAms(); - if (m_nozzle_num >= 2){ + if (m_nozzle_data.total_nozzle_count >= 2){ CreateAmsDoubleNozzle(); }else{ CreateAmsSingleNozzle(); @@ -3802,28 +3805,18 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex else { static bool first_time = true; + bool fresh = false; static std::vectorams_info; int nozzle_num = 2; if (first_time){ ams_info = GenerateSimulateData(); + fresh = true; first_time = false; } Freeze(); // update item - bool fresh = false; - if (m_ams_info.size() == ams_info.size() && m_nozzle_num == nozzle_num){ - for (int i = 0; i < m_ams_info.size(); i++) - { - if (m_ams_info[i].ams_id != ams_info[i].ams_id){ - fresh = true; - } - } - } - else{ - fresh = true; - } m_ams_info.clear(); m_ams_info = ams_info; m_ext_info.clear(); @@ -3833,10 +3826,10 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex m_ext_info[0].nozzle_id = MAIN_NOZZLE_ID; m_ext_info[1].ams_id = std::to_string(VIRTUAL_TRAY_DEPUTY_ID); m_ext_info[1].nozzle_id = DEPUTY_NOZZLE_ID; - m_nozzle_num = nozzle_num; + m_nozzle_data = data; if (fresh){ ClearAms(); - if (m_nozzle_num >= 2) { + if (m_nozzle_data.total_nozzle_count >= 2) { CreateAmsDoubleNozzle(); } else { @@ -3917,7 +3910,7 @@ void AMSControl::createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPane AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) { auto init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE; - std::string ams_id = "-1"; + std::string ams_id = ""; if (pos == AMSPanelPos::LEFT_PANEL && m_item_ids[DEPUTY_NOZZLE_ID].size() > 0){ ams_id = m_item_ids[DEPUTY_NOZZLE_ID][0]; } @@ -3930,6 +3923,7 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) { if (item->second->m_info.cans.size() == GENERIC_AMS_SLOT_NUM){ if (item->second->m_info.ams_type == AMSModel::AMS_LITE) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; + if (item->second->m_info.ams_type == AMSModel::EXT_AMS && item->second->m_info.ext_type == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; return AMSRoadShowMode::AMS_ROAD_MODE_FOUR; } else{ @@ -3938,6 +3932,7 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) { return AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; } } + if (item->second->m_info.ams_type == AMSModel::EXT_AMS && item->second->m_info.ext_type == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; } } @@ -3953,7 +3948,7 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vectorAdd(ams1, 0, wxLEFT, FromDIP(4)); @@ -3968,12 +3963,17 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vectorm_ext_image) { ams1->m_ext_image->setShowState(false); } - if (ams1->m_info.ams_type == AMSModel::EXT_AMS) - { - auto ext_image = new AMSExtImage(book_panel, true, pos); - book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30)); - book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30)); - m_ext_image_list[infos[0].ams_id] = ext_image; + if (ams1->m_info.ams_type == AMSModel::EXT_AMS){ + if (ams1->m_info.ext_type == LITE_EXT){ + //book_sizer->Add(ams1, 0, wxALIGN_CENTER_HORIZONTAL, 0); + book_sizer->Add(ams1, 0, wxLEFT, (book_panel->GetSize().x - ams1->GetSize().x) / 2); + } + else{ + auto ext_image = new AMSExtImage(book_panel, pos, &m_nozzle_data); + book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30)); + book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT, FromDIP(30)); + m_ext_image_list[infos[0].ams_id] = ext_image; + } } } @@ -3996,7 +3996,7 @@ void AMSControl::createAmsPanel(wxSimplebook* parent, int& idx, std::vector 1){ + if (m_nozzle_data.total_nozzle_count > 1){ if (info.nozzle_id == MAIN_NOZZLE_ID){ createAms(m_simplebook_ams_right, m_right_page_index, info, AMSPanelPos::RIGHT_PANEL); } @@ -4004,7 +4004,7 @@ void AMSControl::AddAms(AMSinfo info, AMSPanelPos pos) createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL); } } - else if (m_nozzle_num == 1){ + else if (m_nozzle_data.total_nozzle_count == 1){ createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL); } m_simplebook_ams_left->Layout(); @@ -4036,7 +4036,7 @@ void AMSControl::AddAms(std::vectorsingle_info, AMSPanelPos pos) { if (single_info.size() <= 0){ return; } - if (m_nozzle_num == 2) { + if (m_nozzle_data.total_nozzle_count == 2) { if (single_info[0].nozzle_id == MAIN_NOZZLE_ID) { createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); } @@ -4044,7 +4044,7 @@ void AMSControl::AddAms(std::vectorsingle_info, AMSPanelPos pos) { createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, AMSPanelPos::LEFT_PANEL); } } - else if (m_nozzle_num == 1) { + else if (m_nozzle_data.total_nozzle_count == 1) { if (pos == AMSPanelPos::RIGHT_PANEL) { createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, AMSPanelPos::RIGHT_PANEL); } @@ -4193,10 +4193,12 @@ void AMSControl::SwitchAms(std::string ams_id) pos == AMSPanelPos::LEFT_PANEL ? m_simplebook_ams_left->SetSelection(item->m_selection) : m_simplebook_ams_right->SetSelection(item->m_selection); if (item->m_info.cans.size() == GENERIC_AMS_SLOT_NUM) { if (item->m_info.ams_type == AMSModel::AMS_LITE) { - pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE) : m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE) + : m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); } else { - pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR) : m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR) + : m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } } else { @@ -4207,7 +4209,8 @@ void AMSControl::SwitchAms(std::string ams_id) break; } } - pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_num, mode) : m_down_road->UpdateRight(m_nozzle_num, mode); + pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_nozzle_data.total_nozzle_count, mode) + : m_down_road->UpdateRight(m_nozzle_data.total_nozzle_count, mode); if (pos == AMSPanelPos::LEFT_PANEL){ m_down_road->UpdatePassRoad(item->m_info.current_can_id, AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } @@ -4511,6 +4514,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy int length = -1; + //Set path length in different case if (ams->m_info.cans.size() == GENERIC_AMS_SLOT_NUM){ //length = left ? 129 : 145; length = left ? 129 : 145; @@ -4527,11 +4531,14 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy break; } } - model = AMSModel::N3S_AMS; + model = ams->m_info.ams_type; } if (model == AMSModel::AMS_LITE){ length = left ? 145 : 45; } + if (model == EXT_AMS && ams->m_info.ext_type == AMSModelOriginType::LITE_EXT){ + length = 145; + } for (auto i = 0; i < m_ams_info.size(); i++) { if (m_ams_info[i].ams_id == ams_id) { @@ -4561,141 +4568,51 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy } AMSPanelPos pos = left ? AMSPanelPos::LEFT_PANEL : AMSPanelPos::RIGHT_PANEL; - if (model == AMSModel::GENERIC_AMS || model == AMSModel::N3F_AMS || model == AMSModel::AMS_LITE) { - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - if (ams_id_left == ams_id || ams_id_right == ams_id){ - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); - } - } - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - if (ams_id_left == ams_id || ams_id_right == ams_id){ - m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - } - } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - } - } - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - if (ams_id_left == ams_id || ams_id_right == ams_id) - { - m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - } + if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { + //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + if (ams_id_left == ams_id || ams_id_right == ams_id) { + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); } } - else if(model == AMSModel::EXT_AMS || model == AMSModel::N3S_AMS) { - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_extruder->OnAmsLoading(false); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - } - } - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - m_extruder->OnAmsLoading(false); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - } + if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { + ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + if (ams_id_left == ams_id || ams_id_right == ams_id) { + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); } + else + { + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_1); + } + } - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { + if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { + ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + if (ams_id_left == ams_id || ams_id_right == ams_id) { m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - if (ams_id_left == ams_id || ams_id_right == ams_id) { - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - } + m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } - - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { - ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - if (ams_id_left == ams_id || ams_id_right == ams_id) { - m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); - } - else - { - m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - } + else + { + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_2); + } + } + if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { + ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + if (ams_id_left == ams_id || ams_id_right == ams_id) + { + m_down_road->UpdatePassRoad(canid, pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); + m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); + } + else + { + m_down_road->UpdatePassRoad(canid, pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); } } - - //if (m_ams_model == AMSModel::GENERIC_AMS) { - // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // m_down_road->UpdatePassRoad(canid, true, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // m_down_road->UpdatePassRoad(canid, false, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - // m_extruder->OnAmsLoading(false); - // } - - // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - // m_extruder->OnAmsLoading(false); - // } - - // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - // if (m_current_show_ams == ams_id) { - // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid)); - // } - // } - - // if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - // //cans->SetAmsStep(canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); - // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid)); - // } - //} - //else if (m_ams_model == AMSModel::EXTRA_AMS) { - // //cans->SetAmsStepExtra(canid, type, step); - // if (step != AMSPassRoadSTEP::AMS_ROAD_STEP_NONE) { - // m_extruder->OnAmsLoading(true, cans->GetTagColr(canid)); - // } - // else { - // m_extruder->OnAmsLoading(false); - // } - //} - } void AMSControl::on_filament_load(wxCommandEvent &event) diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index ed0128ee3..1ffaebb9c 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -43,7 +43,7 @@ protected: //std::map m_ams_extra_item_list; //std::map m_ams_list; - int m_nozzle_num = 1; + NozzleData m_nozzle_data; std::string m_dev_id; std::vector> m_item_ids{ {}, {} }; std::vector> pair_id; @@ -164,7 +164,7 @@ public: void CreateAmsDoubleNozzle(); void CreateAmsSingleNozzle(); void ClearAms(); - void UpdateAms(std::vector ams_info, std::vector ext_info, int nozzle_num, std::string dev_id, bool is_reset = true, bool test = false); + 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(); diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index 6cb81e3ad..ae700d5fc 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -234,7 +234,7 @@ AMSrefresh::AMSrefresh(wxWindow *parent, int number, Caninfo info, const wxPoint void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size, wxBORDER_NONE); - SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_BLOCK_BK_COLOUR)); + SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this); Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this); @@ -506,9 +506,9 @@ AMSextruderImage::~AMSextruderImage() {} Description:AMSExtImage upon ext lib **************************************************/ -AMSExtImage::AMSExtImage(wxWindow* parent, bool single_flag, AMSPanelPos ext_pos, wxWindowID id, const wxPoint& pos, const wxSize& size) +AMSExtImage::AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos, NozzleData *data, wxWindowID id, const wxPoint& pos) { - if (!single_flag){ + if (data == nullptr){ wxWindow::Create(parent, id, pos, AMS_HUMIDITY_SIZE); } else{ @@ -516,22 +516,12 @@ AMSExtImage::AMSExtImage(wxWindow* parent, bool single_flag, AMSPanelPos ext_pos } SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); - - m_single_flag = single_flag; m_ext_pos = ext_pos; - /*if (single_flag){ - if (ext_pos == AMSPanelPos::LEFT_PANEL){ - m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); - } - else{ - m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); - } - } - else{ - m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); - }*/ + if (data != nullptr) m_nozzle_data = data; + m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); + m_ams_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98); m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); Bind(wxEVT_PAINT, &AMSExtImage::paintEvent, this); @@ -545,6 +535,7 @@ void AMSExtImage::msw_rescale() //auto image = m_ams_extruder.ConvertToImage(); m_ams_ext_left = ScalableBitmap(this, "ext_image_left", 98); m_ams_ext_right = ScalableBitmap(this, "ext_image_right", 98); + m_ams_ext_single_nozzle = ScalableBitmap(this, "ext_image_single_nozzle", 98); m_ams_ext = ScalableBitmap(this, "ams_ext_image", 25); Layout(); Fit(); @@ -583,19 +574,24 @@ void AMSExtImage::doRender(wxDC& dc) auto size = GetSize(); dc.SetPen(*wxTRANSPARENT_PEN); //dc.DrawRectangle(0, FromDIP(5), size.x, size.y - FromDIP(5) - FromDIP(2)); - if (m_single_flag) { - if (m_ext_pos == AMSPanelPos::LEFT_PANEL) { - dc.DrawBitmap(m_ams_ext_left.bmp(), wxPoint((size.x - m_ams_ext_left.GetBmpSize().x) / 2, (size.y - m_ams_ext_left.GetBmpSize().y) / 2)); - } - else { - dc.DrawBitmap(m_ams_ext_right.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2)); - } - } - else { + if (m_nozzle_data == nullptr){ if (m_ext_show) { dc.DrawBitmap(m_ams_ext.bmp(), wxPoint((size.x - m_ams_ext.GetBmpSize().x) / 2, 0)); } } + else{ + if (m_nozzle_data->total_nozzle_count < 2) { + dc.DrawBitmap(m_ams_ext_single_nozzle.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2)); + } + else { + if (m_ext_pos == AMSPanelPos::LEFT_PANEL) { + dc.DrawBitmap(m_ams_ext_left.bmp(), wxPoint((size.x - m_ams_ext_left.GetBmpSize().x) / 2, (size.y - m_ams_ext_left.GetBmpSize().y) / 2)); + } + else { + dc.DrawBitmap(m_ams_ext_right.bmp(), wxPoint((size.x - m_ams_ext_right.GetBmpSize().x) / 2, (size.y - m_ams_ext_right.GetBmpSize().y) / 2)); + } + } + } Layout(); } @@ -2348,10 +2344,8 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.DrawLine(right_nozzle_pos.x + FromDIP(68), 0, right_nozzle_pos.x + FromDIP(68), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE: - dc.DrawLine(right_nozzle_pos.x, 0, right_nozzle_pos.x, size.y / 2); - if (m_nozzle_num >= 2) xpos = right_nozzle_pos.x; - dc.DrawLine(xpos, size.y / 2, right_nozzle_pos.x, size.y / 2); - dc.DrawLine(xpos, size.y / 2, xpos, size.y); + dc.DrawLine(left_nozzle_pos.x, (size.y / 2), left_nozzle_pos.x + FromDIP(145), (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x + FromDIP(145), 0, left_nozzle_pos.x + FromDIP(145), (size.y / 2)); break; default: break; @@ -2458,10 +2452,10 @@ AMSPreview::AMSPreview() {} AMSPreview::AMSPreview(wxWindow* parent, wxWindowID id, AMSinfo amsinfo, AMSModel itemType, const wxPoint& pos, const wxSize& size) : AMSPreview() { if (itemType == AMSModel::GENERIC_AMS || itemType == AMSModel::AMS_LITE || itemType == AMSModel::N3F_AMS) { - create(parent, id, pos, AMS_ITEM_FOUR_SIZE); + create(parent, id, pos, AMS_PREV_FOUR_SIZE); } else { - create(parent, id, pos, AMS_ITEM_SINGLE_SIZE); + create(parent, id, pos, AMS_PREV_SINGLE_SIZE); } m_amsinfo = amsinfo; m_ams_item_type = itemType; @@ -2497,7 +2491,7 @@ void AMSPreview::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con wxWindow::Create(parent, id, pos, size); SetMinSize(size); SetMaxSize(size); - SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + //SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); Refresh(); } @@ -2566,6 +2560,10 @@ void AMSPreview::doRender(wxDC &dc) auto left = FromDIP(8); m_space = FromDIP(9); auto color = *wxWHITE; + dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); + dc.SetBrush(color); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, FromDIP(3)); + //four slot if (m_ams_item_type != AMSModel::EXT_AMS && m_ams_item_type != AMSModel::N3S_AMS){ for (std::vector::iterator iter = m_amsinfo.cans.begin(); iter != m_amsinfo.cans.end(); iter++) { @@ -2613,7 +2611,7 @@ void AMSPreview::doRender(wxDC &dc) if (iter->material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) { dc.SetPen(wxPen(wxColor(0, 0, 0))); dc.DrawRoundedRectangle(rect, 3); - dc.DrawLine(rect.GetRight() - FromDIP(1), rect.GetTop() + FromDIP(1), rect.GetLeft() + FromDIP(1), rect.GetBottom() - FromDIP(1)); + //dc.DrawLine(rect.GetRight() - FromDIP(1), rect.GetTop() + FromDIP(1), rect.GetLeft() + FromDIP(1), rect.GetBottom() - FromDIP(1)); } else { dc.DrawRoundedRectangle(rect, 2); @@ -2673,18 +2671,6 @@ void AMSPreview::doRender(wxDC &dc) auto pot = wxPoint(((size.x - m_single_slot_bitmap.GetBmpSize().x) / 2), ((size.y - m_single_slot_bitmap.GetBmpSize().y) / 2)); dc.DrawBitmap(m_single_slot_bitmap.bmp(), pot); } - else { - - //auto pot = wxPoint((size.x - m_ext_bitmap.GetBmpSize().x) / 2, (size.y - m_ext_bitmap.GetBmpSize().y) / 2); - //dc.DrawBitmap(m_ext_bitmap.bmp(), pot); - - /*auto tsize = dc.GetMultiLineTextExtent(_L("Ext")); - dc.SetPen(wxPen(*wxTRANSPARENT_PEN)); - dc.SetFont(Label::Body_8); - dc.SetTextForeground(AMS_CONTROL_BLACK_COLOUR); - pot = wxPoint((size.x - tsize.x) / 2 + FromDIP(2), (size.y + FromDIP(12)) / 2 - FromDIP(2)); - dc.DrawText(_L("Ext"), pot);*/ - } if ((iter.material_colour.Red() >= 238 && iter.material_colour.Green() >= 238 && iter.material_colour.Blue() >= 238) || iter.material_colour.Alpha() == 0) { dc.SetPen(wxPen(AMS_CONTROL_GRAY500)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -2950,7 +2936,7 @@ void AmsItem::create(wxWindow *parent) } else{ if (m_ams_model == EXT_AMS){ - m_ext_image = new AMSExtImage(this, false, AMSPanelPos::RIGHT_PANEL); + m_ext_image = new AMSExtImage(this, AMSPanelPos::RIGHT_PANEL); sizer_item->Add(m_ext_image, 0, wxALIGN_CENTER_HORIZONTAL, 0); } } diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 39c72746a..6c5cbf640 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -143,8 +143,8 @@ enum FilamentStepType { #define AMS_ITEM_CUBE_SIZE wxSize(FromDIP(8), FromDIP(14)) #define AMS_PREVIEW_SIZE wxSize(FromDIP(82), FromDIP(27)) #define AMS_ITEM_SIZE wxSize(FromDIP(78), FromDIP(184)) -#define AMS_ITEM_FOUR_SIZE wxSize(FromDIP(52), FromDIP(32)) -#define AMS_ITEM_SINGLE_SIZE wxSize(FromDIP(28), FromDIP(32)) +#define AMS_PREV_FOUR_SIZE wxSize(FromDIP(52), FromDIP(32)) +#define AMS_PREV_SINGLE_SIZE wxSize(FromDIP(28), FromDIP(32)) #define AMS_ITEM_HUMIDITY_SIZE wxSize(FromDIP(120), FromDIP(27)) #define AMS_CAN_LIB_SIZE wxSize(FromDIP(52), FromDIP(80)) #define AMS_LITE_CAN_LIB_SIZE wxSize(FromDIP(49), FromDIP(72)) @@ -167,6 +167,7 @@ enum FilamentStepType { #define MAIN_NOZZLE_ID 0 #define DEPUTY_NOZZLE_ID 1 #define GENERIC_AMS_SLOT_NUM 4 +#define MAX_AMS_NUM_IN_PANEL 2 struct Caninfo { @@ -298,7 +299,7 @@ class AMSExtImage : public wxWindow { private: bool m_ext_show = true; - bool m_single_flag = false; + NozzleData* m_nozzle_data = nullptr; AMSPanelPos m_ext_pos; public: void msw_rescale(); @@ -309,8 +310,10 @@ public: ScalableBitmap m_ams_ext; ScalableBitmap m_ams_ext_left; ScalableBitmap m_ams_ext_right; + ScalableBitmap m_ams_ext_single_nozzle; void doRender(wxDC& dc); - AMSExtImage(wxWindow* parent, bool single_flag = false, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + AMSExtImage(wxWindow* parent, AMSPanelPos ext_pos = AMSPanelPos::RIGHT_PANEL, NozzleData *data = nullptr, + wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition); ~AMSExtImage(); };