FIX: filament loading steps

jira: [STUDIO-14428]
Change-Id: I68612346ef9cb50e302323daa47421c22a87be97
(cherry picked from commit 9fb4b9b6a3a16b08d9dc52a4d6dbc15044275dcf)
This commit is contained in:
xin.zhang 2025-09-05 11:14:34 +08:00 committed by Noisyfox
parent 21407e91de
commit 8863631c92
6 changed files with 151 additions and 130 deletions

View file

@ -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";
}

View file

@ -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()

View file

@ -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;}

View file

@ -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, int>(wxColour(255, 255, 254), StateColor::Disabled), std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
StateColor btn_text_white(std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Disabled), std::pair<wxColour, int>(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)

View file

@ -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);

View file

@ -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();
}