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_connect_printer, 0, wxALIGN_CENTER | wxLEFT, FromDIP(4));
combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | (isDual ? wxALIGN_CENTER_HORIZONTAL : wxALIGN_RIGHT));
if (isDual) {
if (isBBL) {
wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL);
hsizer->AddStretchSpacer(1);
@ -562,7 +562,7 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
}
btn_connect_printer->Show(!isBBL);
btn_sync_printer->Show(isDual);
btn_sync_printer->Show(isBBL);
panel_printer_bed->Show(isBBL);
vsizer_printer->GetItem(2)->GetSizer()->GetItem(1)->Show(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"));
return false;
}
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"));
return false;
}
//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"));
// return false;
//}
if (!plater->check_printer_initialized(obj)) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " check_printer_initialized fail";
@ -1243,18 +1243,28 @@ 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;
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]));
assert(left_index != -1 && right_index != -1);
left_extruder->combo_diameter->SetSelection(left_index);
right_extruder->combo_diameter->SetSelection(right_index);
is_switching_diameter = true;
switch_diameter(false);
is_switching_diameter = false;
AMSCountPopupWindow::SetAMSCount(deputy_index, deputy_4, deputy_1);
AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1);
AMSCountPopupWindow::UpdateAMSCount(0, left_extruder);
AMSCountPopupWindow::UpdateAMSCount(1, right_extruder);
if (extruder_nums > 1) {
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]));
assert(left_index != -1 && right_index != -1);
left_extruder->combo_diameter->SetSelection(left_index);
right_extruder->combo_diameter->SetSelection(right_index);
is_switching_diameter = true;
switch_diameter(false);
is_switching_diameter = false;
AMSCountPopupWindow::SetAMSCount(deputy_index, deputy_4, deputy_1);
AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1);
AMSCountPopupWindow::UpdateAMSCount(0, left_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";
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
int extruder_nums = preset_bundle->get_printer_extruder_count();
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);
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->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1);
extruder_synced[0] = true;