diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d5586e844..afcdd7c82 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -706,6 +706,18 @@ void Sidebar::priv::sync_extruder_list() dlg.ShowModal(); return; } + + std::string machine_print_name = obj->printer_type; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + std::string target_model_id = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + if (machine_print_name != target_model_id) { + MessageDialog dlg(this->plater, _L("The currently selected machine preset is inconsistent with the connected printer type.\n" + "Are you sure to continue syncing?"), _L("Sync extruder infomation"), wxICON_WARNING | wxYES | wxNO); + if (dlg.ShowModal() == wxID_NO) { + return; + } + } + auto printer_tab = dynamic_cast(wxGetApp().get_tab(Preset::TYPE_PRINTER)); printer_tab->set_extruder_volume_type(0, NozzleVolumeType(obj->m_nozzle_data.nozzles[1].flow_type)); printer_tab->set_extruder_volume_type(1, NozzleVolumeType(obj->m_nozzle_data.nozzles[0].flow_type)); @@ -2031,8 +2043,16 @@ std::map Sidebar::build_filament_ams_list(MachineObject return filament_ams_list; } +void Sidebar::sync_extruder_list() +{ + p->sync_extruder_list(); +} + void Sidebar::load_ams_list(std::string const &device, MachineObject* obj) { + if (obj && obj->is_connected() && obj->is_multi_extruders() && wxGetApp().plater()->is_multi_extruder_ams_empty()) + sync_extruder_list(); + std::map filament_ams_list = build_filament_ams_list(obj); p->ams_list_device = device; @@ -12689,6 +12709,19 @@ void Plater::export_toolpaths_to_obj() const p->preview->get_canvas3d()->export_toolpaths_to_obj(into_u8(path).c_str()); } +bool Plater::is_multi_extruder_ams_empty() +{ + std::vector extruder_ams_count_str = p->config->option("extruder_ams_count", true)->values; + std::vector> extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str); + for (auto extruder_ams_count : extruder_ams_counts) { + for (auto iter = extruder_ams_count.begin(); iter != extruder_ams_count.end(); ++iter) { + if (iter->second != 0) + return false; + } + } + return true; +} + //BBS: add multiple plate reslice logic void Plater::reslice() { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 96bd6a99a..1e0443cd9 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -150,6 +150,7 @@ public: void load_ams_list(std::string const & device, MachineObject* obj); std::map build_filament_ams_list(MachineObject* obj); void sync_ams_list(); + void sync_extruder_list(); ObjectList* obj_list(); ObjectSettings* obj_settings(); @@ -279,6 +280,7 @@ public: m_exported_file = exported_file; } + bool is_multi_extruder_ams_empty(); // BBS wxString get_project_name(); void update_all_plate_thumbnails(bool force_update = false);