Bugfix: inconsistent scaling when object had multiple copies in plater. #3798

This commit is contained in:
Alessandro Ranellucci 2017-04-04 19:18:18 +02:00
parent bc96a1a268
commit 8f66d88320
2 changed files with 8 additions and 6 deletions

View File

@ -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();

View File

@ -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;