diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index ffff4c7df..868f5be45 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -2935,7 +2935,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); if (m_ams_info.size() > 0) { for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_show_ams) { + if (m_ams_info[i].ams_id == m_current_show_ams_left || m_ams_info[i].ams_id == m_current_show_ams_right) { m_Humidity_tip_popup.set_humidity_level(m_ams_info[i].ams_humidity); } } @@ -2968,8 +2968,22 @@ AMSControl::~AMSControl() { m_simplebook_ams_right->DeleteAllPages();*/ } -std::string AMSControl::GetCurentAms() { return m_current_ams; } -std::string AMSControl::GetCurentShowAms() { return m_current_show_ams; } +std::string AMSControl::GetCurentAms(bool right_panel) { + if (right_panel){ + return m_current_ams_right; + } + else{ + return m_current_ams_left; + } +} +std::string AMSControl::GetCurentShowAms(bool right_panel) { + if (right_panel){ + return m_current_show_ams_right; + } + else{ + return m_current_show_ams_left; + } +} std::string AMSControl::GetCurrentCan(std::string amsid) { @@ -2984,6 +2998,24 @@ std::string AMSControl::GetCurrentCan(std::string amsid) return current_can; } +bool AMSControl::IsAmsInRightPanel(std::string ams_id) { + if (m_nozzle_num == 2){ + if (m_ams_item_list[ams_id]->m_info.nozzle_id == 0){ + return true; + } + else{ + return false; + } + } + else{ + for (auto id : m_item_ids[1]){ + if (id == ams_id){ + return true; + } + } + return false; + } +} wxColour AMSControl::GetCanColour(std::string amsid, std::string canid) { @@ -3429,6 +3461,9 @@ void AMSControl::CreateAmsNew() m_down_road->UpdateRight(2, right_init_mode); } m_extruder->update(2); + auto it = m_ams_item_list.begin(); + m_down_road->UpdatePassRoad(0, true, -1, it->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + m_down_road->UpdatePassRoad(0, false, -1, (++it)->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); //Refresh(); //Freeze(); Thaw(); @@ -3560,6 +3595,12 @@ void AMSControl::CreateAmsSingleNozzle() m_down_road->UpdateRight(1, right_init_mode); } m_extruder->update(1); + auto it = m_ams_item_list.begin(); + m_down_road->UpdatePassRoad("0", true, -1, it->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + if ((++it) != m_ams_item_list.end()){ + m_down_road->UpdatePassRoad("0", false, -1, it->second->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); + } + //Refresh(); Thaw(); } @@ -3619,7 +3660,7 @@ void AMSControl::show_vams(bool show) //m_panel_virtual->Show(show); //m_vams_sizer->Show(show); //m_vams_extra_road->Show(show); - m_extruder->has_ams(show); + /*m_extruder->has_ams(show); show_vams_kn_value(show); Layout(); @@ -3629,7 +3670,7 @@ void AMSControl::show_vams(bool show) event.SetEventObject(m_vams_lib); wxPostEvent(m_vams_lib, event); } - } + }*/ } void AMSControl::show_vams_kn_value(bool show) @@ -3710,8 +3751,8 @@ void AMSControl::ReadExtInfo(MachineObject* obj) { void AMSControl::UpdateAms(std::vector ams_info, std::vectorext_info, std::string dev_id, bool is_reset, bool test) { if (!test){ - std::string curr_ams_id = GetCurentAms(); - std::string curr_can_id = GetCurrentCan(curr_ams_id); + /*std::string curr_ams_id = GetCurentAms(); + std::string curr_can_id = GetCurrentCan(curr_ams_id);*/ int nozzle_num = ext_info.size(); @@ -3784,11 +3825,11 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex } } - if (m_current_show_ams.empty() && !is_reset) { + /*if (m_current_show_ams.empty() && !is_reset) { if (ext_info.size() > 0) { SwitchAms(ext_info[0].ams_id); } - } + }*/ //m_simplebook_ams_left->SetSelection(m_simplebook_ams_left->m_first); } @@ -3909,11 +3950,11 @@ void AMSControl::UpdateAms(std::vector ams_info, std::vectorex } } - if (m_current_show_ams.empty() && !is_reset) { + /*if (m_current_show_ams.empty() && !is_reset) { if (ams_info.size() > 0) { SwitchAms(ams_info[0].ams_id); } - } + }*/ } @@ -4226,23 +4267,25 @@ void AMSControl::AddAmsPreview(std::vectorsingle_info) { void AMSControl::SwitchAms(std::string ams_id) { - if(ams_id == m_current_show_ams){return;} + if(ams_id == m_current_show_ams_left || ams_id == m_current_show_ams_right){return;} - if (m_current_show_ams != ams_id) { - m_current_show_ams = ams_id; - m_extruder->OnAmsLoading(false); - } - - /*if (ams_id != std::to_string(VIRTUAL_TRAY_MAIN_ID)) { - if (m_current_show_ams != ams_id) { - m_current_show_ams = ams_id; + bool is_in_right = IsAmsInRightPanel(ams_id); + if (is_in_right){ + if (m_current_show_ams_right != ams_id) { + m_current_show_ams_right = ams_id; m_extruder->OnAmsLoading(false); } - }*/ + } + else{ + m_current_show_ams_left = ams_id; + m_extruder->OnAmsLoading(false); + if (m_nozzle_num > 1) m_extruder->OnAmsLoading(false, 1); + } + for (auto prv_it : m_ams_preview_list) { AMSPreview* prv = prv_it.second; - if (prv->m_amsinfo.ams_id == m_current_show_ams) { + if (prv->m_amsinfo.ams_id == m_current_show_ams_left || prv->m_amsinfo.ams_id == m_current_show_ams_right) { prv->OnSelected(); m_current_select = ams_id; @@ -4258,16 +4301,12 @@ void AMSControl::SwitchAms(std::string ams_id) } } } - - //if (!ready_selected) { - // m_current_ams = std::to_string(VIRTUAL_TRAY_MAIN_ID); - // //m_vams_lib->OnSelected(); - //} - //else { - // m_current_ams = ams_id; - // //m_vams_lib->UnSelected(); - //} - m_current_ams = ams_id; + if (is_in_right){ + m_current_ams_right = ams_id; + } + else{ + m_current_ams_left = ams_id; + } } else { prv->UnSelected(); @@ -4288,130 +4327,106 @@ void AMSControl::SwitchAms(std::string ams_id) for (auto ams_item : m_ams_item_list) { AmsItem* item = ams_item.second; if (item->m_info.ams_id == ams_id) { - - /*if (m_ams_model == AMSModel::GENERIC_AMS) { - if (item->m_info.nozzle_id == 1) - { - m_simplebook_ams_left->SetSelection(item->m_selection); - } - else if (item->m_info.nozzle_id == 0) - { - m_simplebook_ams_right->SetSelection(item->m_selection); - } - - }*/ if (m_nozzle_num == 2) { - if (item->m_info.nozzle_id == 1) - { + if (item->m_info.nozzle_id == 1){ m_simplebook_ams_left->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4) - { + if (item->m_info.cans.size() == 4){ m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id) - { - if (it.first == ams_id || it.second == ams_id) - { + for (auto it : pair_id){ + if (it.first == ams_id || it.second == ams_id){ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; break; } } m_down_road->UpdateLeft(m_nozzle_num, mode); + m_down_road->UpdatePassRoad(item->m_info.current_can_id, true, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - } - else if (item->m_info.nozzle_id == 0) - { + else if (item->m_info.nozzle_id == 0){ m_simplebook_ams_right->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4) - { + if (item->m_info.cans.size() == 4){ m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id) - { - if (it.first == ams_id || it.second == ams_id) - { + for (auto it : pair_id){ + if (it.first == ams_id || it.second == ams_id){ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; break; } } m_down_road->UpdateRight(m_nozzle_num, mode); + m_down_road->UpdatePassRoad(item->m_info.current_can_id, false, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } } } else if (m_nozzle_num == 1) { - for (auto id : m_item_ids[0]) - { - if (id == item->m_info.ams_id) - { + for (auto id : m_item_ids[0]){ + if (id == item->m_info.ams_id){ m_simplebook_ams_left->SetSelection(item->m_selection); - if (item->m_info.cans.size() == 4) - { + if (item->m_info.cans.size() == 4){ m_down_road->UpdateLeft(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; - for (auto it : pair_id) - { - if (it.first == ams_id || it.second == ams_id) - { + for (auto it : pair_id){ + if (it.first == ams_id || it.second == ams_id){ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; break; } } m_down_road->UpdateLeft(m_nozzle_num, mode); + m_down_road->UpdatePassRoad(item->m_info.current_can_id, true, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - } - } for (auto id : m_item_ids[1]) { - if (id == item->m_info.ams_id) - { + if (id == item->m_info.ams_id){ m_simplebook_ams_right->SetSelection(item->m_selection); - - if (item->m_info.cans.size() == 4) - { + if (item->m_info.cans.size() == 4){ m_down_road->UpdateRight(m_nozzle_num, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; for (auto it : pair_id) { - if (it.first == ams_id || it.second == ams_id) - { + if (it.first == ams_id || it.second == ams_id){ mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; break; } } m_down_road->UpdateRight(m_nozzle_num, mode); + m_down_road->UpdatePassRoad(item->m_info.current_can_id, false, -1, item->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } - } } } } } - //update extruder for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { + if (m_ams_info[i].ams_id == ams_id) { switch (m_ams_info[i].current_step) { case AMSPassRoadSTEP::AMS_ROAD_STEP_NONE: m_extruder->TurnOff(); break; case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1: m_extruder->TurnOff(); break; - case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2: m_extruder->TurnOn(GetCanColour(m_current_ams, m_ams_info[i].current_can_id)); break; + case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2: m_extruder->TurnOn(GetCanColour(ams_id, m_ams_info[i].current_can_id)); break; - case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3: m_extruder->TurnOn(GetCanColour(m_current_ams, m_ams_info[i].current_can_id)); break; + case AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3: m_extruder->TurnOn(GetCanColour(ams_id, m_ams_info[i].current_can_id)); break; } + SetAmsStep(ams_id, m_ams_info[i].current_can_id, AMSPassRoadType::AMS_ROAD_TYPE_LOAD, m_ams_info[i].current_step); + } + } + for (auto i = 0; i < m_ext_info.size(); i++) { + if (m_ext_info[i].ams_id == ams_id) { + SetAmsStep(ams_id, "0", AMSPassRoadType::AMS_ROAD_TYPE_LOAD, m_ext_info[i].current_step); } } } @@ -4660,7 +4675,6 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy auto amsit = m_ams_item_list.find(ams_id); bool notfound = false; - if (amsit != m_ams_item_list.end()) { ams = amsit->second; } @@ -4684,15 +4698,9 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy m_last_tray_id = canid; auto model = AMSModel::EXTRA_AMS; - bool left = false; - for (auto id : m_item_ids[0]){ - if (id == ams_id){ - left = true; - break; - } - } - int length = -1; + bool left = !IsAmsInRightPanel(ams_id); + int length = -1; if (ams->m_info.cans.size() == 4){ length = left ? 135 : 149; @@ -4719,26 +4727,24 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (model == AMSModel::GENERIC_AMS || model == AMSModel::N3F_AMS || model == AMSModel::EXTRA_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_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); - m_extruder->OnAmsLoading(false); + m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP1) { m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_1); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_1); - m_extruder->OnAmsLoading(false); + m_extruder->OnAmsLoading(false, ams->m_info.nozzle_id); } if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - if (m_current_show_ams == ams_id) { + if (m_current_show_ams_left == ams_id || m_current_show_ams_right == ams_id) { m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } } - if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP3) { m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_3); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_3); @@ -4748,8 +4754,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy else if(model == AMSModel::NO_AMS || model == AMSModel::SINGLE_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_down_road->UpdatePassRoad(canid, left, -1, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false); } @@ -4763,7 +4768,7 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy if (step == AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2) { m_down_road->UpdatePassRoad(canid, left, length, ams->m_info, AMSPassRoadSTEP::AMS_ROAD_STEP_2); ams->SetAmsStep(ams_id, canid, type, AMSPassRoadSTEP::AMS_ROAD_STEP_2); - if (m_current_show_ams == ams_id) { + if (m_current_show_ams_left == ams_id || m_current_show_ams_right == ams_id) { m_extruder->OnAmsLoading(true, ams->m_info.nozzle_id, ams->GetTagColr(canid)); } } @@ -4819,13 +4824,19 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy m_ams_info[i].current_can_id = canid; } } + for (auto i = 0; i < m_ext_info.size(); i++) { + if (m_ext_info[i].ams_id == ams_id) { + m_ext_info[i].current_step = step; + m_ext_info[i].current_can_id = canid; + } + } } void AMSControl::on_filament_load(wxCommandEvent &event) { m_button_extruder_back->Disable(); for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_LOAD; } + if (m_ams_info[i].ams_id == m_current_ams_left || m_ams_info[i].ams_id == m_current_ams_right) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_LOAD; } } post_event(SimpleEvent(EVT_AMS_LOAD)); } @@ -4833,7 +4844,7 @@ void AMSControl::on_filament_load(wxCommandEvent &event) void AMSControl::on_extrusion_cali(wxCommandEvent &event) { for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_CALI; } + if (m_ams_info[i].ams_id == m_current_ams_left || m_ams_info[i].ams_id == m_current_ams_right) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_CALI; } } post_event(SimpleEvent(EVT_AMS_EXTRUSION_CALI)); } @@ -4842,7 +4853,7 @@ void AMSControl::on_filament_unload(wxCommandEvent &event) { m_button_extruder_feed->Disable(); for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_UNLOAD; } + if (m_ams_info[i].ams_id == m_current_ams_left || m_ams_info[i].ams_id == m_current_ams_right) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_UNLOAD; } } post_event(SimpleEvent(EVT_AMS_UNLOAD)); } @@ -4855,7 +4866,7 @@ void AMSControl::auto_refill(wxCommandEvent& event) void AMSControl::on_ams_setting_click(wxMouseEvent &event) { for (auto i = 0; i < m_ams_info.size(); i++) { - if (m_ams_info[i].ams_id == m_current_ams) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_CALI; } + if (m_ams_info[i].ams_id == m_current_ams_left || m_ams_info[i].ams_id == m_current_ams_right) { m_ams_info[i].current_action = AMSAction::AMS_ACTION_CALI; } } post_event(SimpleEvent(EVT_AMS_SETTINGS)); } diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 12e00a9b5..1a96ed154 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -26,9 +26,12 @@ public: void on_retry(); protected: - std::string m_current_ams; - std::string m_current_slot; - std::string m_current_show_ams; + std::string m_current_ams_left; + std::string m_current_ams_right; + std::string m_current_slot_left; + std::string m_current_slot_right; + std::string m_current_show_ams_left; + std::string m_current_show_ams_right; std::map m_ams_selection; std::map m_ams_preview_list; @@ -127,9 +130,10 @@ protected: std::string m_last_tray_id = "-1"; public: - std::string GetCurentAms(); - std::string GetCurentShowAms(); + std::string GetCurentAms(bool right_panel = true); + std::string GetCurentShowAms(bool right_panel = true); std::string GetCurrentCan(std::string amsid); + bool IsAmsInRightPanel(std::string ams_id); wxColour GetCanColour(std::string amsid, std::string canid); AMSModel m_ams_model{AMSModel::NO_AMS}; diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index cb4c4e007..b87e28498 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -600,14 +600,13 @@ void AMSextruder::OnVamsLoading(bool load, wxColour col) void AMSextruder::OnAmsLoading(bool load, int nozzle_id, wxColour col /*= AMS_CONTROL_GRAY500*/) { m_ams_loading = load; - if (load)m_current_colur = col; if (nozzle_id == 0){ m_left_extruder->OnAmsLoading(load, col); - m_right_extruder->OnAmsLoading(false, col); + if (load) m_current_colur = col; } else{ m_right_extruder->OnAmsLoading(load, col); - m_left_extruder->OnAmsLoading(false, col); + if (load) m_current_colur_deputy = col; } Refresh(); } @@ -631,6 +630,7 @@ void AMSextruder::render(wxDC& dc) wxGCDC dc2(memdc); //doRender(dc2); } + m_left_extruder->update(true); if (m_nozzle_num >= 2) { m_right_extruder->update(true); } @@ -1301,9 +1301,10 @@ void AMSLib::render_generic_lib(wxDC &dc) // selected if (m_selected) { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); + //dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); if (tmp_lib_colour.Alpha() == 0) { - dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 2, wxSOLID)); + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 3, wxSOLID)); } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { @@ -1500,9 +1501,10 @@ void AMSLib::render_generic_lib(wxDC &dc) #endif if (m_selected) { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); + //dc.SetPen(wxPen(tmp_lib_colour, 3, wxSOLID)); if (tmp_lib_colour.Alpha() == 0) { - dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 2, wxSOLID)); + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(), tmp_lib_colour.Blue(), 128), 3, wxSOLID)); } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { @@ -1517,7 +1519,7 @@ void AMSLib::render_generic_lib(wxDC &dc) } if (!m_selected && m_hover) { - dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 2, wxSOLID)); + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 3, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { dc.DrawRectangle(0, 0, size.x, size.y); @@ -2225,42 +2227,60 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.DrawLine(left_nozzle_pos.x, left_nozzle_pos.y, FromDIP(left_nozzle_pos.x + 30), left_nozzle_pos.y); }*/ //dc.SetBrush(wxBrush(*wxBLUE)); - if (m_pass_road_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_pass_road_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3){ + if (m_pass_road_left_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_pass_road_left_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3){ dc.SetPen(wxPen(m_amsinfo.cans[m_canindex].material_colour, 4, wxSOLID)); if (m_left_road_length > 0){ dc.DrawLine((FromDIP(left_nozzle_pos.x - m_left_road_length)), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2)); dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y)); dc.DrawLine(FromDIP(left_nozzle_pos.x - m_left_road_length), FromDIP(0), FromDIP(left_nozzle_pos.x - m_left_road_length), FromDIP(size.y / 2)); } - else if (m_right_road_length > 0){ - dc.DrawLine((FromDIP(left_nozzle_pos.x)), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x + m_right_road_length), FromDIP(size.y / 2)); - dc.DrawLine(FromDIP(left_nozzle_pos.x + m_right_road_length), FromDIP(0), FromDIP(left_nozzle_pos.x + m_right_road_length), FromDIP(size.y / 2)); - if (m_nozzle_num == 1){ - dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x), FromDIP(size.y / 2)); - dc.DrawLine(FromDIP(left_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(left_nozzle_pos.x), FromDIP(size.y)); - } - else{ - dc.DrawLine(FromDIP(right_nozzle_pos.x), FromDIP(size.y / 2), FromDIP(right_nozzle_pos.x), FromDIP(size.y)); + } + + if (m_pass_road_right_step == AMSPassRoadSTEP::AMS_ROAD_STEP_2 || m_pass_road_right_step == AMSPassRoadSTEP::AMS_ROAD_STEP_3) { + dc.SetPen(wxPen(m_amsinfo.cans[m_canindex].material_colour, 4, wxSOLID)); + if (m_right_road_length > 0) { + int x = left_nozzle_pos.x; + int len = m_right_road_length; + if (m_nozzle_num == 2){ + x = right_nozzle_pos.x; + len = len - 14; } + dc.DrawLine((FromDIP(x)), FromDIP(size.y / 2), FromDIP(x + len), FromDIP(size.y / 2)); + dc.DrawLine(FromDIP(x + len), FromDIP(0), FromDIP(left_nozzle_pos.x + len), FromDIP(size.y / 2)); + dc.DrawLine(FromDIP(x), FromDIP(size.y / 2), FromDIP(x), FromDIP(size.y)); } } } void AMSRoadDownPart::UpdatePassRoad(string can_id, bool left, int len, AMSinfo info, AMSPassRoadSTEP step) { - m_pass_road_step = step; - if (len == -1){ - m_left_road_length = -1; - m_right_road_length = -1; - return; + if (m_nozzle_num >= 2){ + if (left) { + m_left_road_length = len; + m_pass_road_left_step = step; + } + else { + m_right_road_length = len; + m_pass_road_right_step = step; + } } + else{ + if (left) { + m_left_road_length = len; + m_right_road_length = -1; + m_pass_road_left_step = step; + } + else { + m_right_road_length = len; + m_left_road_length = -1; + m_pass_road_right_step = step; + } + } + m_canindex = atoi(can_id.c_str()); if (m_canindex == -1){ return; } m_amsinfo = info; - m_left_road_length = left ? len : -1; - m_right_road_length = left ? -1 : len; - m_pass_road_step = step; } @@ -2851,9 +2871,9 @@ void AmsItem::Update(AMSinfo info) } i = 0; - for (auto lib_it : m_can_lib_list) { - AMSLib* lib = lib_it.second; - if (i < m_can_count) { + for (int i = 0; i < m_can_lib_list.size(); i++) { + AMSLib* lib = m_can_lib_list[std::to_string(i)]; + if (i < m_can_count && lib != nullptr) { lib->Update(info.cans[i], info.ams_id); lib->Show(); } diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index b5dfabb31..6e3e597cb 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -173,7 +173,7 @@ public: std::vector cans; int nozzle_id = 0; std::string current_can_id; - AMSPassRoadSTEP current_step; + AMSPassRoadSTEP current_step = AMSPassRoadSTEP::AMS_ROAD_STEP_NONE; AMSAction current_action; int curreent_filamentstep; int ams_humidity = 0; @@ -313,6 +313,7 @@ public: bool m_vams_loading{false}; bool m_ams_loading{false}; wxColour m_current_colur; + wxColour m_current_colur_deputy; int m_nozzle_num{ 1 }; wxBoxSizer * m_bitmap_sizer{nullptr}; @@ -543,7 +544,8 @@ public: double m_radius = { 4 }; wxColour m_road_def_color; AMSPassRoadType m_pass_road_type = { AMSPassRoadType::AMS_ROAD_TYPE_NONE }; - AMSPassRoadSTEP m_pass_road_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; + AMSPassRoadSTEP m_pass_road_left_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; + AMSPassRoadSTEP m_pass_road_right_step = { AMSPassRoadSTEP::AMS_ROAD_STEP_NONE }; wxColour m_road_color; //void Update(AMSRoadDownPartMode nozzle, AMSRoadShowMode left_mode, AMSRoadShowMode right_mode, int left_len, int right_len);