ENH: add sync button for single extruder printer

jira: STUDIO-11628
Change-Id: If77b6e3094d27666bfc7adfb8e4a0fd989703db7
This commit is contained in:
zhimin.zeng 2025-05-07 11:49:25 +08:00 committed by lane.wei
parent 8ecc6aa224
commit 69dd357196

View File

@ -515,7 +515,7 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
hsizer_printer_btn->Add(btn_edit_printer, 0); hsizer_printer_btn->Add(btn_edit_printer, 0);
hsizer_printer_btn->Add(btn_connect_printer, 0, wxALIGN_CENTER | wxLEFT, FromDIP(4)); hsizer_printer_btn->Add(btn_connect_printer, 0, wxALIGN_CENTER | wxLEFT, FromDIP(4));
combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | (isDual ? wxALIGN_CENTER_HORIZONTAL : wxALIGN_RIGHT)); combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | (isDual ? wxALIGN_CENTER_HORIZONTAL : wxALIGN_RIGHT));
if (isDual) { if (isBBL) {
wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL);
hsizer->AddStretchSpacer(1); hsizer->AddStretchSpacer(1);
@ -562,7 +562,7 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
} }
btn_connect_printer->Show(!isBBL); btn_connect_printer->Show(!isBBL);
btn_sync_printer->Show(isDual); btn_sync_printer->Show(isBBL);
panel_printer_bed->Show(isBBL); panel_printer_bed->Show(isBBL);
vsizer_printer->GetItem(2)->GetSizer()->GetItem(1)->Show(isDual); vsizer_printer->GetItem(2)->GetSizer()->GetItem(1)->Show(isDual);
vsizer_printer->GetItem(2)->Show(isBBL && isDual); vsizer_printer->GetItem(2)->Show(isBBL && isDual);
@ -1157,10 +1157,10 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material)
plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::NOT_CONNECTED, _L("Sync printer information")); plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::NOT_CONNECTED, _L("Sync printer information"));
return false; return false;
} }
if (obj->m_extder_data.extders.size() != 2) {//wxString(obj->get_preset_printer_model_name(machine_print_name)) //if (obj->m_extder_data.extders.size() != 2) {//wxString(obj->get_preset_printer_model_name(machine_print_name))
plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::INCONSISTENT, _L("Sync printer information")); // plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::INCONSISTENT, _L("Sync printer information"));
return false; // return false;
} //}
if (!plater->check_printer_initialized(obj)) { if (!plater->check_printer_initialized(obj)) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " check_printer_initialized fail"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " check_printer_initialized fail";
@ -1243,6 +1243,7 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material)
int main_index = obj->is_main_extruder_on_left() ? 0 : 1; int main_index = obj->is_main_extruder_on_left() ? 0 : 1;
int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0; int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0;
if (extruder_nums > 1) {
int left_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0])); int left_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0]));
int right_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[1])); int right_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[1]));
assert(left_index != -1 && right_index != -1); assert(left_index != -1 && right_index != -1);
@ -1255,6 +1256,15 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material)
AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1); AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1);
AMSCountPopupWindow::UpdateAMSCount(0, left_extruder); AMSCountPopupWindow::UpdateAMSCount(0, left_extruder);
AMSCountPopupWindow::UpdateAMSCount(1, right_extruder); AMSCountPopupWindow::UpdateAMSCount(1, right_extruder);
} else {
int index = single_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0]));
assert(index != -1);
single_extruder->combo_diameter->SetSelection(index);
is_switching_diameter = true;
switch_diameter(true);
is_switching_diameter = false;
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " finish sync_extruder_list"; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " finish sync_extruder_list";
return true; return true;
} }
@ -1316,6 +1326,10 @@ void Sidebar::priv::update_sync_status(const MachineObject *obj)
} }
}; };
auto is_same_nozzle_info = [](const ExtruderInfo &left, const ExtruderInfo &right) {
return abs(left.diameter - right.diameter) < EPSILON && left.nozzle_volue_type == right.nozzle_volue_type;
};
// 2. update extruder status // 2. update extruder status
int extruder_nums = preset_bundle->get_printer_extruder_count(); int extruder_nums = preset_bundle->get_printer_extruder_count();
if (extruder_nums != obj->m_extder_data.extders.size()) if (extruder_nums != obj->m_extder_data.extders.size())
@ -1376,7 +1390,7 @@ void Sidebar::priv::update_sync_status(const MachineObject *obj)
std::vector<bool> extruder_synced(extruder_nums, false); std::vector<bool> extruder_synced(extruder_nums, false);
if (extruder_nums == 1) { if (extruder_nums == 1) {
if (extruder_infos == machine_extruder_infos) { if (is_same_nozzle_info(extruder_infos[0], machine_extruder_infos[0])) {
single_extruder->ShowBadge(true); single_extruder->ShowBadge(true);
single_extruder->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1); single_extruder->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1);
extruder_synced[0] = true; extruder_synced[0] = true;