Fix T96452: Armature corrupted after undoing 'Join' operation.

Modified source Armature ID in the join operation was not properly
tagged as such for the depsgraph (and therefore memfile undo)..

Issue caused/revealed by rBe648e388874a.

Should be backported to 3.1 should we make a corrective release.
This commit is contained in:
Bastien Montagne 2022-03-15 15:00:19 +01:00
parent 256d36683b
commit 2156841c8c
Notes: blender-bot 2023-02-14 06:17:14 +01:00
Referenced by issue #96452, Armature corrupted after undo
Referenced by issue #96241, 3.1: Potential candidates for corrective releases
1 changed files with 9 additions and 0 deletions

View File

@ -377,6 +377,15 @@ int ED_armature_join_objects_exec(bContext *C, wmOperator *op)
BKE_pose_channels_hash_free(pose);
}
/* Armature ID itself is not freed below, however it has been modified (and is now completely
* empty). This needs to be told to the depsgraph, it will also ensure that the global
* memfile undo system properly detects the change.
*
* FIXME: Modifying an existing obdata because we are joining an object using it into another
* object is a very questionable behavior, which also does not match with other object types
* joining. */
DEG_id_tag_update_ex(bmain, &curarm->id, ID_RECALC_GEOMETRY);
/* Fix all the drivers (and animation data) */
BKE_fcurves_main_cb(bmain, joined_armature_fix_animdata_cb, &afd);
BLI_ghash_free(afd.names_map, MEM_freeN, NULL);