diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 55a1683059..248cb1d198 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -490,6 +490,18 @@ void MachineObject::_parse_ams_status(int ams_status) BOOST_LOG_TRIVIAL(trace) << "ams_debug: main = " << ams_status_main_int << ", sub = " << ams_status_sub; } +bool MachineObject::can_unload_filament() +{ + bool result = false; + if (!has_ams()) + return true; + + if (ams_status_main == AMS_STATUS_MAIN_IDLE && hw_switch_state == 1 && m_tray_now == "255") { + return true; + } + return result; +} + bool MachineObject::is_U0_firmware() { auto ota_ver_it = module_vers.find("ota"); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index ad54d22190..1f1c91eb7e 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -439,6 +439,7 @@ public: // parse amsStatusMain and ams_status_sub void _parse_ams_status(int ams_status); bool has_ams() { return ams_exist_bits != 0; } + bool can_unload_filament(); bool is_U0_firmware(); bool is_support_ams_mapping(); bool is_only_support_cloud_print(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 68e9b22703..bbc972ef26 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1633,17 +1633,16 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) { if (!obj) return; - if (obj->has_ams()) { + if (obj->can_unload_filament()) { + if (!m_button_unload->IsShown()) { + m_button_unload->Show(); + m_button_unload->GetParent()->Layout(); + } + } else { if (m_button_unload->IsShown()) { m_button_unload->Hide(); m_button_unload->GetParent()->Layout(); } - - } else { - if (!m_button_unload->IsShown()) { - m_button_unload->Show(); - m_button_unload->GetParent()->Layout(); - } } // update extruder icon