diff --git a/src/libslic3r/ProjectTask.hpp b/src/libslic3r/ProjectTask.hpp index b4a9a0998..895f3860b 100644 --- a/src/libslic3r/ProjectTask.hpp +++ b/src/libslic3r/ProjectTask.hpp @@ -50,6 +50,10 @@ struct FilamentInfo int ctype = 0; std::vector colors = std::vector(); int mapping_result = 0; + + /*for new ams mapping*/ + std::string ams_id; + std::string slot_id; }; class BBLSliceInfo { diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 6bb212030..977c9f939 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -854,6 +854,9 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std // tray_index : tray_color std::map tray_filaments; for (auto ams = amsList.begin(); ams != amsList.end(); ams++) { + + std::string ams_id = ams->second->id; + for (auto tray = ams->second->trayList.begin(); tray != ams->second->trayList.end(); tray++) { int ams_id = atoi(ams->first.c_str()); int tray_id = atoi(tray->first.c_str()); @@ -872,6 +875,11 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std info.filament_id = tray->second->setting_id; info.ctype = tray->second->ctype; info.colors = tray->second->cols; + + /*for new ams mapping*/ + info.ams_id = ams->first.c_str(); + info.slot_id = tray->first.c_str(); + tray_filaments.emplace(std::make_pair(tray_index, info)); } } @@ -879,27 +887,28 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std // tray info list std::vector tray_info_list; - for (auto it = amsList.begin(); it != amsList.end(); it++) { - for (int i = 0; i < 4; i++) { + int flament_index_id = 0; + for (auto ams = amsList.begin(); ams != amsList.end(); ams++) { + for (auto tray = ams->second->trayList.begin(); tray != ams->second->trayList.end(); tray++) { + FilamentInfo info; - auto tray_it = it->second->trayList.find(std::to_string(i)); - if (tray_it != it->second->trayList.end()) { - info.id = atoi(tray_it->first.c_str()) + atoi(it->first.c_str()) * 4; - info.tray_id = atoi(tray_it->first.c_str()) + atoi(it->first.c_str()) * 4; - info.color = tray_it->second->color; - info.type = tray_it->second->get_filament_type(); - info.ctype = tray_it->second->ctype; - info.colors = tray_it->second->cols; - } - else { - info.id = -1; - info.tray_id = -1; - } + info.id = flament_index_id; + info.tray_id = flament_index_id; + info.color = tray->second->color; + info.type = tray->second->get_filament_type(); + info.ctype = tray->second->ctype; + info.colors = tray->second->cols; + + + /*for new ams mapping*/ + info.ams_id = ams->second->id; + info.slot_id = tray->second->id; + tray_info_list.push_back(info); + flament_index_id++; } } - // is_support_ams_mapping if (!is_support_ams_mapping()) { BOOST_LOG_TRIVIAL(info) << "ams_mapping: do not support, use order mapping"; @@ -1031,6 +1040,11 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std result[picked_src_idx].filament_id = tray->second.filament_id; result[picked_src_idx].ctype = tray->second.ctype; result[picked_src_idx].colors = tray->second.colors; + + + /*for new ams mapping*/ + result[picked_src_idx].ams_id = tray->second.ams_id; + result[picked_src_idx].slot_id = tray->second.slot_id; } else { FilamentInfo info; @@ -1072,6 +1086,10 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std result[i].type = tray_info_list[i].type; result[i].ctype = tray_info_list[i].ctype; result[i].colors = tray_info_list[i].colors; + + /*for new ams mapping*/ + result[i].ams_id = tray_info_list[i].ams_id; + result[i].slot_id = tray_info_list[i].slot_id; } } } diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 40f5e1d5e..4446b82d7 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -244,6 +244,7 @@ void PrintJob::process() params.task_layer_inspect = this->task_layer_inspect; params.task_record_timelapse= this->task_record_timelapse; params.ams_mapping = this->task_ams_mapping; + params.ams_mapping2 = this->task_ams_mapping2; params.ams_mapping_info = this->task_ams_mapping_info; params.connection_type = this->connection_type; params.task_use_ams = this->task_use_ams; diff --git a/src/slic3r/GUI/Jobs/PrintJob.hpp b/src/slic3r/GUI/Jobs/PrintJob.hpp index 88318c138..b6da50c74 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.hpp +++ b/src/slic3r/GUI/Jobs/PrintJob.hpp @@ -61,6 +61,7 @@ public: std::string m_access_code; std::string task_bed_type; std::string task_ams_mapping; + std::string task_ams_mapping2; std::string task_ams_mapping_info; std::string connection_type; std::string m_print_type; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 4ba39afab..23654f21a 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1833,8 +1833,9 @@ bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) if (result == 0) { print_ams_mapping_result(m_ams_mapping_result); std::string ams_array; + std::string ams_array2; std::string mapping_info; - get_ams_mapping_result(ams_array, mapping_info); + get_ams_mapping_result(ams_array, ams_array2, mapping_info); if (ams_array.empty()) { reset_ams_material(); BOOST_LOG_TRIVIAL(info) << "ams_mapping_array=[]"; @@ -1860,7 +1861,7 @@ bool SelectMachineDialog::do_ams_mapping(MachineObject *obj_) return true; } -bool SelectMachineDialog::get_ams_mapping_result(std::string &mapping_array_str, std::string &ams_mapping_info) +bool SelectMachineDialog::get_ams_mapping_result(std::string &mapping_array_str, std::string& mapping_array_str2, std::string &ams_mapping_info) { if (m_ams_mapping_result.empty()) return false; @@ -1877,17 +1878,28 @@ bool SelectMachineDialog::get_ams_mapping_result(std::string &mapping_array_str, if (invalid_count == m_ams_mapping_result.size()) { return false; } else { - json j = json::array(); - json mapping_info_json = json::array(); + + json mapping_v0_json = json::array(); + json mapping_v1_json = json::array(); + + json mapping_info_json = json::array(); for (int i = 0; i < wxGetApp().preset_bundle->filament_presets.size(); i++) { + int tray_id = -1; + + json mapping_item_v1; + mapping_item_v1["ams_id"] = 0xff; + mapping_item_v1["slot_id"] = 0xff; + json mapping_item; mapping_item["ams"] = tray_id; mapping_item["targetColor"] = ""; mapping_item["filamentId"] = ""; mapping_item["filamentType"] = ""; + + for (int k = 0; k < m_ams_mapping_result.size(); k++) { if (m_ams_mapping_result[k].id == i) { tray_id = m_ams_mapping_result[k].tray_id; @@ -1900,12 +1912,23 @@ bool SelectMachineDialog::get_ams_mapping_result(std::string &mapping_array_str, //convert #RRGGBB to RRGGBBAA mapping_item["sourceColor"] = m_filaments[k].color; mapping_item["targetColor"] = m_ams_mapping_result[k].color; + + + /*new ams mapping data*/ + + mapping_item_v1["ams_id"] = m_ams_mapping_result[k].ams_id; + mapping_item_v1["slot_id"] = m_ams_mapping_result[k].slot_id; } } - j.push_back(tray_id); + mapping_v0_json.push_back(tray_id); + mapping_v1_json.push_back(mapping_item_v1); mapping_info_json.push_back(mapping_item); } - mapping_array_str = j.dump(); + + + mapping_array_str = mapping_v0_json.dump(); + mapping_array_str2 = mapping_v1_json.dump(); + ams_mapping_info = mapping_info_json.dump(); return valid_mapping_result; } @@ -2746,9 +2769,10 @@ void SelectMachineDialog::on_send_print() // get ams_mapping_result std::string ams_mapping_array; + std::string ams_mapping_array2; std::string ams_mapping_info; if (m_checkbox_list["use_ams"]->GetValue()) - get_ams_mapping_result(ams_mapping_array, ams_mapping_info); + get_ams_mapping_result(ams_mapping_array,ams_mapping_array2, ams_mapping_info); else { json mapping_info_json = json::array(); json item; @@ -2841,9 +2865,11 @@ void SelectMachineDialog::on_send_print() if (obj_->is_support_ams_mapping()) { m_print_job->task_ams_mapping = ams_mapping_array; + m_print_job->task_ams_mapping2= ams_mapping_array2; m_print_job->task_ams_mapping_info = ams_mapping_info; } else { m_print_job->task_ams_mapping = ""; + m_print_job->task_ams_mapping2 = ""; m_print_job->task_ams_mapping_info = ""; } diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 0f35b6d58..ac5894445 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -528,7 +528,7 @@ public: void set_print_type(PrintFromType type) {m_print_type = type;}; bool Show(bool show); bool do_ams_mapping(MachineObject* obj_); - bool get_ams_mapping_result(std::string& mapping_array_str, std::string& ams_mapping_info); + bool get_ams_mapping_result(std::string& mapping_array_str, std::string& mapping_array_str2, std::string& ams_mapping_info); PrintFromType get_print_type() {return m_print_type;}; wxString format_steel_name(std::string name); diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index feff6343c..99cee59ee 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -202,6 +202,7 @@ struct PrintParams { std::string ftp_file; std::string ftp_file_md5; std::string ams_mapping; + std::string ams_mapping2; std::string ams_mapping_info; std::string connection_type; std::string comments;