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(); model_volume->assign_new_unique_ids_recursive();
for (ModelInstance *model_instance : this->instances) for (ModelInstance *model_instance : this->instances)
model_instance->assign_new_unique_ids_recursive(); 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. // 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) void ModelVolume::rotate(double angle, Axis axis)
{ {
switch (axis) switch (axis)

View File

@ -191,6 +191,9 @@ public:
private: private:
std::vector<coordf_t> m_data; 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), // 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; 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. // 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. // Copies IDs of both the ModelVolume and its config.
explicit ModelVolume(const ModelVolume &rhs) = default; explicit ModelVolume(const ModelVolume &rhs) = default;
void set_model_object(ModelObject *model_object) { object = model_object; } 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 Transform3d& t, bool fix_left_handed);
void transform_this_mesh(const Matrix3d& m, bool fix_left_handed); void transform_this_mesh(const Matrix3d& m, bool fix_left_handed);