mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-05 21:06:07 +08:00
Bugfix: inconsistent scaling when object had multiple copies in plater. #3798
This commit is contained in:
parent
bc96a1a268
commit
8f66d88320
@ -753,18 +753,20 @@ ModelObject::mirror(const Axis &axis)
|
||||
}
|
||||
|
||||
void
|
||||
ModelObject::transform_by_instance(const ModelInstance &instance, bool dont_translate)
|
||||
ModelObject::transform_by_instance(ModelInstance instance, bool dont_translate)
|
||||
{
|
||||
// We get instance by copy because we would alter it in the loop below,
|
||||
// causing inconsistent values in subsequent instances.
|
||||
this->rotate(instance.rotation, Z);
|
||||
this->scale(instance.scaling_factor);
|
||||
if (!dont_translate)
|
||||
this->translate(instance.offset.x, instance.offset.y, 0);
|
||||
|
||||
for (ModelInstancePtrs::iterator i = this->instances.begin(); i != this->instances.end(); ++i) {
|
||||
(*i)->rotation -= instance.rotation;
|
||||
(*i)->scaling_factor /= instance.scaling_factor;
|
||||
for (ModelInstance* i : this->instances) {
|
||||
i->rotation -= instance.rotation;
|
||||
i->scaling_factor /= instance.scaling_factor;
|
||||
if (!dont_translate)
|
||||
(*i)->offset.translate(-instance.offset.x, -instance.offset.y);
|
||||
i->offset.translate(-instance.offset.x, -instance.offset.y);
|
||||
}
|
||||
this->origin_translation = Pointf3(0,0,0);
|
||||
this->invalidate_bounding_box();
|
||||
|
@ -160,7 +160,7 @@ class ModelObject
|
||||
void scale_to_fit(const Sizef3 &size);
|
||||
void rotate(float angle, const Axis &axis);
|
||||
void mirror(const Axis &axis);
|
||||
void transform_by_instance(const ModelInstance &instance, bool dont_translate = false);
|
||||
void transform_by_instance(ModelInstance instance, bool dont_translate = false);
|
||||
size_t materials_count() const;
|
||||
size_t facets_count() const;
|
||||
bool needed_repair() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user