NEW:display the count of ext filamend load

jira:[STUDIO-9243]

Change-Id: Idc1ad4b47fe1eb313439eab287a6e4b622247558
(cherry picked from commit 1d1b247a6295cef3bf4ab5e26e446eabfd39c207)
This commit is contained in:
tao wang
2024-12-31 19:33:04 +08:00
committed by Noisyfox
parent f636c494cd
commit 50a9bb66ee
3 changed files with 116 additions and 15 deletions

View File

@@ -445,7 +445,6 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
sizer_split_filament->Add(m_stext_filament_title, 0, wxALIGN_CENTER, 0);
sizer_split_filament->Add(m_split_line_filament, 1, wxALIGN_CENTER_VERTICAL, 0);
sizer_split_filament->Add(m_sizer_autorefill, 0, wxALIGN_CENTER, 0);
/*filament area*/
/*1 extruder*/
m_filament_panel = new StaticBox(this);
@@ -520,9 +519,6 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_sizer_filament_2extruder->Add(m_filament_right_panel, 0, wxEXPAND, 0);
m_sizer_filament_2extruder->Layout();
//m_filament_left_panel->Hide();
//m_filament_right_panel->Hide();
m_filament_panel->Hide();
m_statictext_ams_msg = new Label(this, wxEmptyString);
@@ -531,6 +527,44 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_statictext_ams_msg->SetFont(::Label::Body_13);
m_statictext_ams_msg->Hide();
/*ams mapping suggestions*/
m_link_edit_nozzle = new Label(this, wxEmptyString);
m_link_edit_nozzle->SetFont(::Label::Body_13);
m_link_edit_nozzle->SetForegroundColour(0x00ae42);
m_link_edit_nozzle->SetBackgroundColour(*wxWHITE);
m_link_edit_nozzle->Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_HAND); });
m_link_edit_nozzle->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { SetCursor(wxCURSOR_ARROW); });
m_link_edit_nozzle->SetLabel(_L("Rearrange filaments of the left and right nozzles ->"));
m_link_edit_nozzle->Bind(wxEVT_LEFT_DOWN, [this](auto &e) {
EndModal(wxID_CLOSE);
Plater * plater = wxGetApp().plater();
wxCommandEvent evt(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG);
evt.SetEventObject(plater);
evt.SetInt(1); // 1 means from gcode viewer
wxPostEvent(plater, evt);
});
m_mapping_sugs_sizer = new wxBoxSizer(wxHORIZONTAL);
auto m_img_mapping_sugs = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("warning", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)));
auto m_txt_mapping_sugs = new Label(this, wxEmptyString);
m_txt_mapping_sugs->SetFont(::Label::Body_13);
m_txt_mapping_sugs->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00));
m_txt_mapping_sugs->SetBackgroundColour(*wxWHITE);
m_txt_mapping_sugs->SetLabel(_L("Your material arrangement method is not optimal."));
m_mapping_sugs_sizer->Add(m_img_mapping_sugs, 0, wxALIGN_CENTER, 0);
m_mapping_sugs_sizer->Add(m_txt_mapping_sugs, 0, wxALIGN_CENTER, 0);
m_change_filament_times_sizer = new wxBoxSizer(wxHORIZONTAL);
auto m_img_change_filament_times = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("warning", this, 16), wxDefaultPosition, wxSize(FromDIP(16), FromDIP(16)));
m_txt_change_filament_times = new Label(this, wxEmptyString);
m_txt_change_filament_times->SetFont(::Label::Body_13);
m_txt_change_filament_times->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00));
m_txt_change_filament_times->SetBackgroundColour(*wxWHITE);
m_txt_change_filament_times->SetLabel(wxEmptyString);
m_change_filament_times_sizer->Add(m_img_change_filament_times, 0, wxALIGN_CENTER, 0);
m_change_filament_times_sizer->Add(m_txt_change_filament_times, 0, wxALIGN_CENTER, 0);
/*Advanced Options*/
wxBoxSizer* sizer_split_options = new wxBoxSizer(wxHORIZONTAL);
auto m_split_options_line = new wxPanel(this, wxID_ANY);
@@ -791,6 +825,9 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater)
m_sizer_main->Add(m_sizer_filament_2extruder, 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(6));
m_sizer_main->Add(m_statictext_ams_msg, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(m_link_edit_nozzle, 0, wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(m_mapping_sugs_sizer, 0, wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(m_change_filament_times_sizer, 0, wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(sizer_split_options, 1, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(sizer_advanced_options_title, 1, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(15));
m_sizer_main->Add(m_sizer_options_timelapse, 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(15));
@@ -2607,6 +2644,8 @@ void SelectMachineDialog::on_set_finish_mapping(wxCommandEvent &evt)
iter++;
}
}
update_filament_change_count();
}
void SelectMachineDialog::on_print_job_cancel(wxCommandEvent &evt)
@@ -2959,6 +2998,11 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event)
m_ams_mapping_valid = false;
m_ams_mapping_result.clear();
m_link_edit_nozzle->Show(false);
m_mapping_sugs_sizer->Show(false);
m_change_filament_times_sizer->Show(false);
m_txt_change_filament_times->Show(false);
auto selection = m_comboBox_printer->GetSelection();
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev) return;
@@ -3015,6 +3059,18 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event)
// Has changed machine unrecoverably
GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj);
m_check_flag = false;
/*check nozzle & filament is it the best*/
if (obj->m_extder_data.total_extder_count > 1) {
auto stats = m_plater->get_partplate_list().get_current_fff_print().statistics_by_extruder();
auto best = stats.stats_by_multi_extruder_best;
auto curr = stats.stats_by_multi_extruder_curr;
if (curr.filament_flush_weight >= best.filament_flush_weight) {
m_link_edit_nozzle->Show(true);
m_mapping_sugs_sizer->Show(true);
}
}
} else {
BOOST_LOG_TRIVIAL(error) << "on_selection_changed dev_id not found";
return;
@@ -3058,6 +3114,41 @@ void SelectMachineDialog::update_ams_check(MachineObject *obj)
}
}
void SelectMachineDialog::update_filament_change_count()
{
/*check filament change times*/
PartPlate * part_plate = m_plater->get_partplate_list().get_curr_plate();
PrintBase * print = nullptr;
GCodeResult *gcode_result = nullptr;
part_plate->get_print(&print, &gcode_result, NULL);
if (gcode_result && gcode_result->filament_change_count_map.size() > 0 && m_ams_mapping_result.size() > 0) {
std::vector<int> filament_ids;
for (auto mr : m_ams_mapping_result) {
if (mr.ams_id == std::to_string(VIRTUAL_TRAY_MAIN_ID) || mr.ams_id == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { filament_ids.push_back(mr.id); }
}
int hand_changes_count = 0;
for (auto fi : filament_ids) {
for (auto counts : gcode_result->filament_change_count_map) {
if (counts.first.first == fi || counts.first.second == fi) { hand_changes_count += counts.second; }
}
}
if (hand_changes_count > 0) {
m_change_filament_times_sizer->Show(true);
m_txt_change_filament_times->Show(true);
m_txt_change_filament_times->SetLabel(wxString::Format(_L("You picked both external and AMS filament, You will need to manually change filament %d times."), hand_changes_count));
}
}
Layout();
Fit();
}
void SelectMachineDialog::update_show_status()
{
// refreshing return
@@ -3139,6 +3230,7 @@ void SelectMachineDialog::update_show_status()
if (m_ams_mapping_result.empty()) {
if (m_checkbox_list["use_ams"]->getValue() == "on") {
do_ams_mapping(obj_);
update_filament_change_count();
} else {
clean_ams_mapping = true;
}
@@ -3221,11 +3313,9 @@ void SelectMachineDialog::update_show_status()
return;
}
// do ams mapping if no ams result
if (m_ams_mapping_result.empty()) {
do_ams_mapping(obj_);
}
//if (m_ams_mapping_result.empty()) {
// do_ams_mapping(obj_);
//}
const auto& full_config = wxGetApp().preset_bundle->full_config();
size_t nozzle_nums = full_config.option<ConfigOptionFloats>("nozzle_diameter")->values.size();
@@ -3532,6 +3622,9 @@ void SelectMachineDialog::set_default()
m_print_info = "";
m_comboBox_printer->SetValue(wxEmptyString);
m_comboBox_printer->Enable();
m_mapping_sugs_sizer->Show(false);
m_change_filament_times_sizer->Show(false);
m_txt_change_filament_times->Show(false);
// rset status bar
m_status_bar->reset();
@@ -4023,12 +4116,12 @@ void SelectMachineDialog::set_default_normal(const ThumbnailData &data)
m_basic_panel->Layout();
m_basic_panel->Fit();
//disable pei bed
DeviceManager* dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager();
// disable pei bed
DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager();
if (!dev_manager) return;
MachineObject* obj_ = dev_manager->get_selected_machine();
wxSize screenSize = wxGetDisplaySize();
auto dialogSize = this->GetSize();
MachineObject *obj_ = dev_manager->get_selected_machine();
wxSize screenSize = wxGetDisplaySize();
auto dialogSize = this->GetSize();
#ifdef __WINDOWS__