Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2013-11-12 17:30:13 +0400
committerAlessandro Ranellucci <aar@cpan.org>2013-11-12 17:30:13 +0400
commitfaa54ced522b8a85fc8737641ab6d7dde30becb0 (patch)
tree47af559149ef18127551c6b609672a5fa43557b9
parentc8fb1ceac882bbabf0a04ee54594c5715759c6b6 (diff)
Share the thumbnail object instead of returning it from thread
-rw-r--r--lib/Slic3r/GUI/Plater.pm19
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm
index b79438829..66d6d35cf 100644
--- a/lib/Slic3r/GUI/Plater.pm
+++ b/lib/Slic3r/GUI/Plater.pm
@@ -194,9 +194,8 @@ sub new {
EVT_COMMAND($self, -1, $THUMBNAIL_DONE_EVENT, sub {
my ($self, $event) = @_;
- my ($obj_idx, $thumbnail) = @{$event->GetData};
+ my ($obj_idx) = @{$event->GetData};
return if !$self->{objects}[$obj_idx]; # object was deleted before thumbnail generation completed
- $self->{objects}[$obj_idx]->thumbnail($thumbnail->clone);
$self->on_thumbnail_made($obj_idx);
});
@@ -835,11 +834,12 @@ sub make_thumbnail {
my $object = $self->{objects}[$obj_idx];
$object->thumbnail_scaling_factor($self->{scaling_factor});
+ $object->thumbnail(Slic3r::ExPolygon::Collection->new);
my $cb = sub {
- my $thumbnail = $object->make_thumbnail;
+ $object->make_thumbnail;
if ($Slic3r::have_threads) {
- Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $THUMBNAIL_DONE_EVENT, shared_clone([ $obj_idx, $thumbnail ])));
+ Wx::PostEvent($self, Wx::PlThreadEvent->new(-1, $THUMBNAIL_DONE_EVENT, shared_clone([ $obj_idx ])));
Slic3r::thread_cleanup();
threads->exit;
} else {
@@ -855,6 +855,7 @@ sub on_thumbnail_made {
my $self = shift;
my ($obj_idx) = @_;
+ $self->{objects}[$obj_idx]->_transform_thumbnail;
$self->recenter;
$self->{canvas}->Refresh;
}
@@ -1354,12 +1355,11 @@ sub make_thumbnail {
my $self = shift;
my $mesh = $self->get_model_object->mesh; # $self->model_object is already aligned to origin
- my $thumbnail = Slic3r::ExPolygon::Collection->new;
$mesh->repair;
if (@{$mesh->facets} <= 5000) {
# remove polygons with area <= 1mm
my $area_threshold = Slic3r::Geometry::scale 1;
- $thumbnail->append(
+ $self->thumbnail->append(
map $_->simplify(0.5),
grep $_->area >= $area_threshold,
@{ $mesh->horizontal_projection },
@@ -1367,13 +1367,12 @@ sub make_thumbnail {
} else {
my $convex_hull = Slic3r::ExPolygon->new($self->convex_hull)->clone;
$convex_hull->scale(1/&Slic3r::SCALING_FACTOR);
- $thumbnail->append($convex_hull);
+ $self->thumbnail->append($convex_hull);
}
- $thumbnail->scale(&Slic3r::SCALING_FACTOR);
- $self->thumbnail($thumbnail); # ignored in multi-threaded environments
+ $self->thumbnail->scale(&Slic3r::SCALING_FACTOR);
- return $thumbnail;
+ return $self->thumbnail;
}
sub _transform_thumbnail {