From efa2547a4f62a904be3526c9467cd6607711cac0 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 20 Sep 2023 09:53:09 +0200 Subject: [PATCH] Thumbnails: Fix for SPE-1895 : SLA crash when export .sl1 / .sl1s files --- src/slic3r/GUI/BackgroundSlicingProcess.cpp | 38 +++++++++++++++++---- src/slic3r/GUI/GUI.cpp | 2 +- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 4d2e58727b..519a83746f 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -9,6 +9,7 @@ #include "GUI.hpp" #include "MainFrame.hpp" #include "format.hpp" +#include "libslic3r/GCode/Thumbnails.hpp" #include #include @@ -181,10 +182,22 @@ void BackgroundSlicingProcess::process_sla() const std::string export_path = m_sla_print->print_statistics().finalize_output_path(m_export_path); - ThumbnailsList thumbnails = this->render_thumbnails( - ThumbnailsParams{current_print()->full_print_config().option("thumbnails")->values, true, true, true, true}); + auto [thumbnails_list, errors] = GCodeThumbnails::make_and_check_thumbnail_list(current_print()->full_print_config()); - m_sla_print->export_print(export_path, thumbnails); + if (errors != enum_bitmask()) { + std::string error_str = format("Invalid thumbnails value:"); + error_str += GCodeThumbnails::get_error_string(errors); + throw Slic3r::ExportError(error_str); + } + + Vec2ds sizes; + if (!thumbnails_list.empty()) { + sizes.reserve(thumbnails_list.size()); + for (const auto& [format, size] : thumbnails_list) + sizes.emplace_back(size); + } + ThumbnailsList thumbnails = this->render_thumbnails(ThumbnailsParams{sizes, true, true, true, true }); + m_sla_print->export_print(export_path, thumbnails); m_print->set_status(100, GUI::format(_L("Masked SLA file exported to %1%"), export_path)); } else if (! m_upload_job.empty()) { @@ -735,9 +748,22 @@ void BackgroundSlicingProcess::prepare_upload() m_upload_job.upload_data.upload_path = output_name_str; } else { m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); - - ThumbnailsList thumbnails = this->render_thumbnails( - ThumbnailsParams{current_print()->full_print_config().option("thumbnails")->values, true, true, true, true}); + + auto [thumbnails_list, errors] = GCodeThumbnails::make_and_check_thumbnail_list(current_print()->full_print_config()); + + if (errors != enum_bitmask()) { + std::string error_str = format("Invalid thumbnails value:"); + error_str += GCodeThumbnails::get_error_string(errors); + throw Slic3r::ExportError(error_str); + } + + Vec2ds sizes; + if (!thumbnails_list.empty()) { + sizes.reserve(thumbnails_list.size()); + for (const auto& [format, size] : thumbnails_list) + sizes.emplace_back(size); + } + ThumbnailsList thumbnails = this->render_thumbnails(ThumbnailsParams{ sizes, true, true, true, true }); m_sla_print->export_print(source_path.string(),thumbnails, m_upload_job.upload_data.upload_path.filename().string()); } diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index a74fd7f3dd..d0c8aa5733 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -209,7 +209,7 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt } break; case coPoints:{ - if (opt_key == "bed_shape" || opt_key == "thumbnails") { + if (opt_key == "bed_shape") { config.option(opt_key)->values = boost::any_cast>(value); break; }