From f701b4efd545cfd636601e2d59d68ba2fb18209d Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 12 Jan 2023 11:39:16 +0800 Subject: [PATCH] FIX: fix check k / n logic Change-Id: I0f9fe5c95523d79b4c6435555d10f2d641639b13 Signed-off-by: Stone Li --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 10 ++--- src/slic3r/GUI/DeviceManager.cpp | 8 ++++ src/slic3r/GUI/DeviceManager.hpp | 2 + src/slic3r/GUI/ExtrusionCalibration.cpp | 58 ++++++++++++++++++++----- src/slic3r/GUI/ExtrusionCalibration.hpp | 4 +- src/slic3r/GUI/StatusPanel.cpp | 30 ++++++++++--- src/slic3r/GUI/Widgets/AMSControl.cpp | 9 ++-- 7 files changed, 91 insertions(+), 30 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 6ef237d8d..5bb262ab2 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -377,7 +377,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) wxString n_text = m_input_n_val->GetTextCtrl()->GetValue(); if (is_virtual_tray()) { - if (!ExtrusionCalibration::check_k_n_validation(k_text, n_text)) { + if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); @@ -404,7 +404,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) if (!m_is_third) { // check and set k n if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { - if (!ExtrusionCalibration::check_k_n_validation(k_text, n_text)) { + if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); @@ -468,7 +468,7 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } else { if (obj) { if (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI)) { - if (!ExtrusionCalibration::check_k_n_validation(k_text, n_text)) { + if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); @@ -576,9 +576,9 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi update_widgets(); // set default value if (k.IsEmpty()) - k = "0.00"; + k = "0.000"; if (n.IsEmpty()) - n = "0.00"; + n = "0.000"; m_input_k_val->GetTextCtrl()->SetValue(k); m_input_n_val->GetTextCtrl()->SetValue(n); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index a8b642483..be1a43b42 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -441,6 +441,11 @@ bool MachineObject::is_in_extrusion_cali() bool MachineObject::is_extrusion_cali_finished() { + if (extrusion_cali_hold_count > 0) { + extrusion_cali_hold_count--; + return false; + } + if (boost::contains(m_gcode_file, "extrusion_cali") && this->mc_print_percent == 100) return true; @@ -1665,6 +1670,9 @@ int MachineObject::command_start_extrusion_cali(int tray_index, int nozzle_temp, j["print"]["nozzle_temp"] = nozzle_temp; j["print"]["bed_temp"] = bed_temp; j["print"]["max_volumetric_speed"] = max_volumetric_speed; + + extrusion_cali_hold_count = HOLD_COUNT_MAX; + this->mc_print_percent = 0; return this->publish_json(j.dump()); } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 383cb4169..c3366910a 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -455,6 +455,8 @@ public: std::string m_tray_now; // tray_now : "0" ~ "15" or "255" std::string m_tray_tar; // tray_tar : "0" ~ "15" or "255" + int extrusion_cali_hold_count = 0; + bool is_in_extrusion_cali(); bool is_extrusion_cali_finished(); void _parse_tray_now(std::string tray_now); diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index cc09a57fe..ac290a704 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -350,19 +350,23 @@ void ExtrusionCalibration::input_value_finish() void ExtrusionCalibration::show_info(bool show, bool is_error, wxString text) { - if (show && !is_error) { - m_info_text->Show(); - m_info_text->SetLabelText(text); - m_error_text->Hide(); - } else if (show && is_error) { + if (show && is_error) { m_error_text->Show(); m_error_text->SetLabelText(text); m_info_text->Hide(); - } else { + } + else if (show && !is_error) { + m_info_text->Show(); + m_info_text->SetLabelText(text); + m_error_text->Hide(); + } + else { if (is_error) { - m_error_text->Hide(); - } else { m_info_text->Hide(); + m_error_text->Show(); + } else { + m_info_text->Show(); + m_error_text->Hide(); } } } @@ -371,14 +375,15 @@ void ExtrusionCalibration::update() { if (obj) { if (obj->is_in_extrusion_cali()) { + show_info(true, false, wxString::Format(_L("Calibrating... %d%%"), obj->mc_print_percent)); m_cali_cancel->Show(); m_cali_cancel->Enable(); - show_info(true, false, wxString::Format(_L("Calibrating... %d%%"), obj->mc_print_percent)); - m_button_next_step->Hide(); m_button_cali->Hide(); + m_button_next_step->Hide(); } else if (obj->is_extrusion_cali_finished()) { show_info(true, false, _L("Calibration completed")); m_cali_cancel->Hide(); + m_button_cali->Show(); m_button_next_step->Show(); } else { show_info(false, false, wxEmptyString); @@ -440,6 +445,23 @@ void ExtrusionCalibration::on_click_cancel(wxCommandEvent& event) } } +bool ExtrusionCalibration::check_k_validation(wxString k_text) +{ + if (k_text.IsEmpty()) + return false; + double k = 0.0; + try { + k_text.ToDouble(&k); + } + catch (...) { + ; + } + + if (k < 0 || k > 0.5) + return false; + return true; +} + bool ExtrusionCalibration::check_k_n_validation(wxString k_text, wxString n_text) { if (k_text.IsEmpty() || n_text.IsEmpty()) @@ -470,7 +492,7 @@ void ExtrusionCalibration::on_click_save(wxCommandEvent &event) { wxString k_text = m_k_val->GetTextCtrl()->GetValue(); wxString n_text = m_n_val->GetTextCtrl()->GetValue(); - if (!ExtrusionCalibration::check_k_n_validation(k_text, n_text)) { + if (!ExtrusionCalibration::check_k_validation(k_text)) { wxString k_tips = _L("Please input a valid value (K in 0~0.5)"); wxString kn_tips = _L("Please input a valid value (K in 0~0.5, N in 0.6~2.0)"); MessageDialog msg_dlg(nullptr, k_tips, wxEmptyString, wxICON_WARNING | wxOK); @@ -552,6 +574,8 @@ void ExtrusionCalibration::update_combobox_filaments() m_comboBox_filament->SetValue(wxEmptyString); user_filaments.clear(); int selection_idx = -1; + int filament_index = -1; + int curr_selection = -1; wxArrayString filament_items; PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle && obj) { @@ -592,6 +616,16 @@ void ExtrusionCalibration::update_combobox_filaments() for (auto printer_str : printer_strs->values) { if (printer_preset_list.find(printer_str) != printer_preset_list.end()) { user_filaments.push_back(&(*filament_it)); + + // set default filament id + filament_index++; + if (filament_it->is_system + && !ams_filament_id.empty() + && filament_it->filament_id == ams_filament_id + ) { + curr_selection = filament_index; + } + wxString filament_name = wxString::FromUTF8(filament_it->name); filament_items.Add(filament_name); break; @@ -599,7 +633,7 @@ void ExtrusionCalibration::update_combobox_filaments() } } m_comboBox_filament->Set(filament_items); - m_comboBox_filament->SetSelection(selection_idx); + m_comboBox_filament->SetSelection(curr_selection); post_select_event(); } diff --git a/src/slic3r/GUI/ExtrusionCalibration.hpp b/src/slic3r/GUI/ExtrusionCalibration.hpp index 7265d9ab5..87afeb9e2 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.hpp +++ b/src/slic3r/GUI/ExtrusionCalibration.hpp @@ -56,12 +56,14 @@ public: // input is 1 or 2 void set_step(int step_index); - static bool check_k_n_validation(wxString k, wxString n); + static bool check_k_n_validation(wxString k_text, wxString n_text); + static bool check_k_validation(wxString k_text); MachineObject *obj { nullptr }; int ams_id { 0 }; /* 0 ~ 3 */ int tray_id { 0 }; /* 0 ~ 3 | 254 for virtual tray id*/ + std::string ams_filament_id; std::string m_filament_type; std::vector user_filaments; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index f6783f412..cfe13571f 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2554,11 +2554,27 @@ void StatusPanel::on_filament_extrusion_cali(wxCommandEvent &event) int ams_id_int = 0; int tray_id_int = 0; + + + // set ams_filament id is is bbl filament if (ams_id.compare(std::to_string(VIRTUAL_TRAY_ID)) == 0) { tray_id_int = VIRTUAL_TRAY_ID; - } else { + m_extrusion_cali_dlg->ams_filament_id = ""; + } + else { ams_id_int = atoi(ams_id.c_str()); tray_id_int = atoi(tray_id.c_str()); + + auto it = obj->amsList.find(ams_id); + if (it != obj->amsList.end()) { + auto tray_it = it->second->trayList.find(tray_id); + if (tray_it != it->second->trayList.end()) { + if (MachineObject::is_bbl_filament(tray_it->second->tag_uid)) + m_extrusion_cali_dlg->ams_filament_id = tray_it->second->setting_id; + else + m_extrusion_cali_dlg->ams_filament_id = ""; + } + } } try { @@ -2588,8 +2604,8 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event) m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); wxString k_val; wxString n_val; - k_val = wxString::Format("%.2f", obj->vt_tray.k); - n_val = wxString::Format("%.2f", obj->vt_tray.n); + k_val = wxString::Format("%.3f", obj->vt_tray.k); + n_val = wxString::Format("%.3f", obj->vt_tray.n); m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); m_filament_setting_dlg->Popup(wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, k_val, n_val); } else { @@ -2610,8 +2626,8 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event) if (it != obj->amsList.end()) { auto tray_it = it->second->trayList.find(tray_id); if (tray_it != it->second->trayList.end()) { - k_val = wxString::Format("%.2f", tray_it->second->k); - n_val = wxString::Format("%.2f", tray_it->second->n); + k_val = wxString::Format("%.3f", tray_it->second->k); + n_val = wxString::Format("%.3f", tray_it->second->n); wxColor color = AmsTray::decode_color(tray_it->second->color); m_filament_setting_dlg->set_color(color); m_filament_setting_dlg->ams_filament_id = tray_it->second->setting_id; @@ -2644,8 +2660,8 @@ void StatusPanel::on_ext_spool_edit(wxCommandEvent &event) m_filament_setting_dlg->tray_id = VIRTUAL_TRAY_ID; wxString k_val; wxString n_val; - k_val = wxString::Format("%.2f", obj->vt_tray.k); - n_val = wxString::Format("%.2f", obj->vt_tray.n); + k_val = wxString::Format("%.3f", obj->vt_tray.k); + n_val = wxString::Format("%.3f", obj->vt_tray.n); m_filament_setting_dlg->SetPosition(m_ams_control->GetScreenPosition()); m_filament_setting_dlg->Popup(wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, k_val, n_val); } diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 545bd9bc0..d9894dcd6 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -73,10 +73,9 @@ bool AMSinfo::parse_ams_info(Ams *ams, bool remain_flag, bool humidity_flag) info.material_state = AMSCanType::AMS_CAN_TYPE_THIRDBRAND; } - if (!remain_flag) { + if (!MachineObject::is_bbl_filament(it->second->tag_uid) || !remain_flag) { info.material_remain = 100; - } - else { + } else { info.material_remain = it->second->remain < 0 ? 0 : it->second->remain; info.material_remain = it->second->remain > 100 ? 100 : info.material_remain; } @@ -600,8 +599,8 @@ void AMSLib::render(wxDC &dc) //draw k&n if (m_show_kn) { - wxString str_k = wxString::Format("k %1.2f", m_info.k); - wxString str_n = wxString::Format("n %1.2f", m_info.n); + wxString str_k = wxString::Format("k %1.3f", m_info.k); + wxString str_n = wxString::Format("n %1.3f", m_info.n); dc.SetFont(::Label::Body_11); auto tsize = dc.GetMultiLineTextExtent(str_k); auto pot_k = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 - FromDIP(9) + tsize.y);