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) {