From d303e41acc703edf44921606d7a643707c3148d2 Mon Sep 17 00:00:00 2001 From: manch1n Date: Wed, 14 Jun 2023 10:11:45 +0800 Subject: [PATCH] FIX: correct the obj distance of by-object partplate arrangement STUDIO-3103 Change-Id: I44dd3e8677713bf5427f266ff3c88870fbb4b2f9 (cherry picked from commit aebcba75ba760d31245f9cf336cba72da3521b1a) --- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 13 ++++++++++--- src/slic3r/GUI/Jobs/ArrangeJob.hpp | 2 +- src/slic3r/GUI/Jobs/FillBedJob.cpp | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index ff470279b5..78286a048a 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -392,7 +392,7 @@ void ArrangeJob::prepare() NotificationManager::NotificationLevel::RegularNotificationLevel, _u8L("Arranging...")); m_plater->get_notification_manager()->bbl_close_plateinfo_notification(); - params = init_arrange_params(*m_plater); + params = init_arrange_params(m_plater); //BBS update extruder params and speed table before arranging Plater::setExtruderParams(Model::extruderParamsMap); @@ -727,10 +727,10 @@ arrangement::ArrangeParams get_arrange_params(Plater *p) } // call before get selected and unselected -arrangement::ArrangeParams init_arrange_params(const Plater &p) +arrangement::ArrangeParams init_arrange_params(Plater *p) { arrangement::ArrangeParams params; - const GLCanvas3D::ArrangeSettings &settings = static_cast(p.canvas3D())->get_arrange_settings(); + const GLCanvas3D::ArrangeSettings &settings = static_cast(p->canvas3D())->get_arrange_settings(); auto & print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); params.clearance_height_to_rod = print.config().extruder_clearance_height_to_rod.value; @@ -745,6 +745,13 @@ arrangement::ArrangeParams init_arrange_params(const Plater &p) params.bed_shrink_x = settings.bed_shrink_x; params.bed_shrink_y = settings.bed_shrink_y; + int state = p->get_prepare_state(); + if (state == Job::JobPrepareState::PREPARE_STATE_MENU) { + PartPlateList &plate_list = p->get_partplate_list(); + PartPlate * plate = plate_list.get_curr_plate(); + params.is_seq_print = plate->get_real_print_seq() == PrintSequence::ByObject; + } + if (params.is_seq_print) params.min_obj_distance = std::max(params.min_obj_distance, scaled(params.cleareance_radius + 0.001)); // +0.001mm to avoid clearance check fail due to rounding error return params; diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.hpp b/src/slic3r/GUI/Jobs/ArrangeJob.hpp index fec716197a..e4ec09b5ed 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.hpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.hpp @@ -78,7 +78,7 @@ double bed_stride_y(const Plater* plater); arrangement::ArrangeParams get_arrange_params(Plater *p); -arrangement::ArrangeParams init_arrange_params(const Plater &p); +arrangement::ArrangeParams init_arrange_params(Plater *p); Points get_shrink_bedpts(const Plater& plater,const arrangement::ArrangeParams& params); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index 1846909117..866ecaea33 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -23,7 +23,7 @@ void FillBedJob::prepare() m_unselected.clear(); m_bedpts.clear(); - params = init_arrange_params(*m_plater); + params = init_arrange_params(m_plater); m_object_idx = m_plater->get_selected_object_idx(); if (m_object_idx == -1)