From f6a4ebe87c1280f4255882dc4ae7722e13fbf42c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 1 Nov 2025 13:21:27 +0800 Subject: [PATCH] Fix auto calib crash --- src/slic3r/Utils/CalibUtils.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 1d1d65e5a0..394e1e9e7c 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -818,19 +818,15 @@ void CalibUtils::set_for_auto_pa_model_and_config(const std::vector & }); for (const CalibInfo &calib_info : calib_infos) { - int index = get_index_for_extruder_parameter(print_config, "outer_wall_speed", calib_info.extruder_id, calib_info.extruder_type, calib_info.nozzle_volume_type); - float wall_speed = CalibPressureAdvance::find_optimal_PA_speed(full_config, print_config.get_abs_value("line_width"), print_config.get_abs_value("layer_height"), - calib_info.extruder_id, 0); - - ConfigOptionFloats *wall_speed_speed_opt = print_config.option("outer_wall_speed"); - std::vector new_speeds = wall_speed_speed_opt->values; - new_speeds[index] = wall_speed; ModelObject* object = model.objects[calib_info.index]; - object->config.set_key_value("outer_wall_speed", new ConfigOptionFloats(new_speeds)); + object->config.set_key_value("outer_wall_speed", + new ConfigOptionFloat(CalibPressureAdvance::find_optimal_PA_speed( + full_config, print_config.get_abs_value("line_width"), + print_config.get_abs_value("layer_height"), calib_info.extruder_id, 0))); } for (const auto opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { - print_config.set_key_value(opt.first, new ConfigOptionFloat(nozzle_diameter * opt.second / 100)); + print_config.set_key_value(opt.first, new ConfigOptionFloatOrPercent(nozzle_diameter * opt.second / 100, false)); } for (const auto opt : SuggestedConfigCalibPAPattern().int_pairs) { print_config.set_key_value(opt.first, new ConfigOptionInt(opt.second)); } @@ -1603,6 +1599,7 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f Print *fff_print = dynamic_cast(print); fff_print->set_calib_params(params); + fff_print->is_BBL_printer() = true; //StringObjectException warning; //auto err = print->validate(&warning); @@ -1887,6 +1884,8 @@ void CalibUtils::send_to_print(const std::vector &calib_infos, wxStri } } + print_worker = std::make_unique>(wxGetApp().plater(), std::move(process_bar), "calib_worker"); + auto print_job = std::make_shared(dev_id); print_job->m_dev_ip = obj_->get_dev_ip(); print_job->m_ftp_folder = obj_->get_ftp_folder();