Bugfix: objects were floating in STL export after rotation and flip. #2512
This commit is contained in:
parent
9f4f711017
commit
64c9e3af4b
5 changed files with 13 additions and 4 deletions
|
@ -659,6 +659,9 @@ sub rotate {
|
|||
$_->set_rotation(0) for @{ $model_object->instances };
|
||||
}
|
||||
$model_object->rotate(deg2rad($angle), $axis);
|
||||
|
||||
# realign object to Z = 0
|
||||
$model_object->center_around_origin;
|
||||
$self->make_thumbnail($obj_idx);
|
||||
}
|
||||
|
||||
|
@ -688,6 +691,9 @@ sub flip {
|
|||
|
||||
$model_object->flip($axis);
|
||||
$model_object->update_bounding_box;
|
||||
|
||||
# realign object to Z = 0
|
||||
$model_object->center_around_origin;
|
||||
$self->make_thumbnail($obj_idx);
|
||||
|
||||
# update print and start background processing
|
||||
|
@ -725,6 +731,7 @@ sub changescale {
|
|||
my $versor = [1,1,1];
|
||||
$versor->[$axis] = $scale/100;
|
||||
$model_object->scale_xyz(Slic3r::Pointf3->new(@$versor));
|
||||
# object was already aligned to Z = 0, so no need to realign it
|
||||
$self->make_thumbnail($obj_idx);
|
||||
} else {
|
||||
# max scale factor should be above 2540 to allow importing files exported in inches
|
||||
|
|
|
@ -351,8 +351,6 @@ sub set_bed_shape {
|
|||
sub load_object {
|
||||
my ($self, $object, $all_instances) = @_;
|
||||
|
||||
my $z_min = $object->raw_bounding_box->z_min;
|
||||
|
||||
# color mesh(es) by material
|
||||
my @materials = ();
|
||||
|
||||
|
@ -381,7 +379,6 @@ sub load_object {
|
|||
instance_idx => $instance_idx,
|
||||
mesh => $mesh,
|
||||
color => $color,
|
||||
origin => Slic3r::Pointf3->new(0,0,-$z_min),
|
||||
);
|
||||
push @volumes_idx, $#{$self->volumes};
|
||||
|
||||
|
|
|
@ -272,6 +272,7 @@ sub rotate {
|
|||
} elsif ($axis == Z) {
|
||||
$_->mesh->rotate_z($angle) for @{$self->volumes};
|
||||
}
|
||||
$self->set_origin_translation(Slic3r::Pointf3->new(0,0,0));
|
||||
$self->invalidate_bounding_box;
|
||||
}
|
||||
|
||||
|
@ -285,6 +286,7 @@ sub flip {
|
|||
} elsif ($axis == Z) {
|
||||
$_->mesh->flip_z for @{$self->volumes};
|
||||
}
|
||||
$self->set_origin_translation(Slic3r::Pointf3->new(0,0,0));
|
||||
$self->invalidate_bounding_box;
|
||||
}
|
||||
|
||||
|
|
|
@ -520,6 +520,9 @@ ModelObject::scale(const Pointf3 &versor)
|
|||
for (ModelVolumePtrs::const_iterator v = this->volumes.begin(); v != this->volumes.end(); ++v) {
|
||||
(*v)->mesh.scale(versor);
|
||||
}
|
||||
|
||||
// reset origin translation since it doesn't make sense anymore
|
||||
this->origin_translation = Pointf3(0,0,0);
|
||||
this->invalidate_bounding_box();
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ class ModelObject
|
|||
|
||||
/* This vector accumulates the total translation applied to the object by the
|
||||
center_around_origin() method. Callers might want to apply the same translation
|
||||
to new volumes before adding them to this object in order to preset alignment
|
||||
to new volumes before adding them to this object in order to preserve alignment
|
||||
when user expects that. */
|
||||
Pointf3 origin_translation;
|
||||
|
||||
|
|
Loading…
Reference in a new issue