From c382a8a9c3fdbd7b67039d15f43769c422061bed Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Tue, 30 Sep 2025 16:08:26 +0800 Subject: [PATCH] ENH: support_clump_position_calibration jira: [STUDIO-14896] Change-Id: I2913a1e4022686889aaa94ee31b787930200d02d (cherry picked from commit 14370c8910878c2182189b42e013c1323615c310) --- resources/printers/N7.json | 1 + src/slic3r/GUI/Calibration.cpp | 16 ++++++++++++++-- src/slic3r/GUI/Calibration.hpp | 1 + src/slic3r/GUI/DeviceCore/DevConfig.cpp | 1 + src/slic3r/GUI/DeviceCore/DevConfig.h | 2 ++ src/slic3r/GUI/DeviceManager.cpp | 7 +++++-- src/slic3r/GUI/DeviceManager.hpp | 2 +- 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/resources/printers/N7.json b/resources/printers/N7.json index 6cd3c6bd40..5e8cfa2ae1 100644 --- a/resources/printers/N7.json +++ b/resources/printers/N7.json @@ -46,6 +46,7 @@ "support_lidar_calibration": false, "support_nozzle_offset_calibration": false, "support_high_tempbed_calibration": true, + "support_clump_position_calibration": true, "support_ai_monitoring": true, "support_first_layer_inspect": false, "support_save_remote_print_file_to_storage": true, diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index 85cdf15aa6..a23dc07c0e 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -55,7 +55,8 @@ CalibrationDialog::CalibrationDialog(Plater *plater) select_vibration = create_check_option(_L("Vibration compensation"), cali_left_panel, _L("Vibration compensation"), "vibration"); select_motor_noise = create_check_option(_L("Motor noise cancellation"), cali_left_panel, _L("Motor noise cancellation"), "motor_noise"); select_nozzle_cali = create_check_option(_L("Nozzle offset calibration"), cali_left_panel, _L("Nozzle offset calibration"), "nozzle_cali"); - select_heatbed_cali = create_check_option(_L("High-temperature Heatbed Calibration"), cali_left_panel, _L("High-temperature Heatbed Calibration"), "bed_cali"); + select_heatbed_cali = create_check_option(_L("High-temperature Heatbed Calibration"), cali_left_panel, _L("High-temperature Heatbed Calibration"), "bed_cali"); + select_clumppos_cali = create_check_option(_L("Nozzle clumping detection Calibration"), cali_left_panel, _L("Nozzle clumping detection Calibration"), "clump_pos_cali"); // STUDIO-10091 the default not checked option if(m_checkbox_list.count("bed_cali") != 0) @@ -70,6 +71,7 @@ CalibrationDialog::CalibrationDialog(Plater *plater) cali_left_sizer->Add(select_motor_noise, 0, wxLEFT, FromDIP(15)); cali_left_sizer->Add(select_nozzle_cali, 0, wxLEFT, FromDIP(15)); cali_left_sizer->Add(select_heatbed_cali, 0, wxLEFT, FromDIP(15)); + cali_left_sizer->Add(select_clumppos_cali, 0, wxLEFT, FromDIP(15)); cali_left_sizer->Add(0, FromDIP(30), 0, wxEXPAND, 0); auto cali_left_text_top = new wxStaticText(cali_left_panel, wxID_ANY, _L("Calibration program"), wxDefaultPosition, wxDefaultSize, 0); @@ -252,6 +254,13 @@ void CalibrationDialog::update_cali(MachineObject *obj) m_checkbox_list["bed_cali"]->SetValue(false); } + if (obj->GetConfig()->SupportCaliClumpPos()) { + select_clumppos_cali->Show(); + } else { + select_clumppos_cali->Hide(); + m_checkbox_list["clump_pos_cali"]->SetValue(false); + } + if (obj->is_calibration_running() || obj->is_calibration_done()) { if (obj->is_calibration_done()) { m_calibration_btn->Enable(); @@ -279,6 +288,8 @@ void CalibrationDialog::update_cali(MachineObject *obj) for (int i = 0; i < obj->stage_list_info.size(); i++) { m_calibration_flow->AppendItem(Slic3r::get_stage_string(obj->stage_list_info[i])); } + + last_stage_list_info = obj->stage_list_info; } int index = obj->get_curr_stage_idx(); m_calibration_flow->SelectItem(index); @@ -333,7 +344,8 @@ void CalibrationDialog::on_start_calibration(wxMouseEvent &event) m_checkbox_list["xcam_cali"]->GetValue(), m_checkbox_list["motor_noise"]->GetValue(), m_checkbox_list["nozzle_cali"]->GetValue(), - m_checkbox_list["bed_cali"]->GetValue() + m_checkbox_list["bed_cali"]->GetValue(), + m_checkbox_list["clump_pos_cali"]->GetValue() ); } } diff --git a/src/slic3r/GUI/Calibration.hpp b/src/slic3r/GUI/Calibration.hpp index 3b099ea421..35e006c446 100644 --- a/src/slic3r/GUI/Calibration.hpp +++ b/src/slic3r/GUI/Calibration.hpp @@ -45,6 +45,7 @@ private: wxWindow* select_motor_noise { nullptr }; wxWindow* select_nozzle_cali{ nullptr }; wxWindow* select_heatbed_cali{ nullptr }; + wxWindow* select_clumppos_cali{ nullptr }; wxWindow* create_check_option(wxString title, wxWindow *parent, wxString tooltip, std::string param); public: diff --git a/src/slic3r/GUI/DeviceCore/DevConfig.cpp b/src/slic3r/GUI/DeviceCore/DevConfig.cpp index bcabff22be..5b8776ad23 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfig.cpp +++ b/src/slic3r/GUI/DeviceCore/DevConfig.cpp @@ -50,6 +50,7 @@ void DevConfig::ParseCalibrationConfig(const json& print_json) DevJsonValParser::ParseVal(print_json, "support_nozzle_offset_calibration", m_support_calibration_nozzle_offset); DevJsonValParser::ParseVal(print_json, "support_high_tempbed_calibration", m_support_calibration_high_temp_bed); DevJsonValParser::ParseVal(print_json, "support_auto_flow_calibration", m_support_calibration_pa_flow_auto); + DevJsonValParser::ParseVal(print_json, "support_clump_position_calibration", m_support_calibration_clump_pos); } } \ No newline at end of file diff --git a/src/slic3r/GUI/DeviceCore/DevConfig.h b/src/slic3r/GUI/DeviceCore/DevConfig.h index 1468ffc19e..bc9cb78cd1 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfig.h +++ b/src/slic3r/GUI/DeviceCore/DevConfig.h @@ -39,6 +39,7 @@ public: bool SupportCalibrationLidar() const { return m_support_calibration_lidar; } bool SupportCalibrationNozzleOffset() const { return m_support_calibration_nozzle_offset; } bool SupportCalibrationHighTempBed() const { return m_support_calibration_high_temp_bed; } + bool SupportCaliClumpPos() const { return m_support_calibration_clump_pos; } bool SupportCalibrationPA_FlowAuto() const { return m_support_calibration_pa_flow_auto; } @@ -73,6 +74,7 @@ private: bool m_support_calibration_lidar = false; bool m_support_calibration_nozzle_offset = false; bool m_support_calibration_high_temp_bed = false; // High-temperature Heatbed Calibration + bool m_support_calibration_clump_pos = false; // clump position calibration bool m_support_calibration_pa_flow_auto = false;// PA flow calibration. used in SendPrint }; diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 3c9e61bd91..8eae555588 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -187,6 +187,8 @@ wxString Slic3r::get_stage_string(int stage) return _L("Measuring Surface"); case 58: return _L("Thermal Preconditioning for first layer optimization"); + case 65: + return _L("Calibrating the detection position of nozzle clumping"); // N7 default: BOOST_LOG_TRIVIAL(info) << "stage = " << stage; } @@ -1856,7 +1858,7 @@ bool MachineObject::is_support_command_calibration() return true; } -int MachineObject::command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali, bool motor_noise, bool nozzle_cali, bool bed_cali) +int MachineObject::command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali, bool motor_noise, bool nozzle_cali, bool bed_cali, bool clumppos_cali) { if (!is_support_command_calibration()) { // fixed gcode file @@ -1869,7 +1871,8 @@ int MachineObject::command_start_calibration(bool vibration, bool bed_leveling, json j; j["print"]["command"] = "calibration"; j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); - j["print"]["option"]= (bed_cali ? 1 << 5 : 0) + j["print"]["option"] = + (clumppos_cali ? 1 << 6 : 0) + + (bed_cali ? 1 << 5 : 0) + (nozzle_cali ? 1 << 4 : 0) + (motor_noise ? 1 << 3 : 0) + (vibration ? 1 << 2 : 0) diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index db0a78692e..8a1e34d0bf 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -757,7 +757,7 @@ public: int command_extruder_control(int nozzle_id, double val); // calibration printer bool is_support_command_calibration(); - int command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali, bool motor_noise, bool nozzle_cali, bool bed_cali); + int command_start_calibration(bool vibration, bool bed_leveling, bool xcam_cali, bool motor_noise, bool nozzle_cali, bool bed_cali, bool clumppos_cali); // PA calibration int command_start_pa_calibration(const X1CCalibInfos& pa_data, int mode = 0); // 0: automatic mode; 1: manual mode. default: automatic mode