#include "AMSControl.hpp" #include "Label.hpp" #include "../BitmapCache.hpp" #include "../I18N.hpp" #include "../GUI_App.hpp" #include "slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h" #include #include #include #include "CalibUtils.hpp" namespace Slic3r { namespace GUI { #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)) , m_percent_humidity_dry_popup(new uiAmsPercentHumidityDryPopup(this)) , m_ams_introduce_popup(AmsIntroducePopup(this)) { Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (dev) { MachineObject *obj = dev->get_selected_machine(); parse_object(obj); } m_extder_data.total_extder_count = 1; SetBackgroundColour(*wxWHITE); // normal mode //Freeze(); wxBoxSizer *m_sizer_body = new wxBoxSizer(wxVERTICAL); m_amswin = new wxWindow(this, wxID_ANY); m_amswin->SetBackgroundColour(*wxWHITE); //m_amswin->SetBackgroundColour(wxColour(0x00CED1)); m_amswin->SetSize(wxSize(FromDIP(578), -1)); m_amswin->SetMinSize(wxSize(FromDIP(578), -1)); m_sizer_ams_items = new wxBoxSizer(wxHORIZONTAL); /*right items*/ m_panel_prv_left = new wxScrolledWindow(m_amswin, wxID_ANY); m_panel_prv_left->SetScrollRate(10, 0); m_panel_prv_left->SetSize(AMS_ITEMS_PANEL_SIZE); m_panel_prv_left->SetMinSize(AMS_ITEMS_PANEL_SIZE); //m_panel_prv_left->SetBackgroundColour(0x4169E1); m_panel_prv_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); m_sizer_prv_left = new wxBoxSizer(wxHORIZONTAL); m_panel_prv_left->SetSizer(m_sizer_prv_left); m_panel_prv_left->Layout(); //m_sizer_items_left->Fit(m_panel_prv_left); /*right items*/ m_panel_prv_right = new wxScrolledWindow(m_amswin, wxID_ANY); m_panel_prv_right->SetScrollRate(10, 0); m_panel_prv_right->SetSize(AMS_ITEMS_PANEL_SIZE); m_panel_prv_right->SetMinSize(AMS_ITEMS_PANEL_SIZE); //m_panel_prv_right->SetBackgroundColour(0x4169E1); m_panel_prv_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); m_sizer_prv_right = new wxBoxSizer(wxHORIZONTAL); m_panel_prv_right->SetSizer(m_sizer_prv_right); m_panel_prv_right->Layout(); //m_sizer_items_right->Fit(m_panel_prv_right); /*m_sizer_ams_items->Add(m_panel_prv_left, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5)); m_sizer_ams_items->Add(m_panel_prv_right, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(5));*/ m_sizer_ams_items->Add(m_panel_prv_left, 0, wxLEFT | wxRIGHT, FromDIP(5)); m_sizer_ams_items->Add(m_panel_prv_right, 0, wxLEFT | wxRIGHT, FromDIP(5)); //m_panel_prv_right->Hide(); //m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL); m_sizer_ams_body = new wxBoxSizer(wxHORIZONTAL); //ams area m_sizer_ams_area_left = new wxBoxSizer(wxHORIZONTAL); m_sizer_ams_area_right = new wxBoxSizer(wxHORIZONTAL); m_sizer_down_road = new wxBoxSizer(wxHORIZONTAL); m_simplebook_ams_left = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); m_simplebook_ams_left->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); //m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxLEFT | wxRIGHT, FromDIP(5)); m_sizer_ams_area_left->Add(m_simplebook_ams_left, 0, wxALIGN_CENTER, 0); m_simplebook_ams_right = new wxSimplebook(m_amswin, wxID_ANY, wxDefaultPosition, AMS_CANS_WINDOW_SIZE, 0); m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); //m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxLEFT | wxRIGHT, FromDIP(5)); m_sizer_ams_area_right->Add(m_simplebook_ams_right, 0, wxALIGN_CENTER, 0); m_panel_down_road = new wxPanel(m_amswin, wxID_ANY, wxDefaultPosition, AMS_DOWN_ROAD_SIZE, 0); m_panel_down_road->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); m_down_road = new AMSRoadDownPart(m_panel_down_road, wxID_ANY, wxDefaultPosition, AMS_DOWN_ROAD_SIZE); m_sizer_down_road->Add(m_panel_down_road, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, 0); // ams mode // m_simplebook_ams_right->SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); m_sizer_ams_area_left->Layout(); m_sizer_ams_area_right->Layout(); m_sizer_ams_option = new wxBoxSizer(wxHORIZONTAL); m_sizer_option_left = new wxBoxSizer(wxHORIZONTAL); m_sizer_option_mid = new wxBoxSizer(wxHORIZONTAL); m_sizer_option_right = new wxBoxSizer(wxHORIZONTAL); auto m_panel_option_left = new wxPanel(m_amswin); auto m_panel_option_right = new wxPanel(m_amswin); m_panel_option_left->SetBackgroundColour(*wxWHITE); m_panel_option_right->SetBackgroundColour(*wxWHITE); m_panel_option_left->SetSizer(m_sizer_option_left); m_panel_option_right->SetSizer(m_sizer_option_right); m_panel_option_left->SetMinSize(wxSize(FromDIP(180), -1)); m_panel_option_left->SetMaxSize(wxSize(FromDIP(180), -1)); m_panel_option_right->SetMinSize(wxSize(FromDIP(180), -1)); m_panel_option_right->SetMaxSize(wxSize(FromDIP(180), -1)); StateColor btn_bg_green(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); StateColor btn_bd_green(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled)); StateColor btn_bd_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); StateColor btn_text_green(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(wxColour(255, 255, 254), StateColor::Enabled)); StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); /*option left*/ m_button_auto_refill = new Button(m_panel_option_left, _L("Auto-refill")); m_button_auto_refill->SetBackgroundColor(btn_bg_white); m_button_auto_refill->SetBorderColor(btn_bd_white); m_button_auto_refill->SetTextColor(btn_text_white); m_button_auto_refill->SetFont(Label::Body_13); m_button_auto_refill->SetMinSize(wxSize(FromDIP(80), FromDIP(34))); m_button_auto_refill->SetMaxSize(wxSize(FromDIP(80), FromDIP(34))); m_button_ams_setting_normal = ScalableBitmap(this, "ams_setting_normal", 24); m_button_ams_setting_hover = ScalableBitmap(this, "ams_setting_hover", 24); m_button_ams_setting_press = ScalableBitmap(this, "ams_setting_press", 24); m_button_ams_setting = new wxStaticBitmap(m_panel_option_left, wxID_ANY, m_button_ams_setting_normal.bmp(), wxDefaultPosition, wxSize(FromDIP(24), FromDIP(24))); m_sizer_option_left->Add(m_button_auto_refill, 0, wxALIGN_CENTER, 0); m_sizer_option_left->Add(0, 0, 0, wxLEFT, FromDIP(20)); m_sizer_option_left->Add(m_button_ams_setting, 0, wxALIGN_CENTER, 0); /*option mid*/ m_extruder = new AMSextruder(m_amswin, wxID_ANY, m_extder_data.total_extder_count, wxDefaultPosition, AMS_EXTRUDER_SIZE); m_sizer_option_mid->Add( m_extruder, 0, wxALIGN_CENTER, 0 ); /*option right*/ m_button_extruder_feed = new Button(m_panel_option_right, _L("Load")); m_button_extruder_feed->SetFont(Label::Body_13); m_button_extruder_feed->SetBackgroundColor(btn_bg_green); m_button_extruder_feed->SetBorderColor(btn_bd_green); m_button_extruder_feed->SetTextColor(btn_text_green); m_button_extruder_feed->SetMinSize(wxSize(FromDIP(80),FromDIP(34))); m_button_extruder_feed->SetMaxSize(wxSize(FromDIP(80),FromDIP(34))); if (wxGetApp().app_config->get("language") == "de_DE") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "fr_FR") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "ru_RU") m_button_extruder_feed->SetLabel("Load"); if (wxGetApp().app_config->get("language") == "nl_NL") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "hu_HU") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "ja_JP") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_feed->SetLabel("Load"); m_button_extruder_back = new Button(m_panel_option_right, _L("Unload")); m_button_extruder_back->SetBackgroundColor(btn_bg_white); m_button_extruder_back->SetBorderColor(btn_bd_white); m_button_extruder_back->SetTextColor(btn_text_white); m_button_extruder_back->SetFont(Label::Body_13); m_button_extruder_back->SetMinSize(wxSize(FromDIP(80), FromDIP(34))); m_button_extruder_back->SetMaxSize(wxSize(FromDIP(80), FromDIP(34))); if (wxGetApp().app_config->get("language") == "de_DE") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "fr_FR") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "ru_RU") m_button_extruder_back->SetLabel("Unload"); if (wxGetApp().app_config->get("language") == "nl_NL") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "hu_HU") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "ja_JP") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "pt_BR") m_button_extruder_back->SetLabel("Unload"); //m_sizer_option_right->Add(0, 0, 1, wxEXPAND, 0); m_sizer_option_right->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(0)); m_sizer_option_right->Add(m_button_extruder_feed, 0, wxLEFT, FromDIP(20)); m_panel_option_left->Layout(); m_panel_option_right->Layout(); m_sizer_ams_option->Add(m_panel_option_left, 0, wxALIGN_LEFT, 0); m_sizer_ams_option->Add( 0, 0, 1, wxEXPAND, 0); m_sizer_ams_option->Add(m_sizer_option_mid, 0, wxALIGN_RIGHT, 0); m_sizer_ams_option->Add( 0, 0, 1, wxEXPAND, 0); m_sizer_ams_option->Add(m_panel_option_right, 0, wxALIGN_RIGHT, 0); m_sizer_ams_body->Add(m_sizer_ams_area_left, wxALIGN_CENTER, 0); m_sizer_ams_body->AddSpacer(FromDIP(10)); m_sizer_ams_body->Add(m_sizer_ams_area_right, wxALIGN_CENTER, 0); m_sizer_body->Add(m_sizer_ams_items, 0, wxALIGN_CENTER, 0); m_sizer_body->Add(0, 0, 1, wxEXPAND | wxTOP, FromDIP(10)); m_sizer_body->Add(m_sizer_ams_body, 0, wxALIGN_CENTER, 0); m_sizer_body->Add(m_sizer_down_road, 0, wxALIGN_CENTER, 0); m_sizer_body->Add(m_sizer_ams_option, 0, wxEXPAND, 0); m_amswin->SetSizer(m_sizer_body); m_amswin->Layout(); m_amswin->Fit(); //Thaw(); SetSize(m_amswin->GetSize()); SetMinSize(m_amswin->GetSize()); AddPage(m_amswin, wxEmptyString, false); m_button_extruder_feed->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_load), NULL, this); m_button_extruder_back->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::on_filament_unload), NULL, this); m_button_auto_refill->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AMSControl::auto_refill), NULL, this); m_button_ams_setting->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& e) { m_button_ams_setting->SetBitmap(m_button_ams_setting_hover.bmp()); e.Skip(); }); m_button_ams_setting->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { m_button_ams_setting->SetBitmap(m_button_ams_setting_press.bmp()); on_ams_setting_click(e); e.Skip(); }); m_button_ams_setting->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent& e) { m_button_ams_setting->SetBitmap(m_button_ams_setting_normal.bmp()); e.Skip(); }); Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this](wxCommandEvent& evt) { uiAmsHumidityInfo *info = (uiAmsHumidityInfo *) evt.GetClientData(); if (info) { if (info->humidity_percent >= 0) { m_percent_humidity_dry_popup->Update(info); wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); wxPoint popup_pos(img_pos.x - m_percent_humidity_dry_popup->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); m_percent_humidity_dry_popup->Position(popup_pos, wxSize(0, 0)); m_percent_humidity_dry_popup->Popup(); } else { wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); int humidity_value = info->humidity_level; if (humidity_value > 0 && humidity_value <= 5) { m_Humidity_tip_popup.set_humidity_level(humidity_value); } m_Humidity_tip_popup.Popup(); } } delete info; }); Bind(EVT_AMS_ON_SELECTED, &AMSControl::AmsSelectedSwitch, this); } void AMSControl::on_retry() { post_event(wxCommandEvent(EVT_AMS_RETRY)); } AMSControl::~AMSControl() {} std::string AMSControl::GetCurentAms() { return m_current_ams; } std::string AMSControl::GetCurentShowAms(AMSPanelPos pos) { if (pos == AMSPanelPos::RIGHT_PANEL){ return m_current_show_ams_right; } else{ return m_current_show_ams_left; } } std::string AMSControl::GetCurrentCan(std::string amsid) { std::string current_can; for (auto ams_item : m_ams_item_list) { AmsItem* item = ams_item.second; if (item == nullptr){ continue; } if (item->get_ams_id() == amsid) { current_can = item->GetCurrentCan(); return current_can; } } return current_can; } bool AMSControl::IsAmsInRightPanel(std::string ams_id) { if (m_extder_data.total_extder_count == 2){ if (m_ams_item_list.find(ams_id) != m_ams_item_list.end() && m_ams_item_list[ams_id]->get_nozzle_id() == MAIN_NOZZLE_ID) { return true; } else{ return false; } } else{ for (auto id : m_item_ids[MAIN_NOZZLE_ID]){ if (id == ams_id){ return true; } } return false; } } void AMSControl::AmsSelectedSwitch(wxCommandEvent& event) { std::string ams_id_selected = std::to_string(event.GetInt()); if (m_current_ams != ams_id_selected){ m_current_ams = ams_id_selected; } if (m_current_show_ams_left != ams_id_selected && m_current_show_ams_left != "") { auto item = m_ams_item_list[m_current_show_ams_left]; if (!item) return; try{ const auto& can_lib_list = item->get_can_lib_list(); for (auto can : can_lib_list) { can.second->UnSelected(); } } catch (...){ ; } } else if (m_current_show_ams_right != ams_id_selected && m_current_show_ams_right != "") { auto item = m_ams_item_list[m_current_show_ams_right]; if (!item) return; try { const auto &can_lib_list = item->get_can_lib_list(); for (auto can : can_lib_list) { can.second->UnSelected(); } } catch (...) { ; } } } wxColour AMSControl::GetCanColour(std::string amsid, std::string canid) { wxColour col = *wxWHITE; for (auto i = 0; i < m_ams_info.size(); i++) { if (m_ams_info[i].ams_id == amsid) { for (auto o = 0; o < m_ams_info[i].cans.size(); o++) { if (m_ams_info[i].cans[o].can_id == canid) { col = m_ams_info[i].cans[o].material_colour; } } } } return col; } void AMSControl::SetActionState(bool button_status[]) { if (button_status[ActionButton::ACTION_BTN_LOAD]) m_button_extruder_feed->Enable(); else m_button_extruder_feed->Disable(); if (button_status[ActionButton::ACTION_BTN_UNLOAD]) m_button_extruder_back->Enable(); else m_button_extruder_back->Disable(); } void AMSControl::EnterNoneAMSMode() { //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::EXT_AMS) return; m_panel_prv_left->Hide(); m_simplebook_ams_left->SetSelection(0); m_extruder->no_ams_mode(true); //m_button_ams_setting->Hide(); //m_button_extruder_feed->Show(); //m_button_extruder_back->Show(); ShowFilamentTip(false); m_amswin->Layout(); m_amswin->Fit(); Layout(); m_is_none_ams_mode = AMSModel::EXT_AMS; } void AMSControl::EnterGenericAMSMode() { if(m_is_none_ams_mode == AMSModel::GENERIC_AMS) return; m_extruder->no_ams_mode(false); m_amswin->Layout(); m_amswin->Fit(); Layout(); m_is_none_ams_mode = AMSModel::GENERIC_AMS; } void AMSControl::EnterExtraAMSMode() { //m_vams_lib->m_ams_model = m_ext_model; if(m_is_none_ams_mode == AMSModel::AMS_LITE) return; m_panel_prv_left->Hide(); m_simplebook_ams_left->SetSelection(2); m_extruder->no_ams_mode(false); m_amswin->Layout(); m_amswin->Fit(); Layout(); Refresh(true); m_is_none_ams_mode = AMSModel::AMS_LITE; } void AMSControl::PlayRridLoading(wxString amsid, wxString canid) { auto iter = m_ams_item_list.find(amsid.ToStdString()); if (iter != m_ams_item_list.end()) { AmsItem* cans = iter->second; cans->PlayRridLoading(canid); } } void AMSControl::StopRridLoading(wxString amsid, wxString canid) { auto iter = m_ams_item_list.find(amsid.ToStdString()); if (iter != m_ams_item_list.end()) { AmsItem* cans = iter->second; cans->StopRridLoading(canid); } } void AMSControl::msw_rescale() { m_button_ams_setting_normal.msw_rescale(); m_button_ams_setting_hover.msw_rescale(); m_button_ams_setting_press.msw_rescale(); m_button_ams_setting->SetBitmap(m_button_ams_setting_normal.bmp()); m_extruder->msw_rescale(); if (m_button_extruder_feed) m_button_extruder_feed->SetMinSize(wxSize(FromDIP(80), FromDIP(34))); if (m_button_extruder_feed) m_button_extruder_feed->SetMaxSize(wxSize(FromDIP(80), FromDIP(34))); if (m_button_extruder_back) m_button_extruder_back->SetMinSize(wxSize(FromDIP(80), FromDIP(34))); if (m_button_extruder_back) m_button_extruder_back->SetMaxSize(wxSize(FromDIP(80), FromDIP(34))); if (m_button_auto_refill) m_button_auto_refill->SetMinSize(wxSize(FromDIP(80), FromDIP(34))); if (m_button_auto_refill) m_button_auto_refill->SetMaxSize(wxSize(FromDIP(80), FromDIP(34))); if (m_button_ams_setting) m_button_ams_setting->SetMinSize(wxSize(FromDIP(25), FromDIP(24))); for (auto ams_item : m_ams_item_list) { if (ams_item.second){ ams_item.second->msw_rescale(); } } for (auto ams_prv : m_ams_preview_list) { if (ams_prv.second){ ams_prv.second->msw_rescale(); } } for (auto ext_img : m_ext_image_list) { if (ext_img.second) { ext_img.second->msw_rescale(); } } if (m_down_road){ m_down_road->msw_rescale(); } if (m_percent_humidity_dry_popup){ m_percent_humidity_dry_popup->msw_rescale(); } Layout(); Refresh(); } void AMSControl::CreateAms() { auto caninfo0_0 = Caninfo{"def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL}; auto caninfo0_1 = Caninfo{"def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo0_2 = Caninfo{"def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo0_3 = Caninfo{"def_can_3", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_0 = Caninfo{ "def_can_0", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_1 = Caninfo{ "def_can_1", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_2 = Caninfo{ "def_can_2", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_3 = Caninfo{ "def_can_3", (""), *wxWHITE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; AMSinfo ams1 = AMSinfo{"0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0}; AMSinfo ams2 = AMSinfo{"1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo ams3 = AMSinfo{"2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo ams4 = AMSinfo{"3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo ams5 = AMSinfo{ "4", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo ams6 = AMSinfo{ "5", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo ams7 = AMSinfo{ "6", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo ams8 = AMSinfo{ "7", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; std::vector ams_info{ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 }; std::vector::iterator it; //Freeze(); for (it = ams_info.begin(); it != ams_info.end(); it++) { AddAmsPreview(*it, AMSModel::GENERIC_AMS); AddAms(*it); //AddExtraAms(*it); m_ams_info.push_back(*it); } if (m_single_nozzle_no_ams) { m_simplebook_ams_left->Hide(); } else { m_sizer_prv_left->Layout(); m_sizer_prv_right->Layout(); } //Thaw(); } void AMSControl::ClearAms() { m_simplebook_ams_right->DeleteAllPages(); m_simplebook_ams_left->DeleteAllPages(); m_simplebook_ams_right->DestroyChildren(); m_simplebook_ams_left->DestroyChildren(); m_simplebook_ams_right->Layout(); m_simplebook_ams_left->Layout(); m_simplebook_ams_right->Refresh(); m_simplebook_ams_left->Refresh(); for (auto it : m_ams_preview_list) { delete it.second; } m_ams_preview_list.clear(); m_ext_image_list.clear(); m_left_page_index = 0; m_right_page_index = 0; m_ams_item_list.clear(); m_sizer_prv_right->Clear(); m_sizer_prv_left->Clear(); m_item_ids = { {}, {} }; pair_id.clear(); } void AMSControl::CreateAmsDoubleNozzle(const std::string &series_name, const std::string &printer_type) { std::vector single_info_left; std::vector single_info_right; //Freeze(); for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++){ if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM){ ams_info->nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(ams_info->ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(ams_info->ams_id); AddAmsPreview(*ams_info, ams_info->ams_type); AddAms(*ams_info); } else if (ams_info->cans.size() == 1){ if (ams_info->nozzle_id == MAIN_NOZZLE_ID){ single_info_right.push_back(*ams_info); if (single_info_right.size() == 2){ single_info_right[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[0].ams_id); single_info_right[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[1].ams_id); AddAms(single_info_right, series_name, printer_type); AddAmsPreview(single_info_right, AMSPanelPos::RIGHT_PANEL); pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id)); single_info_right.clear(); } } else if (ams_info->nozzle_id == 1){ single_info_left.push_back(*ams_info); if (single_info_left.size() == 2){ single_info_left[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[0].ams_id); single_info_left[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[1].ams_id); AddAms(single_info_left, series_name, printer_type); AddAmsPreview(single_info_left, AMSPanelPos::LEFT_PANEL); pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id)); single_info_left.clear(); } } } } if (m_ext_info.size() <= 1) { BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!"; assert(0); return; } AMSinfo ext_info; for (auto info : m_ext_info){ if (info.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID)){ ext_info = info; single_info_right.push_back(ext_info); break; } } //wait add single_info_right[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[0].ams_id); if (single_info_right.size() == 2){ single_info_right[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_right[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_right[1].ams_id); pair_id.push_back(std::make_pair(single_info_right[0].ams_id, single_info_right[1].ams_id)); } AddAms(single_info_right, series_name, printer_type); AddAmsPreview(single_info_right, AMSPanelPos::RIGHT_PANEL); single_info_right.clear(); for (auto info : m_ext_info) { if (info.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { ext_info = info; single_info_left.push_back(ext_info); break; } } //wait add single_info_left[0].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[0].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[0].ams_id); if (single_info_left.size() == 2){ single_info_left[1].nozzle_id == MAIN_NOZZLE_ID ? m_item_ids[MAIN_NOZZLE_ID].push_back(single_info_left[1].ams_id) : m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info_left[1].ams_id); pair_id.push_back(std::make_pair(single_info_left[0].ams_id, single_info_left[1].ams_id)); } AddAmsPreview(single_info_left, AMSPanelPos::LEFT_PANEL); AddAms(single_info_left, series_name, printer_type); single_info_left.clear(); m_sizer_prv_left->Layout(); m_sizer_prv_right->Layout(); m_simplebook_ams_left->Show(); m_simplebook_ams_right->Show(); if (m_ams_info.size() > 0){ m_panel_prv_left->Show(); m_panel_prv_right->Show(); } else{ m_panel_prv_left->Hide(); m_panel_prv_right->Hide(); } m_simplebook_ams_left->SetSelection(0); m_simplebook_ams_right->SetSelection(0); auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL); auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL); m_down_road->UpdateLeft(m_extder_data.total_extder_count, left_init_mode); m_down_road->UpdateRight(m_extder_data.total_extder_count, right_init_mode); m_extruder->updateNozzleNum(m_extder_data.total_extder_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] : ""; m_current_ams = ""; m_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false, DEPUTY_NOZZLE_ID); m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false, MAIN_NOZZLE_ID); m_amswin->Layout(); m_amswin->Fit(); //Thaw(); } void AMSControl::CreateAmsSingleNozzle(const std::string &series_name, const std::string &printer_type) { std::vectorm_item_nums{0,0}; std::vector single_info; //Freeze(); //add ams data for (auto ams_info = m_ams_info.begin(); ams_info != m_ams_info.end(); ams_info++) { if (ams_info->cans.size() == GENERIC_AMS_SLOT_NUM) { m_item_ids[DEPUTY_NOZZLE_ID].push_back(ams_info->ams_id); AddAmsPreview(*ams_info, ams_info->ams_type); AddAms(*ams_info, AMSPanelPos::LEFT_PANEL); //AddExtraAms(*ams_info); } else if (ams_info->cans.size() == 1) { m_item_ids[DEPUTY_NOZZLE_ID].push_back(ams_info->ams_id); AddAmsPreview(*ams_info, ams_info->ams_type); AddAms(*ams_info, AMSPanelPos::LEFT_PANEL); /*single_info.push_back(*ams_info); 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]++; pair_id.push_back(std::make_pair(single_info[0].ams_id, single_info[1].ams_id)); AddAmsPreview(single_info, AMSPanelPos::LEFT_PANEL); AddAms(single_info, AMSPanelPos::LEFT_PANEL); single_info.clear(); }*/ } } if (single_info.size() > 0){ m_item_ids[DEPUTY_NOZZLE_ID].push_back(single_info[0].ams_id); m_item_nums[DEPUTY_NOZZLE_ID]++; AddAms(single_info, series_name, printer_type, AMSPanelPos::LEFT_PANEL); AddAmsPreview(single_info, AMSPanelPos::LEFT_PANEL); single_info.clear(); } // data ext data if (m_ext_info.size() <= 0){ BOOST_LOG_TRIVIAL(trace) << "vt_slot empty!"; return; } single_info.push_back(m_ext_info[0]); m_item_ids[MAIN_NOZZLE_ID].push_back(single_info[0].ams_id); AddAms(single_info, series_name, printer_type, AMSPanelPos::RIGHT_PANEL); auto left_init_mode = findFirstMode(AMSPanelPos::LEFT_PANEL); auto right_init_mode = findFirstMode(AMSPanelPos::RIGHT_PANEL); m_panel_prv_right->Hide(); m_panel_prv_left->Hide(); if (m_ams_info.size() > 0){ m_simplebook_ams_left->Show(); m_simplebook_ams_right->Show(); m_simplebook_ams_left->SetSelection(0); m_simplebook_ams_right->SetSelection(0); if (m_ams_info.size() > 1){ m_sizer_prv_right->Layout(); m_panel_prv_right->Show(); } m_down_road->UpdateLeft(1, left_init_mode); m_down_road->UpdateRight(1, right_init_mode); } else { m_panel_prv_left->Hide(); m_panel_prv_right->Hide(); m_simplebook_ams_left->Hide(); m_simplebook_ams_right->Show(); m_simplebook_ams_right->SetSelection(0); m_down_road->UpdateLeft(1, left_init_mode); m_down_road->UpdateRight(1, right_init_mode); } 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] : ""; m_current_ams = ""; m_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->updateNozzleNum(1); m_extruder->OnAmsLoading(false, MAIN_NOZZLE_ID); m_amswin->Layout(); m_amswin->Fit(); //Refresh(); //Thaw(); } void AMSControl::Reset() { m_ams_info.clear(); m_ext_info.clear(); m_dev_id.clear(); ClearAms(); Layout(); } void AMSControl::show_noams_mode() { EnterGenericAMSMode(); } void AMSControl::show_auto_refill(bool show) { if (m_button_auto_refill->IsShown() == show) { return; } m_button_auto_refill->Show(show); m_amswin->Layout(); m_amswin->Fit(); } void AMSControl::enable_ams_setting(bool en) { m_button_ams_setting->Enable(en); } void AMSControl::show_vams_kn_value(bool show) { //m_vams_lib->show_kn_value(show); } 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 }; auto caninfo0_2 = Caninfo{ "2", (""), *wxBLUE, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo0_3 = Caninfo{ "3", (""), *wxYELLOW, AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_0 = Caninfo{ "0", (""), wxColour(255, 255, 0), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_1 = Caninfo{ "1", (""), wxColour(255, 0, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_2 = Caninfo{ "2", (""), wxColour(0, 255, 255), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; auto caninfo1_3 = Caninfo{ "3", (""), wxColour(200, 80, 150), AMSCanType::AMS_CAN_TYPE_VIRTUAL }; AMSinfo ams1 = AMSinfo{ "0", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo ams2 = AMSinfo{ "1", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo ams3 = AMSinfo{ "2", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo ams4 = AMSinfo{ "3", std::vector{caninfo0_0, caninfo0_1, caninfo0_2, caninfo0_3}, 0 }; AMSinfo singleams1 = AMSinfo{ "0", std::vector{caninfo0_0}, 0 }; AMSinfo singleams2 = AMSinfo{ "1", std::vector{caninfo0_0}, 0 }; AMSinfo singleams3 = AMSinfo{ "2", std::vector{caninfo0_0}, 0 }; AMSinfo singleams4 = AMSinfo{ "3", std::vector{caninfo0_0}, 0 }; singleams1.ams_type = AMSModel::N3S_AMS; singleams2.ams_type = AMSModel::N3S_AMS; singleams3.ams_type = AMSModel::N3S_AMS; singleams4.ams_type = AMSModel::N3S_AMS; AMSinfo ams5 = AMSinfo{ "4", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo ams6 = AMSinfo{ "5", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo ams7 = AMSinfo{ "6", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo ams8 = AMSinfo{ "7", std::vector{caninfo1_0, caninfo1_1, caninfo1_2, caninfo1_3}, 1 }; AMSinfo singleams5 = AMSinfo{ "4", std::vector{caninfo1_0}, 1 }; AMSinfo singleams6 = AMSinfo{ "5", std::vector{caninfo1_0}, 1 }; AMSinfo singleams7 = AMSinfo{ "6", std::vector{caninfo1_0}, 1 }; AMSinfo singleams8 = AMSinfo{ "7", std::vector{caninfo1_0}, 1 }; AMSinfo singleams9 = AMSinfo{ "8", std::vector{caninfo1_0}, 1 }; singleams5.ams_type = AMSModel::N3S_AMS; singleams6.ams_type = AMSModel::N3S_AMS; singleams7.ams_type = AMSModel::N3S_AMS; singleams8.ams_type = AMSModel::N3S_AMS; singleams9.ams_type = AMSModel::N3S_AMS; ams3.current_can_id = "2"; ams3.current_step = AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2; ams5.current_can_id = "2"; ams5.current_step = AMSPassRoadSTEP::AMS_ROAD_STEP_COMBO_LOAD_STEP2; std::vectorgeneric_ams = { ams1, ams2, ams3, ams4, ams5, ams6, ams7, ams8 }; std::vectorsingle_ams = { singleams1, singleams2, singleams3, singleams4, singleams5, singleams6, singleams7, singleams8, singleams9 }; std::vectorams_info = { ams1, singleams2, ams3, singleams4, ams5, singleams6, ams7, singleams8, singleams9 }; return ams_info; } void AMSControl::UpdateAms(const std::string &series_name, const std::string &printer_type, std::vector ams_info, std::vector ext_info, ExtderData data, std::string dev_id, bool is_reset, bool test) { if (!test){ // update item bool fresh = false; // basic check if (m_ams_info.size() == ams_info.size() && m_extder_data.total_extder_count == data.total_extder_count && m_dev_id == dev_id && m_ext_info.size() == ext_info.size()) { for (int i = 0; i < m_ams_info.size(); i++){ if (m_ams_info[i].ams_id != ams_info[i].ams_id){ fresh = true; } if (m_ams_info[i].nozzle_id != ams_info[i].nozzle_id) { fresh = true; } } } else{ fresh = true; } m_ams_info.clear(); m_ams_info = ams_info; m_ext_info.clear(); m_ext_info = ext_info; m_extder_data = data; m_dev_id = dev_id; if (fresh){ ClearAms(); if (m_extder_data.total_extder_count >= 2){ CreateAmsDoubleNozzle(series_name, printer_type); }else{ CreateAmsSingleNozzle(series_name, printer_type); } SetSize(wxSize(FromDIP(578), -1)); SetMinSize(wxSize(FromDIP(578), -1)); Layout(); } // update cans for (auto ams_item : m_ams_item_list) { if (ams_item.second == nullptr){ continue; } std::string ams_id = ams_item.second->get_ams_id(); AmsItem* cans = ams_item.second; if (cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_MAIN_ID) || cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { for (auto ifo : m_ext_info) { if (ifo.ams_id == ams_id) { cans->Update(ifo); cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); } } } else{ for (auto ifo : m_ams_info) { if (ifo.ams_id == ams_id) { cans->Update(ifo); cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); } } } } for (auto ams_prv : m_ams_preview_list) { std::string id = ams_prv.second->get_ams_id(); auto item = m_ams_item_list.find(id); if (item != m_ams_item_list.end()) { ams_prv.second->Update(item->second->get_ams_info()); } } /*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); } //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 // m_ams_info.clear(); // m_ams_info = ams_info; // m_ext_info.clear(); // m_ext_info.push_back(ext_info[0]); // m_ext_info.push_back(ext_info[0]); // m_ext_info[0].ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); // 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_extder_data = data; // if (fresh){ // ClearAms(); // if (m_extder_data.total_extder_count >= 2) { // CreateAmsDoubleNozzle(); // } // else { // CreateAmsSingleNozzle(); // } // SetSize(wxSize(FromDIP(578), -1)); // SetMinSize(wxSize(FromDIP(578), -1)); // Layout(); // } // //Thaw(); // // update cans // for (auto ams_item : m_ams_item_list) { // std::string ams_id = ams_item.first; // AmsItem* cans = ams_item.second; // if (atoi(cans->get_ams_id().c_str()) >= VIRTUAL_TRAY_DEPUTY_ID) { // for (auto ifo : m_ext_info) { // if (ifo.ams_id == ams_id) { // cans->Update(ifo); // cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); // } // } // } // else { // for (auto ifo : m_ams_info) { // if (ifo.ams_id == ams_id) { // cans->Update(ifo); // cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); // } // } // } // } //} /*update humidity popup*/ if (m_percent_humidity_dry_popup->IsShown()) { string target_id = m_percent_humidity_dry_popup->get_owner_ams_id(); for (const auto& the_info : ams_info) { if (target_id == the_info.ams_id) { uiAmsHumidityInfo humidity_info; humidity_info.ams_id = the_info.ams_id; humidity_info.humidity_level = the_info.ams_humidity; humidity_info.humidity_percent = the_info.humidity_raw; humidity_info.left_dry_time = the_info.left_dray_time; humidity_info.current_temperature = the_info.current_temperature; m_percent_humidity_dry_popup->Update(&humidity_info); break; } } } /*update ams extruder*/ if (m_extruder->updateNozzleNum(m_extder_data.total_extder_count, series_name)) { m_amswin->Layout(); } } void AMSControl::AddAmsPreview(AMSinfo info, AMSModel type) { AMSPreview *ams_prv = nullptr; if (info.nozzle_id == MAIN_NOZZLE_ID) { ams_prv = new AMSPreview(m_panel_prv_right, wxID_ANY, info, type); m_sizer_prv_right->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); } else if (info.nozzle_id == DEPUTY_NOZZLE_ID) { ams_prv = new AMSPreview(m_panel_prv_left, wxID_ANY, info, type); m_sizer_prv_left->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); } if (ams_prv){ ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent &e) { SwitchAms(ams_prv->get_ams_id()); e.Skip(); }); m_ams_preview_list[info.ams_id] = ams_prv; } } void AMSControl::createAms(wxSimplebook* parent, int& idx, AMSinfo info, AMSPanelPos pos) { auto ams_item = new AmsItem(parent, info, info.ams_type, pos); parent->InsertPage(idx, ams_item, wxEmptyString, true); ams_item->set_selection(idx); idx++; m_ams_item_list[info.ams_id] = ams_item; } AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) { auto init_mode = AMSRoadShowMode::AMS_ROAD_MODE_NONE; 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]; } else if (pos == AMSPanelPos::RIGHT_PANEL && m_item_ids[MAIN_NOZZLE_ID].size() > 0){ ams_id = m_item_ids[MAIN_NOZZLE_ID][0]; } auto item = m_ams_item_list.find(ams_id); if (ams_id.empty() || item == m_ams_item_list.end()) return init_mode; if (item->second->get_can_count() == GENERIC_AMS_SLOT_NUM) { if (item->second->get_ams_model() == AMSModel::AMS_LITE) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; return AMSRoadShowMode::AMS_ROAD_MODE_FOUR; } else{ for (auto ids : pair_id){ if (ids.first == ams_id || ids.second == ams_id){ return AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; } } if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; if (item->second->get_ams_model() == AMSModel::N3S_AMS) return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S; return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; } } void AMSControl::createAmsPanel(wxSimplebook *parent, int &idx, std::vector infos, const std::string &series_name, const std::string &printer_type, AMSPanelPos pos, int total_ext_num) { if (infos.size() <= 0) return; wxPanel* book_panel = new wxPanel(parent); wxBoxSizer* book_sizer = new wxBoxSizer(wxHORIZONTAL); book_panel->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); book_panel->SetSize(AMS_PANEL_SIZE); book_panel->SetMinSize(AMS_PANEL_SIZE); AmsItem* ams1 = nullptr, * ams2 = nullptr; ams1 = new AmsItem(book_panel, infos[0], infos[0].ams_type, pos); if (ams1->get_ext_image()) { ams1->get_ext_image()->setTotalExtNum(series_name, printer_type, total_ext_num); } if (infos.size() == MAX_AMS_NUM_IN_PANEL) { //n3s and ? in a panel ams2 = new AmsItem(book_panel, infos[1], infos[1].ams_type, pos); if (ams2->get_ext_image()) { ams2->get_ext_image()->setTotalExtNum(series_name, printer_type, total_ext_num); } if (pos == AMSPanelPos::LEFT_PANEL) { book_sizer->Add(ams1, 0, wxLEFT, FromDIP(4)); book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30)); } else { book_sizer->Add(ams1, 0, wxLEFT, FromDIP(72)); book_sizer->Add(ams2, 0, wxLEFT, FromDIP(30)); } } else { //only an ext in a panel if (ams1->get_ext_image()) { ams1->get_ext_image()->setShowAmsExt(false);} if (ams1->get_ams_model() == AMSModel::EXT_AMS) { if (ams1->get_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_extder_data); book_sizer->Add(ams1, 0, wxLEFT, FromDIP(30)); book_sizer->Add(ext_image, 0, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(30)); ext_image->setTotalExtNum(series_name, printer_type, total_ext_num); m_ext_image_list[infos[0].ams_id] = ext_image; } } } book_panel->SetSizer(book_sizer); book_panel->Layout(); book_panel->Fit(); parent->InsertPage(idx, book_panel, wxEmptyString, true); ams1->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); ams1->set_selection(idx); m_ams_item_list[infos[0].ams_id] = ams1; if (ams2) { ams2->SetBackgroundColour(StateColor::darkModeColorFor(AMS_CONTROL_DEF_LIB_BK_COLOUR)); ams2->set_selection(idx); m_ams_item_list[infos[1].ams_id] = ams2; } idx++; } void AMSControl::AddAms(AMSinfo info, AMSPanelPos pos) { if (m_extder_data.total_extder_count > 1){ if (info.nozzle_id == MAIN_NOZZLE_ID){ createAms(m_simplebook_ams_right, m_right_page_index, info, AMSPanelPos::RIGHT_PANEL); } else if (info.nozzle_id == DEPUTY_NOZZLE_ID){ createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL); } } else if (m_extder_data.total_extder_count == 1){ createAms(m_simplebook_ams_left, m_left_page_index, info, AMSPanelPos::LEFT_PANEL); } m_simplebook_ams_left->Layout(); m_simplebook_ams_right->Layout(); m_simplebook_ams_left->Refresh(); m_simplebook_ams_right->Refresh(); } //void AMSControl::AddExtraAms(AMSinfo info) //{ // auto ams_item = new AmsItem(m_simplebook_extra_cans_left, info, AMSModel::EXTRA_AMS); // m_ams_item_list[info.ams_id] = ams_item; // // if (info.nozzle_id == 1) // { // m_simplebook_extra_cans_left->AddPage(ams_item, wxEmptyString, false); // ams_item->m_selection = m_simplebook_extra_cans_left->GetPageCount() - 1; // } // else if (info.nozzle_id == 0) // { // m_simplebook_extra_cans_right->AddPage(ams_item, wxEmptyString, false); // ams_item->m_selection = m_simplebook_extra_cans_right->GetPageCount() - 1; // } // //} void AMSControl::AddAms(std::vector single_info, const std::string &series_name, const std::string &printer_type, AMSPanelPos pos) { if (single_info.size() <= 0){ return; } if (m_extder_data.total_extder_count == 2) { if (single_info[0].nozzle_id == MAIN_NOZZLE_ID) { createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, series_name, printer_type, AMSPanelPos::RIGHT_PANEL, m_extder_data.total_extder_count); } else if (single_info[0].nozzle_id == DEPUTY_NOZZLE_ID) { createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, series_name, printer_type, AMSPanelPos::LEFT_PANEL, m_extder_data.total_extder_count); } } else if (m_extder_data.total_extder_count == 1) { if (pos == AMSPanelPos::RIGHT_PANEL) { createAmsPanel(m_simplebook_ams_right, m_right_page_index, single_info, series_name, printer_type, AMSPanelPos::RIGHT_PANEL, m_extder_data.total_extder_count); } else { createAmsPanel(m_simplebook_ams_left, m_left_page_index, single_info, series_name, printer_type, AMSPanelPos::LEFT_PANEL, m_extder_data.total_extder_count); } } m_simplebook_ams_left->Layout(); m_simplebook_ams_right->Layout(); m_simplebook_ams_left->Refresh(); m_simplebook_ams_right->Refresh(); } //void AMSControl::AddExtAms(int ams_id) { // if (m_ams_item_list.find(std::to_string(ams_id)) != m_ams_item_list.end()) // { // //mode = AMSModel::EXTRA_AMS; // AmsItem* ams_item; // AMSinfo ext_info; // // if (ams_id == VIRTUAL_TRAY_MAIN_ID) // { // ext_info.ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); // ext_info.nozzle_id = 0; // ams_item = new AmsItem(m_simplebook_ams_right, ext_info, AMSModel::EXTRA_AMS); // m_simplebook_ams_right->AddPage(ams_item, wxEmptyString, false); // ams_item->m_selection = m_simplebook_ams_right->GetPageCount() - 1; // } // else if (ams_id == VIRTUAL_TRAY_DEPUTY_ID) // { // ext_info.ams_id = std::to_string(VIRTUAL_TRAY_DEPUTY_ID); // ext_info.nozzle_id = 1; // ams_item = new AmsItem(m_simplebook_ams_left, ext_info, AMSModel::EXTRA_AMS); // m_simplebook_ams_left->AddPage(ams_item, wxEmptyString, false); // ams_item->m_selection = m_simplebook_ams_left->GetPageCount() - 1; // } // m_ams_generic_item_list[std::to_string(ams_id)] = ams_item; // } //} void AMSControl::AddAmsPreview(std::vectorsingle_info, AMSPanelPos pos) { if (single_info.size() <= 0) return; AMSPreview* ams_prv = nullptr; AMSPreview* ams_prv2 = nullptr; if (pos == AMSPanelPos::RIGHT_PANEL){ ams_prv = new AMSPreview(m_panel_prv_right, wxID_ANY, single_info[0], single_info[0].ams_type); m_sizer_prv_right->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); if (single_info.size() == 2) { ams_prv2 = new AMSPreview(m_panel_prv_right, wxID_ANY, single_info[1], single_info[1].ams_type); m_sizer_prv_right->Add(ams_prv2, 0, wxALIGN_CENTER | wxLEFT, 0); } } else { ams_prv = new AMSPreview(m_panel_prv_left, wxID_ANY, single_info[0], single_info[0].ams_type); m_sizer_prv_left->Add(ams_prv, 0, wxALIGN_CENTER | wxLEFT, FromDIP(6)); if (single_info.size() == 2) { ams_prv2 = new AMSPreview(m_panel_prv_left, wxID_ANY, single_info[1], single_info[1].ams_type); m_sizer_prv_left->Add(ams_prv2, 0, wxALIGN_CENTER | wxLEFT, 0); } } if (ams_prv) { ams_prv->Bind(wxEVT_LEFT_DOWN, [this, ams_prv](wxMouseEvent& e) { SwitchAms(ams_prv->get_ams_id()); e.Skip(); }); m_ams_preview_list[single_info[0].ams_id] = ams_prv; } if (ams_prv2) { ams_prv2->Bind(wxEVT_LEFT_DOWN, [this, ams_prv2](wxMouseEvent& e) { SwitchAms(ams_prv2->get_ams_id()); e.Skip(); }); m_ams_preview_list[single_info[1].ams_id] = ams_prv2; } } void AMSControl::SwitchAms(std::string ams_id) { if(ams_id == m_current_show_ams_left || ams_id == m_current_show_ams_right){return;} bool is_in_right = IsAmsInRightPanel(ams_id); if (is_in_right){ m_current_show_ams_right = ams_id; m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } else{ m_current_show_ams_left = ams_id; m_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } for (auto prv_it : m_ams_preview_list) { AMSPreview* prv = prv_it.second; if (prv->get_ams_id() == m_current_show_ams_left || prv->get_ams_id() == m_current_show_ams_right) { prv->OnSelected(); m_current_select = ams_id; bool ready_selected = false; for (auto item_it : m_ams_item_list) { AmsItem* item = item_it.second; if (item->get_ams_id() == ams_id) { for (auto lib_it : item->get_can_lib_list()) { AMSLib* lib = lib_it.second; if (lib->is_selected()) { ready_selected = true; } } } } if (is_in_right){ m_current_show_ams_right = ams_id; } else{ m_current_show_ams_left = ams_id; } } else { prv->UnSelected(); } } for (auto ams_item : m_ams_item_list) { AmsItem* item = ams_item.second; if (item->get_ams_id() == ams_id) { auto ids = item->get_panel_pos() == AMSPanelPos::LEFT_PANEL ? m_item_ids[DEPUTY_NOZZLE_ID] : m_item_ids[MAIN_NOZZLE_ID]; auto pos = item->get_panel_pos(); for (auto id : ids) { if (id == item->get_ams_id()) { pos == AMSPanelPos::LEFT_PANEL ? m_simplebook_ams_left->SetSelection(item->get_selection()) : m_simplebook_ams_right->SetSelection(item->get_selection()); if (item->get_can_count() == GENERIC_AMS_SLOT_NUM) { if (item->get_ams_model() == AMSModel::AMS_LITE) { if (pos == AMSPanelPos::LEFT_PANEL) { m_down_road->UpdateLeft(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); } else { m_down_road->UpdateRight(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE); } } else { if (pos == AMSPanelPos::LEFT_PANEL) { m_down_road->UpdateLeft(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } else { m_down_road->UpdateRight(m_extder_data.total_extder_count, AMSRoadShowMode::AMS_ROAD_MODE_FOUR); } } } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; if (item->get_ams_model() == AMSModel::N3S_AMS) mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S; for (auto it : pair_id) { if (it.first == ams_id || it.second == ams_id) { mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; break; } } pos == AMSPanelPos::LEFT_PANEL ? m_down_road->UpdateLeft(m_extder_data.total_extder_count, mode) : m_down_road->UpdateRight(m_extder_data.total_extder_count, mode); if (pos == AMSPanelPos::LEFT_PANEL) { m_down_road->UpdatePassRoad(AMSPanelPos::LEFT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } else { m_down_road->UpdatePassRoad(AMSPanelPos::RIGHT_PANEL, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); } } } } } } post_event(SimpleEvent(EVT_AMS_SWITCH)); } void AMSControl::ShowFilamentTip(bool hasams) { //m_simplebook_right->SetSelection(0); if (hasams) { m_tip_right_top->Show(); m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.")); } else { // m_tip_load_info->SetLabelText(_L("Before loading, please make sure the filament is pushed into toolhead.")); m_tip_right_top->Hide(); m_tip_load_info->SetLabelText(wxEmptyString); } m_tip_load_info->SetMinSize(AMS_STEP_SIZE); m_tip_load_info->Wrap(AMS_STEP_SIZE.x - FromDIP(5)); m_sizer_right_tip->Layout(); } bool AMSControl::Enable(bool enable) { for (auto prv_it : m_ams_preview_list) { AMSPreview* prv = prv_it.second; prv->Enable(enable); } for (auto item_it : m_ams_item_list) { AmsItem* item = item_it.second; item->Enable(enable); } m_button_extruder_feed->Enable(enable); m_button_extruder_back->Enable(enable); m_button_auto_refill->Enable(enable); m_button_ams_setting->Enable(enable); m_filament_load_step->Enable(enable); return wxWindow::Enable(enable); } void AMSControl::SetExtruder(bool on_off, int nozzle_id, std::string ams_id, std::string slot_id) { AmsItem *item = nullptr; if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { item = m_ams_item_list[ams_id]; } if (on_off && item) { auto col = item->GetTagColr(slot_id); m_extruder->OnAmsLoading(true, nozzle_id, col); } else { m_extruder->OnAmsLoading(false, nozzle_id); } } void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadType type, AMSPassRoadSTEP step) { AmsItem* ams = nullptr; auto amsit = m_ams_item_list.find(ams_id); bool in_same_page = false; if (amsit != m_ams_item_list.end()) {ams = amsit->second;} else {return;} if (ams == nullptr) return; m_last_ams_id = ams_id; m_last_tray_id = canid; int can_index = atoi(canid.c_str()); std::vector cur_left_ams; std::vector cur_right_ams; std::string ams_id_left = GetCurentShowAms(AMSPanelPos::LEFT_PANEL); std::string ams_id_right = GetCurentShowAms(AMSPanelPos::RIGHT_PANEL); for (auto it : pair_id) { if ((ams_id_left == it.first || ams_id_left == it.second)) { cur_left_ams.push_back(it.first); cur_left_ams.push_back(it.second); } else if ((ams_id_right == it.first || ams_id_right == it.second)) { cur_right_ams.push_back(it.first); cur_right_ams.push_back(it.second); } } auto left = !IsAmsInRightPanel(ams_id); auto length = -1; auto model = AMSModel::AMS_LITE; auto in_pair = false; if (std::find(cur_left_ams.begin(), cur_left_ams.end(), ams_id) != cur_left_ams.end()) { in_same_page = true; } if (std::find(cur_right_ams.begin(), cur_right_ams.end(), ams_id) != cur_right_ams.end()) { in_same_page = true; } //Set path length in different case model = ams->get_ams_model(); if (ams->get_can_count() == GENERIC_AMS_SLOT_NUM) { length = left ? 129 : 145; } else if (ams->get_can_count() == 1) { for (auto it : pair_id){ if (it.first == ams_id){ length = left ? 218 : 124; in_pair = true; break; } else if (it.second == ams_id){ length = left ? 124 : 232; in_pair = true; break; } } if (!in_pair && model == N3S_AMS) { length = left ? 129 : 232; } } if (model == AMSModel::AMS_LITE){ length = left ? 145 : 45; } if (model == EXT_AMS && ams->get_ext_type() == AMSModelOriginType::LITE_EXT) { if (m_ams_info.size() == 0 && m_ext_info.size() == 1) { length = 13; } else { length = 145; } } if (model == EXT_AMS && ams->get_ext_type() == AMSModelOriginType::GENERIC_EXT) { if (m_ams_info.size() == 0 && m_ext_info.size() == 1) { left = true; length = 50; } else { /*check in pair*/ if (in_pair) { length = left ? 110 : 232; } else { length = left ? 192 : 82; } } } for (auto i = 0; i < m_ams_info.size(); i++) { if (m_ams_info[i].ams_id == ams_id) { m_ams_info[i].current_step = step; 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; } } AMSinfo info; if (m_ams_item_list.find(ams_id) != m_ams_item_list.end()) { info = m_ams_item_list[ams_id]->get_ams_info(); } else{ return; } if (can_index >= 0 && can_index < info.cans.size()) { m_down_road->SetPassRoadColour(left, info.cans[can_index].material_colour); } AMSPanelPos pos = left ? AMSPanelPos::LEFT_PANEL : AMSPanelPos::RIGHT_PANEL; 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 || in_same_page) { m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_NONE); m_extruder->OnAmsLoading(false, ams->get_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 || in_same_page) { m_down_road->UpdatePassRoad(pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_1); m_extruder->OnAmsLoading(false, ams->get_nozzle_id()); } else { m_down_road->UpdatePassRoad(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 || in_same_page) { m_down_road->UpdatePassRoad(pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_2); m_extruder->OnAmsLoading(true, ams->get_nozzle_id(), ams->GetTagColr(canid)); } else { m_down_road->UpdatePassRoad(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 || in_same_page) { m_down_road->UpdatePassRoad(pos, length, AMSPassRoadSTEP::AMS_ROAD_STEP_3); m_extruder->OnAmsLoading(true, ams->get_nozzle_id(), ams->GetTagColr(canid)); } else { m_down_road->UpdatePassRoad(pos, -1, AMSPassRoadSTEP::AMS_ROAD_STEP_3); } } } 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; } } post_event(SimpleEvent(EVT_AMS_LOAD)); } 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; } } post_event(SimpleEvent(EVT_AMS_EXTRUSION_CALI)); } 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; } } post_event(SimpleEvent(EVT_AMS_UNLOAD)); } void AMSControl::auto_refill(wxCommandEvent& event) { post_event(SimpleEvent(EVT_AMS_FILAMENT_BACKUP)); } 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; } } post_event(SimpleEvent(EVT_AMS_SETTINGS)); } void AMSControl::parse_object(MachineObject* obj) { if (!obj || obj->amsList.size() == 0) { return; } m_ams_info.clear(); for (auto ams : obj->amsList) { AMSinfo info; info.parse_ams_info(obj, ams.second); m_ams_info.push_back(info); } } void AMSControl::on_clibration_again_click(wxMouseEvent &event) { post_event(SimpleEvent(EVT_AMS_CLIBRATION_AGAIN)); } void AMSControl::on_clibration_cancel_click(wxMouseEvent &event) { post_event(SimpleEvent(EVT_AMS_CLIBRATION_CANCEL)); } void AMSControl::post_event(wxEvent &&event) { event.SetEventObject(m_parent); wxPostEvent(m_parent, event); } }} // namespace Slic3r::GUI