From 6c6934bf818eb334abda3f785f34d4ca136c8ae1 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 26 Dec 2023 17:52:51 +0800 Subject: [PATCH] FIX: crash of "filling bed" "get_arrange_settings() const" gets trapped in infinite recursive calling. Now we delete this function. jira: STUDIO-5688 Change-Id: Ia39974734bb37b2a2f06b5bf78185f01be726872 (cherry picked from commit 631365822319139ae84e8cd8cbad5f10d9a10c4a) --- src/slic3r/GUI/GLCanvas3D.hpp | 11 ----------- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 8 ++++---- src/slic3r/GUI/Jobs/FillBedJob.cpp | 3 +-- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index d5201c38a..9974a1238 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1009,17 +1009,6 @@ public: void highlight_toolbar_item(const std::string& item_name); void highlight_gizmo(const std::string& gizmo_name); - ArrangeSettings get_arrange_settings() const { - const ArrangeSettings &settings = get_arrange_settings(); - ArrangeSettings ret = settings; - if (&settings == &m_arrange_settings_fff_seq_print) { - ret.distance = std::max(ret.distance, - float(min_object_distance(*m_config))); - } - - return ret; - } - // Timestamp for FPS calculation and notification fade-outs. static int64_t timestamp_now() { #ifdef _WIN32 diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index db6a3277a..e80f3dfbc 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -759,10 +759,10 @@ double bed_stride_y(const Plater* plater) { // call before get selected and unselected arrangement::ArrangeParams init_arrange_params(Plater *p) { - arrangement::ArrangeParams params; - GLCanvas3D::ArrangeSettings &settings = p->canvas3D()->get_arrange_settings(); - auto & print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); - const PrintConfig& print_config = print.config(); + arrangement::ArrangeParams params; + GLCanvas3D::ArrangeSettings &settings = p->canvas3D()->get_arrange_settings(); + auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); + const PrintConfig &print_config = print.config(); params.clearance_height_to_rod = print_config.extruder_clearance_height_to_rod.value; params.clearance_height_to_lid = print_config.extruder_clearance_height_to_lid.value; diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index 1673fd98b..86daf7d17 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -146,8 +146,7 @@ void FillBedJob::prepare() double sc = scaled(1.) * scaled(1.); - const GLCanvas3D::ArrangeSettings& settings = static_cast(m_plater->canvas3D())->get_arrange_settings(); - auto polys = offset_ex(m_selected.front().poly, scaled(settings.distance) / 2); + auto polys = offset_ex(m_selected.front().poly, params.min_obj_distance / 2); ExPolygon poly = polys.empty() ? m_selected.front().poly : polys.front(); double poly_area = poly.area() / sc; double unsel_area = std::accumulate(m_unselected.begin(),