From f7c832ddafd59947106cc8e49cc05ccf21ed3135 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Thu, 1 Dec 2022 12:37:34 +0100 Subject: [PATCH] Fix crash when pressing 'A' without any objects on plater --- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 9 ++++++--- src/slic3r/GUI/Plater.cpp | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 9e62283e38..7214ccdaba 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -165,8 +165,6 @@ void ArrangeJob::process(Ctl &ctl) { static const auto arrangestr = _u8L("Arranging"); - ctl.update_status(0, arrangestr); - arrangement::ArrangeParams params; Points bedpts; ctl.call_on_main_thread([this, ¶ms, &bedpts]{ @@ -175,7 +173,12 @@ void ArrangeJob::process(Ctl &ctl) bedpts = get_bed_shape(*m_plater->config()); }).wait(); - auto count = unsigned(m_selected.size() + m_unprintable.size()); + auto count = unsigned(m_selected.size() + m_unprintable.size()); + + if (count == 0) // Should be taken care of by plater, but doesn't hurt + return; + + ctl.update_status(0, arrangestr); params.stopcondition = [&ctl]() { return ctl.was_canceled(); }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index e31f9ec61c..e73eedfebd 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4977,7 +4977,7 @@ bool Plater::priv::can_split_to_volumes() const bool Plater::priv::can_arrange() const { - if (model.objects.empty() && m_worker.is_idle()) return false; + if (model.objects.empty() || !m_worker.is_idle()) return false; if (q->canvas3D()->get_gizmos_manager().get_current_type() == GLGizmosManager::Emboss) return false; return true; } @@ -6821,8 +6821,8 @@ GLCanvas3D* Plater::get_current_canvas3D() void Plater::arrange() { - auto &w = get_ui_job_worker(); - if (w.is_idle()) { + if (p->can_arrange()) { + auto &w = get_ui_job_worker(); p->take_snapshot(_L("Arrange")); replace_job(w, std::make_unique()); }