From 56b6e0742eeee04dac8fd2230909269cb748568f Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 23 May 2025 10:11:26 +0800 Subject: [PATCH] Fix AMS HT filament road rendering (cherry picked from commit bambulab/BambuStudio@afbf3cf1976623c9a443f3471ec7ddcfb737d031) --------- Co-authored-by: tao wang --- src/slic3r/GUI/DeviceManager.cpp | 32 ++++++++++++++++++++++++------ src/slic3r/GUI/Widgets/AMSItem.cpp | 4 ++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 11682a5058..40254ce18e 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -713,24 +713,44 @@ bool MachineObject::is_extrusion_cali_finished() void MachineObject::_parse_tray_now(std::string tray_now) { - m_tray_now = tray_now; if (tray_now.empty()) { return; } else { try { int tray_now_int = atoi(tray_now.c_str()); - if (tray_now_int >= 0 && tray_now_int < 16) { - m_ams_id = std::to_string(tray_now_int >> 2); - m_tray_id = std::to_string(tray_now_int & 0x3); - } - else if (tray_now_int == 255) { + + if (tray_now_int == 255) { m_ams_id = "0"; m_tray_id = "0"; + m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = ""; + m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = ""; + + if (m_tray_now == std::to_string(255)) { + m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = std::to_string(255); + m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = "0"; + } + } + else if (tray_now_int == 254) { + m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = std::to_string(254); + m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = "0"; + } + else { + if (tray_now_int >= 0x80 && tray_now_int <= 0x87) { + m_ams_id = std::to_string(tray_now_int); + } else { + m_ams_id = std::to_string(tray_now_int >> 2); + } + + m_tray_id = std::to_string(tray_now_int & 0x3); + m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = m_ams_id; + m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = m_tray_id; } } catch(...) { } } + + m_tray_now = tray_now; } Ams *MachineObject::get_curr_Ams() diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index d82e02d20e..9d4178e517 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -1608,7 +1608,7 @@ void AMSRoad::OnPassRoad(std::vector prord_list) } // left end - if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END) { + if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END || m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END_ONLY) { for (auto i = 0; i < prord_list.size(); i++) { std::vector::iterator iter = std::find(end_types.begin(), end_types.end(), prord_list[i]); if (iter != end_types.end()) m_pass_rode_mode.push_back(prord_list[i]); @@ -2219,7 +2219,7 @@ void AmsItem::Update(AMSinfo info) } } - if (m_ams_model == AMSModel::GENERIC_AMS) { + if (m_ams_model != AMSModel::AMS_LITE) { for (auto i = 0; i < m_can_road_list.size(); i++) { AMSRoad* road = m_can_road_list[std::to_string(i)]; if (road != nullptr) {