From 67a463ecc221bb8ae77d828c30a8124bda9cea3b Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 6 Jan 2025 20:30:54 +0800 Subject: [PATCH] EMH: add nozzle diameter synchronization jira: STUDIO-9140 Change-Id: I62e4035e473c8bfa2ccf7719bc6c1072c0a30b61 (cherry picked from commit 3c303e6e2c6f8fcb7d2e804c2dd13b0fb8d13e7c) --- src/slic3r/GUI/Plater.cpp | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 01caed0817..9433a469c8 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -214,6 +214,18 @@ wxDEFINE_EVENT(EVT_NOTICE_FULL_SCREEN_CHANGED, IntEvent); #define PRINTER_PANEL_SIZE_WIDEN (wxSize(FromDIP(136), FromDIP(68))) #define PRINTER_PANEL_SIZE (wxSize(FromDIP(98), FromDIP(98))) +static int get_diameter_index(float diameter) +{ + float eps = 1e-3; + std::vector diameters = {0.2, 0.4, 0.6, 0.8}; + for (int index = 0; index < diameters.size(); ++index) { + if (abs(diameters[index] - diameter) < eps) { + return index; + } + } + return 0; +} + bool Plater::has_illegal_filename_characters(const wxString& wxs_name) { std::string name = into_u8(wxs_name); @@ -1243,6 +1255,30 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material) }); } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " go on sync_extruder_list"; + const Preset &cur_preset = preset_bundle->printers.get_selected_preset(); + int extruder_nums = preset_bundle->get_printer_extruder_count(); + std::vector extruder_map(extruder_nums); + std::iota(extruder_map.begin(), extruder_map.end(), 0); + const ConfigOptionInts *physical_extruder_map = cur_preset.config.option("physical_extruder_map"); + if (physical_extruder_map != nullptr) { + assert(physical_extruder_map->values.size() == extruder_nums); + extruder_map = physical_extruder_map->values; + } + assert(obj->m_extder_data.extders.size() == extruder_nums); + + std::vector nozzle_diameters; + nozzle_diameters.resize(extruder_nums); + for (size_t index = 0; index < extruder_nums; ++index) { + int extruder_id = extruder_map[index]; + nozzle_diameters[extruder_id] = obj->m_extder_data.extders[index].current_nozzle_diameter; + if (obj->m_extder_data.extders[index].current_nozzle_flow_type == NozzleFlowType::NONE_FLOWTYPE) { + MessageDialog dlg(this->plater, _L("There are unset nozzle types. Please set the nozzle types of all extruders before synchronizing."), + _L("Sync extruder infomation"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + continue; + } + printer_tab->set_extruder_volume_type(index, NozzleVolumeType(obj->m_extder_data.extders[extruder_id].current_nozzle_flow_type - 1)); + } int deputy_4 = 0, main_4 = 0, deputy_1 = 0, main_1 = 0; for (auto ams : obj->amsList) { @@ -1265,6 +1301,10 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material) } int main_index = obj->is_main_extruder_on_left() ? 0 : 1; int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0; + + left_extruder->combo_diameter->SetSelection(get_diameter_index(nozzle_diameters[0])); + right_extruder->combo_diameter->SetSelection(get_diameter_index(nozzle_diameters[1])); + switch_diameter(false); AMSCountPopupWindow::SetAMSCount(deputy_index, deputy_4, deputy_1); AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1); AMSCountPopupWindow::UpdateAMSCount(0, left_extruder);