From 6ea3259d05aba7a181c6f35f8dff613e16dda400 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Mon, 5 Jun 2023 09:25:43 +0800 Subject: [PATCH] ENH: Improve some details for pa calib Change-Id: I5d4e1b6a3385f28b616989e2a23cfda627eb79d8 (cherry picked from commit 01827ef8ede395d4bed856585e9ef6b316ee1d2c) --- src/slic3r/GUI/CalibrationWizard.cpp | 8 +++- src/slic3r/GUI/DeviceManager.cpp | 43 ++++++++++++++------ src/slic3r/GUI/DeviceManager.hpp | 26 ++++++++---- src/slic3r/Utils/CalibUtils.cpp | 60 ++++++++++++++-------------- src/slic3r/Utils/CalibUtils.hpp | 18 +-------- 5 files changed, 89 insertions(+), 66 deletions(-) diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index f86841641..844e392f2 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -1618,11 +1618,13 @@ bool PressureAdvanceWizard::start_calibration(std::vector tray_ids) for (int tray_id : tray_ids) { X1CCalibInfos::X1CCalibInfo calib_info; calib_info.tray_id = tray_id; + calib_info.nozzle_diameter = dynamic_cast(m_printer_preset->config.option("nozzle_diameter"))->get_at(0); + calib_info.filament_id = m_filament_preset->filament_id; calib_info.setting_id = m_filament_preset->setting_id; calib_info.bed_temp = bed_temp; calib_info.nozzle_temp = nozzle_temp; calib_info.max_volumetric_speed = max_volumetric_speed; - calib_infos.calib_infos.push_back(calib_info); + calib_infos.calib_datas.push_back(calib_info); } std::string error_message; CalibUtils::calib_PA(calib_infos, error_message); @@ -2064,11 +2066,13 @@ bool FlowRateWizard::start_calibration(std::vector tray_ids) for (int tray_id : tray_ids) { X1CCalibInfos::X1CCalibInfo calib_info; calib_info.tray_id = tray_id; + calib_info.nozzle_diameter = dynamic_cast(m_printer_preset->config.option("nozzle_diameter"))->get_at(0); + calib_info.filament_id = m_filament_preset->filament_id; calib_info.setting_id = m_filament_preset->setting_id; calib_info.bed_temp = bed_temp; calib_info.nozzle_temp = nozzle_temp; calib_info.max_volumetric_speed = max_volumetric_speed; - calib_infos.calib_infos.push_back(calib_info); + calib_infos.calib_datas.push_back(calib_info); } std::string error_message; CalibUtils::calib_flowrate_X1C(calib_infos, error_message); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 3be946397..92fc4514a 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1874,17 +1874,18 @@ int MachineObject::command_start_calibration(bool vibration, bool bed_leveling, } } -int MachineObject::command_start_pa_calibration(const CalibDatas &pa_data) +int MachineObject::command_start_pa_calibration(const X1CCalibInfos& pa_data) { pa_calib_results.clear(); if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { json j; j["print"]["command"] = "extrusion_cali"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_diameter"] = std::to_string(pa_data.calib_datas[0].nozzle_diameter); for (int i = 0; i < pa_data.calib_datas.size(); ++i) { - j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp; j["print"]["filaments"][i]["tray_id"] = pa_data.calib_datas[i].tray_id; + j["print"]["filaments"][i]["bed_temp"] = pa_data.calib_datas[i].bed_temp; j["print"]["filaments"][i]["filament_id"] = pa_data.calib_datas[i].filament_id; j["print"]["filaments"][i]["setting_id"] = pa_data.calib_datas[i].setting_id; j["print"]["filaments"][i]["nozzle_temp"] = pa_data.calib_datas[i].nozzle_temp; @@ -1918,31 +1919,29 @@ int MachineObject::command_set_pa_calibration(const std::vector& return -1; } -int MachineObject::command_delete_pa_calibration(const PACalibResult& pa_calib) +int MachineObject::command_delete_pa_calibration(const PACalibIndexInfo& pa_calib) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { json j; j["print"]["command"] = "extrusion_cali_del"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["tray_id"] = pa_calib.tray_id; + j["print"]["tray_id"] = pa_calib.tray_id; // no need j["print"]["filament_id"] = pa_calib.filament_id; - j["print"]["setting_id"] = pa_calib.setting_id; - j["print"]["name"] = pa_calib.name; - j["print"]["k_value"] = std::to_string(pa_calib.k_value); - j["print"]["n_coef"] = std::to_string(pa_calib.n_coef); + j["print"]["index"] = pa_calib.index; + j["print"]["nozzle_diameter"] = std::to_string(pa_calib.nozzle_diameter); return this->publish_json(j.dump()); } return -1; } -int MachineObject::command_get_pa_calibration_infos(const std::string& filament_id) +int MachineObject::command_get_pa_calibration_tab(const std::string &filament_id) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { json j; j["print"]["command"] = "extrusion_cali_get"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["sequence_id"] = filament_id; + j["print"]["filament_id"] = filament_id; return this->publish_json(j.dump()); } @@ -1961,7 +1960,23 @@ int MachineObject::command_get_pa_calibration_result() return -1; } -int MachineObject::command_start_flow_ratio_calibration(const CalibDatas& calib_data) +int MachineObject::commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info) +{ + if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { + json j; + j["print"]["command"] = "extrusion_cali_sel"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["tray_id"] = pa_calib_info.tray_id; + j["print"]["index"] = pa_calib_info.index; + j["print"]["filament_id"] = pa_calib_info.filament_id; + j["print"]["nozzle_diameter"] = std::to_string(pa_calib_info.nozzle_diameter); + + return this->publish_json(j.dump()); + } + return -1; +} + +int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data) { if ((printer_type == "BL-P001" || printer_type == "BL-P002")) { json j; @@ -1969,8 +1984,9 @@ int MachineObject::command_start_flow_ratio_calibration(const CalibDatas& calib_ j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); for (int i = 0; i < calib_data.calib_datas.size(); ++i) { - j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp; j["print"]["filaments"][i]["tray_id"] = calib_data.calib_datas[i].tray_id; + j["print"]["filaments"][i]["nozzle_diameter"] = std::to_string(calib_data.calib_datas[i].nozzle_diameter); + j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp; j["print"]["filaments"][i]["filament_id"] = calib_data.calib_datas[i].filament_id; j["print"]["filaments"][i]["setting_id"] = calib_data.calib_datas[i].setting_id; j["print"]["filaments"][i]["nozzle_temp"] = calib_data.calib_datas[i].nozzle_temp; @@ -3753,6 +3769,8 @@ int MachineObject::parse_json(std::string payload) pa_calib_result.tray_id = (*it)["tray_id"].get(); pa_calib_result.filament_id = (*it)["filament_id"].get(); pa_calib_result.setting_id = (*it)["setting_id"].get(); + pa_calib_result.nozzle_diameter = stof(jj["nozzle_diameter"].get().c_str()); + if ((*it)["k_value"].is_number_float()) pa_calib_result.k_value = (*it)["k_value"].get(); else if ((*it)["k_value"].is_string()) @@ -3777,6 +3795,7 @@ int MachineObject::parse_json(std::string payload) flow_ratio_calib_result.tray_id = (*it)["tray_id"].get(); flow_ratio_calib_result.filament_id = (*it)["filament_id"].get(); flow_ratio_calib_result.setting_id = (*it)["setting_id"].get(); + flow_ratio_calib_result.nozzle_diameter = stof((*it)["nozzle_diameter"].get().c_str()); flow_ratio_calib_result.flow_ratio = stof((*it)["flow_ratio"].get().c_str()); flow_ratio_results.push_back(flow_ratio_calib_result); diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 3705d9362..70ab02a6b 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -308,26 +308,28 @@ public: static wxString get_hms_msg_level_str(HMSMessageLevel level); }; -class CalibDatas +class X1CCalibInfos { public: - struct CalibData + struct X1CCalibInfo { int tray_id; int bed_temp; int nozzle_temp; + float nozzle_diameter; std::string filament_id; std::string setting_id; float max_volumetric_speed; }; - std::vector calib_datas; + std::vector calib_datas; }; class PACalibResult { public: int tray_id; + float nozzle_diameter; std::string filament_id; std::string setting_id; std::string name; @@ -335,10 +337,19 @@ public: float n_coef; }; +struct PACalibIndexInfo +{ + int tray_id; + int index; + float nozzle_diameter; + std::string filament_id; +}; + class FlowRatioCalibResult { public: int tray_id; + float nozzle_diameter; std::string filament_id; std::string setting_id; float flow_ratio; @@ -806,14 +817,15 @@ public: int command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali); // PA calibration - int command_start_pa_calibration(const CalibDatas& pa_data); + int command_start_pa_calibration(const X1CCalibInfos& pa_data); int command_set_pa_calibration(const std::vector& pa_calib_values); - int command_delete_pa_calibration(const PACalibResult& pa_calib); - int command_get_pa_calibration_infos(const std::string& filament_id = ""); + int command_delete_pa_calibration(const PACalibIndexInfo& pa_calib); + int command_get_pa_calibration_tab(const std::string& filament_id = ""); int command_get_pa_calibration_result(); + int commnad_select_pa_calibration(const PACalibIndexInfo& pa_calib_info); // flow ratio calibration - int command_start_flow_ratio_calibration(const CalibDatas& calib_data); + int command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data); int command_get_flow_ratio_calibration_result(); int command_unload_filament(); diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 1d6756554..b47b1989b 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -77,20 +77,8 @@ void CalibUtils::calib_PA(const X1CCalibInfos& calib_infos, std::string& error_m if (obj_ == nullptr) return; - CalibDatas pa_datas; - for (auto calib_info : calib_infos.calib_infos) { - CalibDatas::CalibData pa_calib; - pa_calib.tray_id = calib_info.tray_id; - pa_calib.setting_id = calib_info.setting_id; - pa_calib.bed_temp = calib_info.bed_temp; - pa_calib.nozzle_temp = calib_info.nozzle_temp; - pa_calib.max_volumetric_speed = calib_info.max_volumetric_speed; - - pa_datas.calib_datas.push_back(pa_calib); - } - - if (pa_datas.calib_datas.size() > 0) - obj_->command_start_pa_calibration(pa_datas); + if (calib_infos.calib_datas.size() > 0) + obj_->command_start_pa_calibration(calib_infos); } void CalibUtils::emit_get_PA_calib_results() @@ -130,7 +118,7 @@ void CalibUtils::emit_get_PA_calib_infos() if (obj_ == nullptr) return; - obj_->command_get_pa_calibration_infos(); + obj_->command_get_pa_calibration_tab(); } bool CalibUtils::get_PA_calib_tab(std::vector &pa_calib_infos) @@ -160,6 +148,32 @@ void CalibUtils::set_PA_calib_result(const std::vector& pa_calib_ obj_->command_set_pa_calibration(pa_calib_values); } +void CalibUtils::select_PA_calib_result(const PACalibIndexInfo& pa_calib_info) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) + return; + + MachineObject* obj_ = dev->get_selected_machine(); + if (obj_ == nullptr) + return; + + obj_->commnad_select_pa_calibration(pa_calib_info); +} + +void CalibUtils::delete_PA_calib_result(const PACalibIndexInfo& pa_calib_info) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) + return; + + MachineObject* obj_ = dev->get_selected_machine(); + if (obj_ == nullptr) + return; + + obj_->command_delete_pa_calibration(pa_calib_info); +} + void CalibUtils::calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message) { DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); @@ -170,20 +184,8 @@ void CalibUtils::calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::strin if (obj_ == nullptr) return; - CalibDatas calib_datas; - for (auto calib_info : calib_infos.calib_infos) { - CalibDatas::CalibData pa_calib; - pa_calib.tray_id = calib_info.tray_id; - pa_calib.setting_id = calib_info.setting_id; - pa_calib.bed_temp = calib_info.bed_temp; - pa_calib.nozzle_temp = calib_info.nozzle_temp; - pa_calib.max_volumetric_speed = calib_info.max_volumetric_speed; - - calib_datas.calib_datas.push_back(pa_calib); - } - - if (calib_datas.calib_datas.size() > 0) - obj_->command_start_flow_ratio_calibration(calib_datas); + if (calib_infos.calib_datas.size() > 0) + obj_->command_start_flow_ratio_calibration(calib_infos); } void CalibUtils::emit_get_flow_ratio_calib_results() diff --git a/src/slic3r/Utils/CalibUtils.hpp b/src/slic3r/Utils/CalibUtils.hpp index 631dd6b97..30f2f640f 100644 --- a/src/slic3r/Utils/CalibUtils.hpp +++ b/src/slic3r/Utils/CalibUtils.hpp @@ -8,22 +8,6 @@ class ProgressIndicator; class Preset; namespace GUI { - -class X1CCalibInfos -{ -public: - struct X1CCalibInfo - { - int tray_id; - std::string setting_id; - int bed_temp; - int nozzle_temp; - float max_volumetric_speed; - }; - - std::vector calib_infos; -}; - class CalibInfo { public: @@ -48,6 +32,8 @@ public: static void emit_get_PA_calib_infos(); static bool get_PA_calib_tab(std::vector &pa_calib_infos); static void set_PA_calib_result(const std::vector& pa_calib_values); + static void select_PA_calib_result(const PACalibIndexInfo &pa_calib_info); + static void delete_PA_calib_result(const PACalibIndexInfo &pa_calib_info); static void calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message); static void emit_get_flow_ratio_calib_results();