From 59e4a5aba6622829b16c57ffb7164a9fb292b148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0ach?= Date: Fri, 6 Dec 2024 17:15:08 +0100 Subject: [PATCH] Fix ui hanging while slicing - It was caused by improperly setting m_print to fff_print. --- src/slic3r/GUI/BackgroundSlicingProcess.hpp | 4 ++-- src/slic3r/GUI/Plater.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp index 72f6884de3..d11d1d1c33 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -89,8 +89,8 @@ public: ~BackgroundSlicingProcess(); void set_temp_output_path(int bed_idx); - void set_fff_print(Print* print) { if (m_fff_print != print) stop(); m_fff_print = print; m_print = dynamic_cast(print); } - void set_sla_print(SLAPrint *print) { if (m_sla_print != print) stop(); m_sla_print = print; m_print = dynamic_cast(print); } + void set_fff_print(Print* print) { if (m_fff_print != print) stop(); m_fff_print = print; } + void set_sla_print(SLAPrint *print) { if (m_sla_print != print) stop(); m_sla_print = print; } void set_thumbnail_cb(ThumbnailsGeneratorCallback cb) { m_thumbnail_cb = cb; } void set_gcode_result(GCodeProcessorResult* result) { m_gcode_result = result; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index c22cf93413..ff12a5673d 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6578,9 +6578,12 @@ void Plater::connect_gcode_all() { Print *original_print{&active_fff_print()}; const int original_bed{s_multiple_beds.get_active_bed()}; + PrinterTechnology original_technology{this->printer_technology()}; + ScopeGuard guard{[&](){ this->p->background_process.set_fff_print(original_print); s_multiple_beds.set_active_bed(original_bed); + this->p->background_process.select_technology(original_technology); }}; for (std::size_t print_index{0}; print_index < this->get_fff_prints().size(); ++print_index) { @@ -6590,6 +6593,7 @@ void Plater::connect_gcode_all() { } this->p->background_process.set_fff_print(print.get()); this->p->background_process.set_temp_output_path(print_index); + this->p->background_process.select_technology(this->p->printer_technology); PrintHostJob upload_job; upload_job.upload_data = upload_job_template.upload_data;