diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index a2ef254d05..9a823135b3 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -513,6 +513,8 @@ std::string AppConfig::load() PrinterCaliInfo cali_info; if (calis_j.contains("dev_id")) cali_info.dev_id = calis_j["dev_id"].get(); + if (calis_j.contains("cali_finished")) + cali_info.cali_finished = bool(calis_j["cali_finished"].get()); if (calis_j.contains("flow_ratio")) cali_info.cache_flow_ratio = calis_j["flow_ratio"].get(); if (calis_j.contains("presets")) { @@ -638,6 +640,7 @@ void AppConfig::save() json cali_json; cali_json["dev_id"] = cali_info.dev_id; cali_json["flow_ratio"] = cali_info.cache_flow_ratio; + cali_json["cali_finished"] = cali_info.cali_finished ? 1 : 0; for (auto filament_preset : cali_info.selected_presets) { json preset_json; preset_json["tray_id"] = filament_preset.tray_id; @@ -985,6 +988,7 @@ void AppConfig::save_printer_cali_infos(const PrinterCaliInfo &cali_info) if (iter == m_printer_cali_infos.end()) { m_printer_cali_infos.emplace_back(cali_info); } else { + (*iter).cali_finished = cali_info.cali_finished; (*iter).cache_flow_ratio = cali_info.cache_flow_ratio; (*iter).selected_presets = cali_info.selected_presets; } diff --git a/src/libslic3r/Calib.hpp b/src/libslic3r/Calib.hpp index eb36ad65de..b7a9981d89 100644 --- a/src/libslic3r/Calib.hpp +++ b/src/libslic3r/Calib.hpp @@ -76,6 +76,7 @@ public: struct PrinterCaliInfo { std::string dev_id; + bool cali_finished = true; float cache_flow_ratio; std::vector selected_presets; }; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index 51c13346e2..2dafff88d5 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -249,11 +249,7 @@ void CalibrationWizard::cache_preset_info(MachineObject* obj, float nozzle_dia) CaliPresetStage stage; preset_page->get_cali_stage(stage, obj->cache_flow_ratio); - PrinterCaliInfo printer_cali_info; - printer_cali_info.dev_id = obj->dev_id; - printer_cali_info.cache_flow_ratio = obj->cache_flow_ratio; - printer_cali_info.selected_presets = obj->selected_cali_preset; - wxGetApp().app_config->save_printer_cali_infos(printer_cali_info); + back_preset_info(obj, false); } void CalibrationWizard::recover_preset_info(MachineObject *obj) @@ -262,12 +258,23 @@ void CalibrationWizard::recover_preset_info(MachineObject *obj) for (const auto& back_info : back_infos) { if (obj && (obj->dev_id == back_info.dev_id) ) { obj->dev_id = back_info.dev_id; + obj->cali_finished = back_info.cali_finished; obj->cache_flow_ratio = back_info.cache_flow_ratio; obj->selected_cali_preset = back_info.selected_presets; } } } +void CalibrationWizard::back_preset_info(MachineObject *obj, bool cali_finish) +{ + PrinterCaliInfo printer_cali_info; + printer_cali_info.dev_id = obj->dev_id; + printer_cali_info.cali_finished = cali_finish; + printer_cali_info.cache_flow_ratio = obj->cache_flow_ratio; + printer_cali_info.selected_presets = obj->selected_cali_preset; + wxGetApp().app_config->save_printer_cali_infos(printer_cali_info); +} + void CalibrationWizard::on_cali_go_home() { // can go home? confirm to continue @@ -294,14 +301,19 @@ void CalibrationWizard::on_cali_go_home() } else { assert(false); } - if (!m_page_steps.empty()) + if (!m_page_steps.empty()) { + back_preset_info(curr_obj, true); show_step(m_page_steps.front()); + } }); go_home_dialog->update_text(_L("Are you sure to cancel the current calibration and return to the home page?")); go_home_dialog->on_show(); } else { - if (!m_page_steps.empty()) show_step(m_page_steps.front()); + if (!m_page_steps.empty()) { + back_preset_info(curr_obj, true); + show_step(m_page_steps.front()); + } } } @@ -401,7 +413,7 @@ void PressureAdvanceWizard::on_device_connected(MachineObject* obj) if (m_curr_step != cali_step) { if (obj_cali_mode == m_mode) { - if (obj->is_in_printing() /*|| obj->is_printing_finished()*/ || obj->print_status == "FINISH") { + if (!obj->cali_finished && (obj->is_in_printing() || obj->is_printing_finished())) { CalibrationWizard::set_cali_method(method); show_step(cali_step); } @@ -568,6 +580,9 @@ void PressureAdvanceWizard::on_cali_save() } CalibUtils::set_PA_calib_result({ new_pa_cali_result }); } + back_preset_info(curr_obj, true); + MessageDialog msg_dlg(nullptr, _L("Flow Dynamics Calibration result has been saved to the printer"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); } else if (curr_obj->get_printer_series() == PrinterSeries::SERIES_P1P) { auto save_page = static_cast(save_step->page); @@ -598,12 +613,13 @@ void PressureAdvanceWizard::on_cali_save() } curr_obj->command_extrusion_cali_set(tray_id, setting_id, "", new_k_value, new_n_value, bed_temp, nozzle_temp, max_volumetric_speed); + back_preset_info(curr_obj, true); + MessageDialog msg_dlg(nullptr, _L("Flow Dynamics Calibration result has been saved to the printer"), wxEmptyString, wxOK); + msg_dlg.ShowModal(); } else { assert(false); } - MessageDialog msg_dlg(nullptr, _L("Flow Dynamics Calibration result has been saved to the printer"), wxEmptyString, wxOK); - msg_dlg.ShowModal(); } show_step(start_step); } @@ -928,6 +944,7 @@ void FlowRateWizard::on_cali_save() } } + back_preset_info(curr_obj, true); MessageDialog msg_dlg(nullptr, _L("Flow rate calibration result has been saved to preset"), wxEmptyString, wxOK); msg_dlg.ShowModal(); } @@ -974,6 +991,7 @@ void FlowRateWizard::on_cali_save() return; } + back_preset_info(curr_obj, true); MessageDialog msg_dlg(nullptr, _L("Flow rate calibration result has been saved to preset"), wxEmptyString, wxOK); msg_dlg.ShowModal(); } @@ -1001,7 +1019,7 @@ void FlowRateWizard::on_device_connected(MachineObject* obj) if (obj) { this->set_cali_method(method); if (obj_cali_mode == m_mode) { - if (obj->is_in_printing() /*|| obj->is_printing_finished()*/ || obj->print_status == "FINISH") { + if (!obj->cali_finished && (obj->is_in_printing() || obj->is_printing_finished())) { if (method == CalibrationMethod::CALI_METHOD_MANUAL) { if (cali_stage == 1) { if (m_curr_step != cali_coarse_step) @@ -1089,6 +1107,8 @@ void FlowRateWizard::cache_coarse_info(MachineObject *obj) wxString out_name; coarse_page->get_result(&obj->cache_flow_ratio, &out_name); + + back_preset_info(obj, false); } MaxVolumetricSpeedWizard::MaxVolumetricSpeedWizard(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) @@ -1280,7 +1300,7 @@ void MaxVolumetricSpeedWizard::on_device_connected(MachineObject *obj) if (obj) { this->set_cali_method(method); if (obj_cali_mode == m_mode) { - if (obj->is_in_printing() /*|| obj->is_printing_finished()*/ || obj->print_status == "FINISH") { + if (!obj->cali_finished && (obj->is_in_printing() || obj->is_printing_finished())) { if (m_curr_step != cali_step) { show_step(cali_step); } diff --git a/src/slic3r/GUI/CalibrationWizard.hpp b/src/slic3r/GUI/CalibrationWizard.hpp index 53334a319b..5896afb722 100644 --- a/src/slic3r/GUI/CalibrationWizard.hpp +++ b/src/slic3r/GUI/CalibrationWizard.hpp @@ -64,6 +64,7 @@ public: virtual void cache_preset_info(MachineObject* obj, float nozzle_dia); virtual void recover_preset_info(MachineObject *obj); + virtual void back_preset_info(MachineObject *obj, bool cali_finish); protected: void on_cali_go_home(); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 300099d846..d5437c50e5 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -630,6 +630,7 @@ public: // 3: save tray_id, filament_id, setting_id, and name, nozzle_dia std::vector selected_cali_preset; float cache_flow_ratio { 0.0 }; + bool cali_finished = true; bool has_get_pa_calib_tab{ false }; std::vector pa_calib_tab;