diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index b5a0810ab..13459b1ad 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -806,7 +806,7 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std std::vector cache_map_result = result; //check ams mapping result - if (is_valid_mapping_result(result)) { + if (is_valid_mapping_result(result, true)) { return 0; } @@ -834,7 +834,7 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std } //check order mapping result - if (is_valid_mapping_result(result)) { + if (is_valid_mapping_result(result, true)) { return 0; } } catch(...) { @@ -854,7 +854,7 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std return 0; } -bool MachineObject::is_valid_mapping_result(std::vector& result) +bool MachineObject::is_valid_mapping_result(std::vector& result, bool check_empty_slot) { bool valid_ams_mapping_result = true; if (result.empty()) return false; @@ -870,15 +870,17 @@ bool MachineObject::is_valid_mapping_result(std::vector& result) result[i].tray_id = -1; valid_ams_mapping_result = false; } else { - int tray_id = result[i].tray_id % 4; - auto tray_item = ams_item->second->trayList.find(std::to_string(tray_id)); - if (tray_item == ams_item->second->trayList.end()) { - result[i].tray_id = -1; - valid_ams_mapping_result = false; - } else { - if (!tray_item->second->is_exists) { + if (check_empty_slot) { + int tray_id = result[i].tray_id % 4; + auto tray_item = ams_item->second->trayList.find(std::to_string(tray_id)); + if (tray_item == ams_item->second->trayList.end()) { result[i].tray_id = -1; valid_ams_mapping_result = false; + } else { + if (!tray_item->second->is_exists) { + result[i].tray_id = -1; + valid_ams_mapping_result = false; + } } } } @@ -3139,6 +3141,7 @@ void DeviceManager::on_machine_alive(std::string json_str) obj->wifi_signal = printer_signal; obj->dev_connection_type = connect_type; obj->bind_state = bind_state; + obj->printer_type = MachineObject::parse_printer_type(printer_type_str); // U0 firmware if (obj->dev_connection_type.empty() && obj->bind_state.empty()) diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 660e0cce6..47feb664d 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -432,7 +432,7 @@ public: static bool is_support_ams_mapping_version(std::string module, std::string version); int ams_filament_mapping(std::vector filaments, std::vector &result, std::vector exclude_id = std::vector()); - bool is_valid_mapping_result(std::vector& result); + bool is_valid_mapping_result(std::vector& result, bool check_empty_slot = false); // exceed index start with 0 bool is_mapping_exceed_filament(std::vector& result, int &exceed_index); void reset_mapping_result(std::vector& result);