diff --git a/src/GUI/Plater.cpp b/src/GUI/Plater.cpp index 291da269d..0af673ff3 100644 --- a/src/GUI/Plater.cpp +++ b/src/GUI/Plater.cpp @@ -7,6 +7,7 @@ #include "ProgressStatusBar.hpp" #include "Log.hpp" #include "MainFrame.hpp" +#include "BoundingBox.hpp" namespace Slic3r { namespace GUI { @@ -311,7 +312,8 @@ std::vector Plater::load_model_objects(ModelObjectPtrs model_objects) { } } - for (const auto& i : obj_idx) { this->make_thumbnail(i); } + for (const auto& i : obj_idx) { this->make_thumbnail(i); } + if (need_arrange) this->arrange(); return obj_idx; } @@ -370,5 +372,18 @@ void Plater::refresh_canvases() { } +void Plater::arrange() { + // pause background process + auto bb {Slic3r::BoundingBoxf(this->config->get("bed_shape").values)}; + bool success {this->model->arrange_objects(this->config->min_object_distance(), &bb)}; + + GetFrame()->statusbar->SetStatusText(_("Objects were arranged.")); + this->on_model_change(true); +} + +void Plater::on_model_change(bool force_autocenter) { + this->refresh_canvases(); +} + }} // Namespace Slic3r::GUI diff --git a/src/GUI/Plater.hpp b/src/GUI/Plater.hpp index c180ca843..5d052891f 100644 --- a/src/GUI/Plater.hpp +++ b/src/GUI/Plater.hpp @@ -47,7 +47,7 @@ private: std::shared_ptr config { Slic3r::Config::new_from_defaults( {"bed_shape", "complete_objects", "extruder_clearance_radius", "skirts", "skirt_distance", "brim_width", "serial_port", "serial_speed", "host_type", "print_host", "octoprint_apikey", - "shortcuts", "filament_colour"})}; + "shortcuts", "filament_colour", "duplicate_distance"})}; bool processed {false}; @@ -95,6 +95,13 @@ private: /// Complete thumbnail transformation and refresh canvases void on_thumbnail_made(size_t idx); void refresh_canvases(); + + /// Arrange models + void arrange(); + + /// Run everything that needs to happen when models change. + /// Includes updating canvases, reloading menus, etc. + void on_model_change(bool force_autocenter = false); };