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 };
|
$_->set_rotation(0) for @{ $model_object->instances };
|
||||||
}
|
}
|
||||||
$model_object->rotate(deg2rad($angle), $axis);
|
$model_object->rotate(deg2rad($angle), $axis);
|
||||||
|
|
||||||
|
# realign object to Z = 0
|
||||||
|
$model_object->center_around_origin;
|
||||||
$self->make_thumbnail($obj_idx);
|
$self->make_thumbnail($obj_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -688,6 +691,9 @@ sub flip {
|
||||||
|
|
||||||
$model_object->flip($axis);
|
$model_object->flip($axis);
|
||||||
$model_object->update_bounding_box;
|
$model_object->update_bounding_box;
|
||||||
|
|
||||||
|
# realign object to Z = 0
|
||||||
|
$model_object->center_around_origin;
|
||||||
$self->make_thumbnail($obj_idx);
|
$self->make_thumbnail($obj_idx);
|
||||||
|
|
||||||
# update print and start background processing
|
# update print and start background processing
|
||||||
|
@ -725,6 +731,7 @@ sub changescale {
|
||||||
my $versor = [1,1,1];
|
my $versor = [1,1,1];
|
||||||
$versor->[$axis] = $scale/100;
|
$versor->[$axis] = $scale/100;
|
||||||
$model_object->scale_xyz(Slic3r::Pointf3->new(@$versor));
|
$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);
|
$self->make_thumbnail($obj_idx);
|
||||||
} else {
|
} else {
|
||||||
# max scale factor should be above 2540 to allow importing files exported in inches
|
# 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 {
|
sub load_object {
|
||||||
my ($self, $object, $all_instances) = @_;
|
my ($self, $object, $all_instances) = @_;
|
||||||
|
|
||||||
my $z_min = $object->raw_bounding_box->z_min;
|
|
||||||
|
|
||||||
# color mesh(es) by material
|
# color mesh(es) by material
|
||||||
my @materials = ();
|
my @materials = ();
|
||||||
|
|
||||||
|
@ -381,7 +379,6 @@ sub load_object {
|
||||||
instance_idx => $instance_idx,
|
instance_idx => $instance_idx,
|
||||||
mesh => $mesh,
|
mesh => $mesh,
|
||||||
color => $color,
|
color => $color,
|
||||||
origin => Slic3r::Pointf3->new(0,0,-$z_min),
|
|
||||||
);
|
);
|
||||||
push @volumes_idx, $#{$self->volumes};
|
push @volumes_idx, $#{$self->volumes};
|
||||||
|
|
||||||
|
|
|
@ -272,6 +272,7 @@ sub rotate {
|
||||||
} elsif ($axis == Z) {
|
} elsif ($axis == Z) {
|
||||||
$_->mesh->rotate_z($angle) for @{$self->volumes};
|
$_->mesh->rotate_z($angle) for @{$self->volumes};
|
||||||
}
|
}
|
||||||
|
$self->set_origin_translation(Slic3r::Pointf3->new(0,0,0));
|
||||||
$self->invalidate_bounding_box;
|
$self->invalidate_bounding_box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,6 +286,7 @@ sub flip {
|
||||||
} elsif ($axis == Z) {
|
} elsif ($axis == Z) {
|
||||||
$_->mesh->flip_z for @{$self->volumes};
|
$_->mesh->flip_z for @{$self->volumes};
|
||||||
}
|
}
|
||||||
|
$self->set_origin_translation(Slic3r::Pointf3->new(0,0,0));
|
||||||
$self->invalidate_bounding_box;
|
$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) {
|
for (ModelVolumePtrs::const_iterator v = this->volumes.begin(); v != this->volumes.end(); ++v) {
|
||||||
(*v)->mesh.scale(versor);
|
(*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();
|
this->invalidate_bounding_box();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ class ModelObject
|
||||||
|
|
||||||
/* This vector accumulates the total translation applied to the object by the
|
/* This vector accumulates the total translation applied to the object by the
|
||||||
center_around_origin() method. Callers might want to apply the same translation
|
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. */
|
when user expects that. */
|
||||||
Pointf3 origin_translation;
|
Pointf3 origin_translation;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue