From 7d03c6abb3b8e75cdacfd876e1babf72a38a3db0 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Thu, 2 Mar 2023 12:50:26 +0100 Subject: [PATCH] Force auto arrangement when loading an object on an empty printbed (XL printers only) --- src/slic3r/GUI/GUI_ObjectList.cpp | 1 + src/slic3r/GUI/Plater.cpp | 19 +++++++++++++++++++ src/slic3r/GUI/Plater.hpp | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index cb93288d1..6eda34b3d 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1736,6 +1736,7 @@ void ObjectList::load_shape_object_from_gallery(const wxArrayString& input_files void ObjectList::load_mesh_object(const TriangleMesh &mesh, const wxString &name, bool center) { + PlaterAfterLoadAutoArrange plater_after_load_auto_arrange; // Add mesh to model as a new object Model& model = wxGetApp().plater()->model(); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 45884cc9d..bb9552481 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2367,6 +2367,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ auto *nozzle_dmrs = config->opt("nozzle_diameter"); + PlaterAfterLoadAutoArrange plater_after_load_auto_arrange; + bool one_by_one = input_files.size() == 1 || printer_technology == ptSLA || nozzle_dmrs->values.size() <= 1; if (! one_by_one) { for (const auto &path : input_files) { @@ -2671,6 +2673,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ new_model->add_object(*model_object); } } + + if (is_project_file) + plater_after_load_auto_arrange.disable(); } } @@ -6973,4 +6978,18 @@ SuppressBackgroundProcessingUpdate::~SuppressBackgroundProcessingUpdate() wxGetApp().plater()->schedule_background_process(m_was_scheduled); } +PlaterAfterLoadAutoArrange::PlaterAfterLoadAutoArrange() +{ + Plater* plater = wxGetApp().plater(); + m_enabled = plater->model().objects.empty() && + plater->printer_technology() == ptFFF && + plater->fff_print().config().printer_model.value == "XL"; +} + +PlaterAfterLoadAutoArrange::~PlaterAfterLoadAutoArrange() +{ + if (m_enabled) + wxGetApp().plater()->arrange(); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index f59f138d4..e002dc99f 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -459,6 +459,16 @@ private: bool m_was_scheduled; }; +class PlaterAfterLoadAutoArrange +{ + bool m_enabled{ false }; + +public: + PlaterAfterLoadAutoArrange(); + ~PlaterAfterLoadAutoArrange(); + void disable() { m_enabled = false; } +}; + } // namespace GUI } // namespace Slic3r