FIX: fix check k / n logic

Change-Id: I0f9fe5c95523d79b4c6435555d10f2d641639b13
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2023-01-12 11:39:16 +08:00 committed by Lane.Wei
parent 21485dec6a
commit f701b4efd5
7 changed files with 91 additions and 30 deletions

View File

@ -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);

View File

@ -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());
}

View File

@ -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);

View File

@ -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();
}

View File

@ -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<Preset*> user_filaments;

View File

@ -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);
}

View File

@ -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);