From 8863631c924b4885a894e10c22a4fa75705c16aa Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Fri, 5 Sep 2025 11:14:34 +0800 Subject: [PATCH] FIX: filament loading steps jira: [STUDIO-14428] Change-Id: I68612346ef9cb50e302323daa47421c22a87be97 (cherry picked from commit 9fb4b9b6a3a16b08d9dc52a4d6dbc15044275dcf) --- .../GUI/DeviceCore/DevExtruderSystem.cpp | 7 +- src/slic3r/GUI/DeviceManager.cpp | 4 +- src/slic3r/GUI/DeviceManager.hpp | 2 +- src/slic3r/GUI/StatusPanel.cpp | 262 +++++++++--------- src/slic3r/GUI/StatusPanel.hpp | 3 + src/slic3r/GUI/Widgets/FilamentLoad.cpp | 3 + 6 files changed, 151 insertions(+), 130 deletions(-) diff --git a/src/slic3r/GUI/DeviceCore/DevExtruderSystem.cpp b/src/slic3r/GUI/DeviceCore/DevExtruderSystem.cpp index 1a713204ae..6c96d85496 100644 --- a/src/slic3r/GUI/DeviceCore/DevExtruderSystem.cpp +++ b/src/slic3r/GUI/DeviceCore/DevExtruderSystem.cpp @@ -166,8 +166,11 @@ namespace Slic3r if (!tray_tar.empty()) { int tray_tar_int = atoi(tray_tar.c_str()); - if (tray_tar_int == VIRTUAL_TRAY_MAIN_ID || tray_tar_int == VIRTUAL_TRAY_DEPUTY_ID) - { + if (tray_tar_int == VIRTUAL_TRAY_MAIN_ID) /*255 means unloading*/ { + system->m_extders[MAIN_EXTRUDER_ID].m_star.ams_id = ""; + system->m_extders[MAIN_EXTRUDER_ID].m_star.slot_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); + } + else if (tray_tar_int == VIRTUAL_TRAY_DEPUTY_ID) /*254 means loading ext spool*/ { system->m_extders[MAIN_EXTRUDER_ID].m_star.ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); system->m_extders[MAIN_EXTRUDER_ID].m_star.slot_id = "0"; } diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index be83651974..b2efdda02b 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -5386,9 +5386,9 @@ Slic3r::DevPrintingSpeedLevel MachineObject::GetPrintingSpeedLevel() const return m_print_options->GetPrintingSpeedLevel(); } -bool MachineObject::is_ams_unload() +bool MachineObject::is_target_slot_unload() const { - return m_extder_system->GetTargetAmsId().compare("255") == 0; + return m_extder_system->GetTargetSlotId().compare("255") == 0; } Slic3r::DevAms* MachineObject::get_curr_Ams() diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index d6771f125f..ea54d72cbb 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -281,7 +281,7 @@ public: // parse amsStatusMain and ams_status_sub void _parse_ams_status(int ams_status); - bool is_ams_unload(); + bool is_target_slot_unload() const; bool can_unload_filament(); bool is_support_amx_ext_mix_mapping() const { return true;} diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 0874e63db9..3b61db735a 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2007,8 +2007,8 @@ wxBoxSizer* StatusBasePanel::create_filament_group(wxWindow* parent) auto sizer_scale_panel = new wxBoxSizer(wxHORIZONTAL); m_scale_panel = new wxPanel(parent); - m_scale_panel->SetMinSize(wxSize(FromDIP(586), FromDIP(50))); - m_scale_panel->SetMaxSize(wxSize(FromDIP(586), FromDIP(50))); + m_scale_panel->SetMinSize(wxSize(FromDIP(586), FromDIP(40))); + m_scale_panel->SetMaxSize(wxSize(FromDIP(586), FromDIP(40))); m_scale_panel->SetBackgroundColour(*wxWHITE); auto m_title_filament_loading = new Label(m_scale_panel, _L("Filament loading...")); @@ -2057,7 +2057,7 @@ wxBoxSizer* StatusBasePanel::create_filament_group(wxWindow* parent) wxBoxSizer *steps_sizer = new wxBoxSizer(wxHORIZONTAL); steps_sizer->Add(m_filament_step, 0, wxALIGN_LEFT, FromDIP(20)); steps_sizer->Add(m_filament_load_img, 0, wxALIGN_TOP, FromDIP(30)); - steps_sizer->AddSpacer(FromDIP(50)); + steps_sizer->AddStretchSpacer(); StateColor btn_bd_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); StateColor btn_text_white(std::pair(wxColour(255, 255, 254), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); @@ -2079,15 +2079,14 @@ wxBoxSizer* StatusBasePanel::create_filament_group(wxWindow* parent) }); - sizer_box->Add(steps_sizer, 0, wxALIGN_CENTER | wxTOP, FromDIP(10)); - sizer_box->Add(0, 0, 0, wxTOP, FromDIP(5)); + sizer_box->Add(steps_sizer, 0, wxEXPAND | wxALIGN_LEFT | wxTOP, FromDIP(5)); sizer_box->Add(m_button_retry, 0, wxLEFT, FromDIP(28)); - sizer_box->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_box->Add(0, 0, 0, wxTOP, FromDIP(5)); m_filament_load_box->SetBackgroundColour(*wxWHITE); m_filament_load_box->Layout(); m_filament_load_box->Fit(); m_filament_load_box->Hide(); - sizer->Add(m_scale_panel, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 0); + sizer->Add(m_scale_panel, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(5)); sizer->Add(m_filament_load_box, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 0); return sizer; } @@ -2174,19 +2173,24 @@ void StatusBasePanel::show_ams_group(bool show) void StatusBasePanel::show_filament_load_group(bool show) { - if (m_show_filament_group != show ) { - if (!show) { - m_filament_load_box->Show(show); - m_img_filament_loading->SetBitmap(create_scaled_bitmap("filament_load_fold", this, 24)); - } + if (m_scale_panel->IsShown() != show) { m_scale_panel->Show(show); + if (!show) { + m_img_filament_loading->SetBitmap(create_scaled_bitmap("filament_load_fold", this, 24)); + m_img_filament_loading->Refresh(); + } + + // m_scale_panel control the display of m_filament_load_box + if (!show && m_filament_load_box->IsShown()) { + m_filament_load_box->Show(false); + } auto cur_ext = obj->GetExtderSystem()->GetCurrentExtder(); m_filament_step->SetupSteps(cur_ext ? cur_ext->HasFilamentInExt() : false); - m_show_filament_group = show; Layout(); Fit(); + wxGetApp().mainframe->m_monitor->get_status_panel()->Layout(); wxGetApp().mainframe->m_monitor->Layout(); } @@ -3364,119 +3368,8 @@ void StatusPanel::update_ams(MachineObject *obj) m_ams_control->SetExtruder(ext->HasFilamentInExt(), DEPUTY_EXTRUDER_ID, ext->GetSlotNow().ams_id, ext->GetSlotNow().slot_id); } - bool ams_loading_state = false; - auto ams_status_sub = obj->ams_status_sub; + update_filament_loading_panel(obj); - if (obj->is_enable_np) { - if (obj->GetExtderSystem()->IsBusyLoading()) { - ams_loading_state = true; - } - } else if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { - ams_loading_state = true; - } - - if (ams_loading_state) { - update_load_with_temp(); - - const std::string& cur_ams_id = obj->GetExtderSystem()->GetCurrentAmsId(); - const std::string& cur_tray_id = obj->GetExtderSystem()->GetCurrentSlotId(); - if (!cur_ams_id.empty() && !cur_tray_id.empty()) - { - m_filament_step->updateID(std::atoi(cur_ams_id.c_str()), std::atoi(cur_tray_id.c_str())); - } - - auto loading_ext = obj->GetExtderSystem()->GetLoadingExtder(); - auto tar = loading_ext ? loading_ext->GetSlotTarget() : DevAmsSlotInfo(); - bool busy_for_vt_loading = (tar.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || tar.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)); - if (busy_for_vt_loading) { - // wait to heat hotend - if (ams_status_sub == 0x02) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_VT_LOAD); - } else if (ams_status_sub == 0x05) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD); - } else if (ams_status_sub == 0x06) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CONFIRM_EXTRUDED, FilamentStepType::STEP_TYPE_VT_LOAD); - } else if (ams_status_sub == 0x07) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_VT_LOAD); - ams_loading_state = false; - } - } else { - // wait to heat hotend - if (ams_status_sub == 0x02) { - if (!obj->is_ams_unload()) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x03) { - if (!obj->is_ams_unload()) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x04) { - if (!obj->is_ams_unload()) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x05) { - if (!obj->is_ams_unload()) { - if (m_is_load_with_temp) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } - - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x06) { - if (!obj->is_ams_unload()) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x07) { - if (!obj->is_ams_unload()) { - if (m_is_load_with_temp) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); - } - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x08) { - if (!obj->is_ams_unload()) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else if (ams_status_sub == 0x09) { - //just wait - } else if (ams_status_sub == 0x0B) { - if (!obj->is_ams_unload()) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_LOAD); - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_UNLOAD); - } - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_UNLOAD); - ams_loading_state = false; - } - } - } else if (obj->ams_status_main == AMS_STATUS_MAIN_ASSIST) { - m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD); - ams_loading_state = false; - } else { - m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD); - ams_loading_state = false; - } - - show_filament_load_group(ams_loading_state); const auto& amslist = obj->GetFilaSystem()->GetAmsList(); for (auto ams_it = amslist.begin(); ams_it != amslist.end(); ams_it++) { @@ -5365,6 +5258,125 @@ void StatusPanel::msw_rescale() Refresh(); } +void StatusPanel::update_filament_loading_panel(MachineObject* obj) +{ + if (!obj) { + show_filament_load_group(false); + return; + } + + bool ams_loading_state = false; + auto ams_status_sub = obj->ams_status_sub; + + if (obj->is_enable_np) { + ams_loading_state = obj->GetExtderSystem()->IsBusyLoading(); + } else if (obj->ams_status_main == AMS_STATUS_MAIN_FILAMENT_CHANGE) { + ams_loading_state = true; + } + + if (ams_loading_state) { + update_load_with_temp(); + + const std::string& cur_ams_id = obj->GetExtderSystem()->GetCurrentAmsId(); + const std::string& cur_tray_id = obj->GetExtderSystem()->GetCurrentSlotId(); + if (!cur_ams_id.empty() && !cur_tray_id.empty()) { + m_filament_step->updateID(std::atoi(cur_ams_id.c_str()), std::atoi(cur_tray_id.c_str())); + } + + auto loading_ext = obj->GetExtderSystem()->GetLoadingExtder(); + auto tar = loading_ext ? loading_ext->GetSlotTarget() : DevAmsSlotInfo(); + bool busy_for_vt_loading = (tar.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || tar.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) && !obj->is_target_slot_unload(); + if (busy_for_vt_loading) { + // wait to heat hotend + if (ams_status_sub == 0x02) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_VT_LOAD); + } else if (ams_status_sub == 0x05) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD); + } else if (ams_status_sub == 0x06) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CONFIRM_EXTRUDED, FilamentStepType::STEP_TYPE_VT_LOAD); + } else if (ams_status_sub == 0x07) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_VT_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_VT_LOAD); + ams_loading_state = false; + } + } else { + // wait to heat hotend + if (ams_status_sub == 0x02) { + if (!obj->is_target_slot_unload()) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_HEAT_NOZZLE, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x03) { + if (!obj->is_target_slot_unload()) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x04) { + if (!obj->is_target_slot_unload()) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x05) { + if (!obj->is_target_slot_unload()) { + if (m_is_load_with_temp) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CUT_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } + + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x06) { + if (!obj->is_target_slot_unload()) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PUSH_NEW_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x07) { + if (!obj->is_target_slot_unload()) { + if (m_is_load_with_temp) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PULL_CURR_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_LOAD); + } + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_PURGE_OLD_FILAMENT, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x08) { + if (!obj->is_target_slot_unload()) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else if (ams_status_sub == 0x09) { + //just wait + } else if (ams_status_sub == 0x0B) { + if (!obj->is_target_slot_unload()) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_LOAD); + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_CHECK_POSITION, FilamentStepType::STEP_TYPE_UNLOAD); + } + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_UNLOAD); + ams_loading_state = false; + } + } + } else if (obj->ams_status_main == AMS_STATUS_MAIN_ASSIST) { + m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD); + ams_loading_state = false; + } else { + m_filament_step->SetFilamentStep(FilamentStep::STEP_IDLE, FilamentStepType::STEP_TYPE_LOAD); + ams_loading_state = false; + } + + show_filament_load_group(ams_loading_state); +} + ScoreDialog::ScoreDialog(wxWindow *parent, int design_id, std::string model_id, int profile_id, int rating_id, bool success_printed, int star_count) : DPIDialog(parent, wxID_ANY, _L("Rate the Print Profile"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) , m_design_id(design_id) diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 6e71341e6b..72b2733586 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -506,6 +506,7 @@ protected: wxStaticText * m_ams_debug; bool m_show_ams_group{false}; bool m_show_filament_group{ false }; + AMSControl* m_ams_control; StaticBox* m_ams_control_box; wxStaticBitmap *m_ams_extruder_img; @@ -755,6 +756,8 @@ protected: void update_temp_ctrl(MachineObject *obj); void update_misc_ctrl(MachineObject *obj); void update_ams(MachineObject* obj); + void update_filament_loading_panel(MachineObject* obj); + void update_ams_insert_material(MachineObject* obj); void update_extruder_status(MachineObject* obj); void update_ams_control_state(std::string ams_id, std::string slot_id); diff --git a/src/slic3r/GUI/Widgets/FilamentLoad.cpp b/src/slic3r/GUI/Widgets/FilamentLoad.cpp index e40ea269c5..d717dbefa3 100644 --- a/src/slic3r/GUI/Widgets/FilamentLoad.cpp +++ b/src/slic3r/GUI/Widgets/FilamentLoad.cpp @@ -174,6 +174,9 @@ void FilamentLoad::SetupSteps(bool has_fila_to_switch) { m_filament_unload_steps->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_CUT_FILAMENT]); m_filament_unload_steps->AppendItem(FILAMENT_CHANGE_STEP_STRING[FilamentStep::STEP_PULL_CURR_FILAMENT]); } + + Layout(); + Fit(); }