Fixing Undo / Redo issues after copy / paste due to not updating

ObjectIDs of support painting / seam painting / layer height profile.
This commit is contained in:
Vojtech Bubnik 2020-10-09 12:25:57 +02:00
parent 203fc091a0
commit 170fe23b46
2 changed files with 16 additions and 1 deletions

View File

@ -608,6 +608,7 @@ void ModelObject::assign_new_unique_ids_recursive()
model_volume->assign_new_unique_ids_recursive();
for (ModelInstance *model_instance : this->instances)
model_instance->assign_new_unique_ids_recursive();
this->layer_height_profile.set_new_unique_id();
}
// Clone this ModelObject including its volumes and instances, keep the IDs of the copies equal to the original.
@ -1727,6 +1728,14 @@ void ModelObject::scale_to_fit(const Vec3d &size)
*/
}
void ModelVolume::assign_new_unique_ids_recursive()
{
ObjectBase::set_new_unique_id();
config.set_new_unique_id();
m_supported_facets.set_new_unique_id();
m_seam_facets.set_new_unique_id();
}
void ModelVolume::rotate(double angle, Axis axis)
{
switch (axis)

View File

@ -191,6 +191,9 @@ public:
private:
std::vector<coordf_t> m_data;
// to access set_new_unique_id() when copy / pasting an object
friend class ModelObject;
};
// A printable object, possibly having multiple print volumes (each with its own set of parameters and materials),
@ -446,6 +449,9 @@ private:
}
std::map<int, std::vector<bool>> m_data;
// To access set_new_unique_id() when copy / pasting a ModelVolume.
friend class ModelVolume;
};
// An object STL, or a modifier volume, over which a different set of parameters shall be applied.
@ -579,7 +585,7 @@ protected:
// Copies IDs of both the ModelVolume and its config.
explicit ModelVolume(const ModelVolume &rhs) = default;
void set_model_object(ModelObject *model_object) { object = model_object; }
void assign_new_unique_ids_recursive() override { ObjectBase::set_new_unique_id(); config.set_new_unique_id(); }
void assign_new_unique_ids_recursive() override;
void transform_this_mesh(const Transform3d& t, bool fix_left_handed);
void transform_this_mesh(const Matrix3d& m, bool fix_left_handed);