diff --git a/xs/src/libslic3r/Model.cpp b/xs/src/libslic3r/Model.cpp index 5243799ca..d3127f917 100644 --- a/xs/src/libslic3r/Model.cpp +++ b/xs/src/libslic3r/Model.cpp @@ -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(); diff --git a/xs/src/libslic3r/Model.hpp b/xs/src/libslic3r/Model.hpp index 36571ff5d..fed54b601 100644 --- a/xs/src/libslic3r/Model.hpp +++ b/xs/src/libslic3r/Model.hpp @@ -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;