diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 85fc4f220..0630ba4c3 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -798,23 +798,26 @@ void MachineObject::_parse_tray_now(std::string tray_now) } else { try { int tray_now_int = atoi(tray_now.c_str()); - if (tray_now_int == 255) { + if (tray_now_int == VIRTUAL_TRAY_MAIN_ID) { 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 = ""; } + else if (tray_now_int == VIRTUAL_TRAY_DEPUTY_ID) { + m_extder_data.extders[MAIN_NOZZLE_ID].snow.ams_id = std::to_string(VIRTUAL_TRAY_MAIN_ID); + 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(VIRTUAL_TRAY_MAIN_ID); - m_extder_data.extders[MAIN_NOZZLE_ID].snow.slot_id = "0"; - } - 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; + 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(...) { @@ -3745,7 +3748,7 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) } /*the param is invalid in np for Yeshu*/ - if (!check_enable_np(jj) && jj.contains("hw_switch_state")) { + if (jj.contains("hw_switch_state")) { hw_switch_state = jj["hw_switch_state"].get(); m_extder_data.extders[MAIN_NOZZLE_ID].ext_has_filament = hw_switch_state; } @@ -4517,21 +4520,6 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) if (ams_it == amsList.end()) { Ams* new_ams = new Ams(ams_id, nozzle_id, type_id); new_ams->info = info; - - try { - if (!ams_id.empty()) { - int ams_id_int = atoi(ams_id.c_str()); - - if (type_id < 4 ) { - new_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false; - } else { - new_ams->is_exists = get_flag_bits(ams_exist_bits, 4 + (ams_id_int - 128)); - } - } - } - catch (...) { - ; - } amsList.insert(std::make_pair(ams_id, new_ams)); // new ams added event curr_ams = new_ams; @@ -4545,6 +4533,25 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) } if (!curr_ams) continue; + /*set ams type flag*/ + curr_ams->type = type_id; + + + /*set ams exist flag*/ + try { + if (!ams_id.empty()) { + int ams_id_int = atoi(ams_id.c_str()); + + if (type_id < 4) { + curr_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false; + } else { + curr_ams->is_exists = get_flag_bits(ams_exist_bits, 4 + (ams_id_int - 128)); + } + } + } catch (...) { + ; + } + if (it->contains("dry_time") && (*it)["dry_time"].is_number()) { curr_ams->left_dry_time = (*it)["dry_time"].get(); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 745166d0f..e29939569 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1130,6 +1130,7 @@ AMSRoadShowMode AMSControl::findFirstMode(AMSPanelPos pos) { } } if (item->second->get_ams_model() == AMSModel::EXT_AMS && item->second->get_ext_type() == AMSModelOriginType::LITE_EXT) return AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE; + if (item->second->get_ams_model() == AMSModel::N3S_AMS) return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S; return AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; } } @@ -1400,6 +1401,10 @@ void AMSControl::SwitchAms(std::string ams_id) } else { AMSRoadShowMode mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE; + + if (item->get_ams_model() == AMSModel::N3S_AMS) + mode = AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S; + for (auto it : pair_id) { if (it.first == ams_id || it.second == ams_id) { mode = AMSRoadShowMode::AMS_ROAD_MODE_DOUBLE; @@ -1521,9 +1526,10 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy } //Set path length in different case + model = ams->get_ams_model(); + if (ams->get_can_count() == GENERIC_AMS_SLOT_NUM) { length = left ? 129 : 145; - model = ams->get_ams_model(); } else if (ams->get_can_count() == 1) { for (auto it : pair_id){ if (it.first == ams_id){ @@ -1537,8 +1543,12 @@ void AMSControl::SetAmsStep(std::string ams_id, std::string canid, AMSPassRoadTy break; } } - model = ams->get_ams_model(); + + if (!in_pair && model == N3S_AMS) { + length = left ? 129 : 232; + } } + if (model == AMSModel::AMS_LITE){ length = left ? 145 : 45; } diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index b808a2567..bbad3c795 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -2328,6 +2328,10 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.DrawLine(left_nozzle_pos.x - FromDIP(218), 0, left_nozzle_pos.x - FromDIP(218), (size.y / 2)); break; case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE: + dc.DrawLine(left_nozzle_pos.x - FromDIP(192), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP(192), 0, left_nozzle_pos.x - FromDIP(192), (size.y / 2)); + break; + case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S: dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), 0, left_nozzle_pos.x - FromDIP((129)), (size.y / 2)); break; @@ -2353,6 +2357,10 @@ void AMSRoadDownPart::doRender(wxDC& dc) dc.DrawLine(right_nozzle_pos.x, (size.y / 2), right_nozzle_pos.x + FromDIP(68), (size.y / 2)); dc.DrawLine(right_nozzle_pos.x + FromDIP(68), 0, right_nozzle_pos.x + FromDIP(68), (size.y / 2)); break; + case AMSRoadShowMode::AMS_ROAD_MODE_SINGLE_N3S: + dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), (size.y / 2), left_nozzle_pos.x, (size.y / 2)); + dc.DrawLine(left_nozzle_pos.x - FromDIP((129)), 0, left_nozzle_pos.x - FromDIP((129)), (size.y / 2)); + break; case AMSRoadShowMode::AMS_ROAD_MODE_AMS_LITE: dc.DrawLine(left_nozzle_pos.x, (size.y / 2), left_nozzle_pos.x + FromDIP(145), (size.y / 2)); dc.DrawLine(left_nozzle_pos.x + FromDIP(145), 0, left_nozzle_pos.x + FromDIP(145), (size.y / 2)); diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index 233e9b476..0383a6e86 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -72,6 +72,7 @@ enum class AMSRoadShowMode : int { AMS_ROAD_MODE_FOUR, AMS_ROAD_MODE_DOUBLE, AMS_ROAD_MODE_SINGLE, + AMS_ROAD_MODE_SINGLE_N3S, AMS_ROAD_MODE_AMS_LITE, AMS_ROAD_MODE_NONE };