diff --git a/src/libslic3r/ProjectTask.hpp b/src/libslic3r/ProjectTask.hpp index 895f3860b..f928bb293 100644 --- a/src/libslic3r/ProjectTask.hpp +++ b/src/libslic3r/ProjectTask.hpp @@ -54,6 +54,20 @@ struct FilamentInfo /*for new ams mapping*/ std::string ams_id; std::string slot_id; + +public: + int get_amd_id() const + { + if (ams_id.empty()) { return -1; }; + + try + { + return stoi(ams_id); + } + catch (...) {}; + + return -1; + }; }; class BBLSliceInfo { diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 2431414d2..f0f1a2036 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1243,7 +1243,7 @@ bool MachineObject::need_SD_card() const int MachineObject::get_extruder_id_by_ams_id(const std::string &ams_id) { - if (ams_id.empty()) + if (ams_id.empty() || (ams_id == "-1")) return 0; auto it = amsList.find(ams_id); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 57aac5bb5..7325be056 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2105,7 +2105,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) //check blacklist for (auto i = 0; i < m_ams_mapping_result.size(); i++) { - const auto& ams_id = m_ams_mapping_result[i].ams_id; + const auto& ams_id = m_ams_mapping_result[i].get_amd_id(); auto tid = m_ams_mapping_result[i].tray_id; std::string filament_type = boost::to_upper_copy(m_ams_mapping_result[i].type); @@ -2121,7 +2121,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) std::string action; std::string info; - DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, stoi(ams_id), in_blacklist, action, info); + DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, ams_id, in_blacklist, action, info); if (in_blacklist && action == "warning") { wxString prohibited_error = wxString::FromUTF8(info); @@ -2172,7 +2172,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) for (auto i = 0; i < m_ams_mapping_result.size(); i++) { - const auto& ams_id = m_ams_mapping_result[i].ams_id; + const auto& ams_id = m_ams_mapping_result[i].get_amd_id(); auto tid = m_ams_mapping_result[i].tray_id; std::string filament_type = boost::to_upper_copy(m_ams_mapping_result[i].type); @@ -2187,7 +2187,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) bool in_blacklist = false; std::string action; std::string info; - DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, stoi(ams_id), in_blacklist, action, info); + DeviceManager::check_filaments_in_blacklist(filament_brand, filament_type, ams_id, in_blacklist, action, info); if (in_blacklist && action == "prohibition") { has_prohibited_filament = true;