mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-14 18:05:51 +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
|
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->rotate(instance.rotation, Z);
|
||||||
this->scale(instance.scaling_factor);
|
this->scale(instance.scaling_factor);
|
||||||
if (!dont_translate)
|
if (!dont_translate)
|
||||||
this->translate(instance.offset.x, instance.offset.y, 0);
|
this->translate(instance.offset.x, instance.offset.y, 0);
|
||||||
|
|
||||||
for (ModelInstancePtrs::iterator i = this->instances.begin(); i != this->instances.end(); ++i) {
|
for (ModelInstance* i : this->instances) {
|
||||||
(*i)->rotation -= instance.rotation;
|
i->rotation -= instance.rotation;
|
||||||
(*i)->scaling_factor /= instance.scaling_factor;
|
i->scaling_factor /= instance.scaling_factor;
|
||||||
if (!dont_translate)
|
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->origin_translation = Pointf3(0,0,0);
|
||||||
this->invalidate_bounding_box();
|
this->invalidate_bounding_box();
|
||||||
|
@ -160,7 +160,7 @@ class ModelObject
|
|||||||
void scale_to_fit(const Sizef3 &size);
|
void scale_to_fit(const Sizef3 &size);
|
||||||
void rotate(float angle, const Axis &axis);
|
void rotate(float angle, const Axis &axis);
|
||||||
void mirror(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 materials_count() const;
|
||||||
size_t facets_count() const;
|
size_t facets_count() const;
|
||||||
bool needed_repair() const;
|
bool needed_repair() const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user