From 6276e0d7ce2b76e17549c24b32cb96da05372ea2 Mon Sep 17 00:00:00 2001 From: Joseph Lenox Date: Sun, 6 May 2018 22:43:02 -0500 Subject: [PATCH] Added make_thumbnail and on_thumbnail_made --- src/GUI/Plater.cpp | 38 ++++++++++++++++++++++++++++++++++++++ src/GUI/Plater.hpp | 3 +++ 2 files changed, 41 insertions(+) diff --git a/src/GUI/Plater.cpp b/src/GUI/Plater.cpp index 95c4dff9d..ecee4435a 100644 --- a/src/GUI/Plater.cpp +++ b/src/GUI/Plater.cpp @@ -284,6 +284,7 @@ std::vector Plater::load_model_objects(ModelObjectPtrs model_objects) { } } + for (const auto& i : obj_idx) { this->make_thumbnail(i); } return obj_idx; } @@ -296,6 +297,42 @@ int Plater::get_object_index(size_t object_id) { return -1; } +void Plater::make_thumbnail(size_t idx) { + auto& plater_object {this->objects.at(idx)}; + if (threaded) { + // spin off a thread to create the thumbnail and post an event when it is done. + } else { + plater_object.make_thumbnail(this->model, idx); + this->on_thumbnail_made(idx); + } +/* + my $plater_object = $self->{objects}[$obj_idx]; + $plater_object->thumbnail(Slic3r::ExPolygon::Collection->new); + my $cb = sub { + $plater_object->make_thumbnail($self->{model}, $obj_idx); + + if ($Slic3r::have_threads) { + Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $THUMBNAIL_DONE_EVENT, shared_clone([ $obj_idx ]))); + Slic3r::thread_cleanup(); + threads->exit; + } else { + $self->on_thumbnail_made($obj_idx); + } + }; + + @_ = (); + $Slic3r::have_threads + ? threads->create(sub { $cb->(); Slic3r::thread_cleanup(); })->detach + : $cb->(); +} +*/ +} + +void Plater::on_thumbnail_made(size_t idx) { + this->objects.at(idx).transform_thumbnail(this->model, idx); + this->refresh_canvases(); +} + void Plater::refresh_canvases() { if (this->canvas2D != nullptr) this->canvas2D->Refresh(); @@ -305,5 +342,6 @@ void Plater::refresh_canvases() { this->preview3D->reload_print(); } + }} // Namespace Slic3r::GUI diff --git a/src/GUI/Plater.hpp b/src/GUI/Plater.hpp index 7bfd8cbf2..8e47b0a7d 100644 --- a/src/GUI/Plater.hpp +++ b/src/GUI/Plater.hpp @@ -84,6 +84,9 @@ private: auto bed_shape { Slic3r::Polygon::new_scale(this->config->get("bed_shape").values) }; return Slic3r::Pointf(); } + + /// Complete thumbnail transformation and refresh canvases + void on_thumbnail_made(size_t idx); void refresh_canvases(); };