[Bf-blender-cvs] [3a53ae8d4bd] master: Fix T73817: Shape key users not properly mapped when duplicating their obdata.

Bastien Montagne noreply at git.blender.org
Mon Feb 17 15:49:44 CET 2020


Commit: 3a53ae8d4bd3b18bdf0a9468742518584f8f49c1
Author: Bastien Montagne
Date:   Mon Feb 17 15:47:24 2020 +0100
Branches: master
https://developer.blender.org/rB3a53ae8d4bd3b18bdf0a9468742518584f8f49c1

Fix T73817: Shape key users not properly mapped when duplicating their obdata.

Once again those crappy weirdos IDs with their crappy weirdos 'loopback'
pointers...

This is a quick hack for now, think id_copy needs to be reworked a bit
to supported re-entrant sub-ID copying (also an issue with nodes I bet).

===================================================================

M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/blenkernel/intern/mesh.c

===================================================================

diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index fab212f0944..fe4f814ca1f 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -205,6 +205,8 @@ void BKE_curve_copy_data(Main *bmain, Curve *cu_dst, const Curve *cu_src, const
 
   if (cu_src->key && (flag & LIB_ID_COPY_SHAPEKEY)) {
     BKE_id_copy_ex(bmain, &cu_src->key->id, (ID **)&cu_dst->key, flag);
+    /* XXX This is not nice, we need to make BKE_id_copy_ex fully re-entrant... */
+    cu_dst->key->from = &cu_dst->id;
   }
 
   cu_dst->editnurb = NULL;
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index ebfffc8279d..02cf7f1cd45 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -282,6 +282,8 @@ void BKE_lattice_copy_data(Main *bmain, Lattice *lt_dst, const Lattice *lt_src,
 
   if (lt_src->key && (flag & LIB_ID_COPY_SHAPEKEY)) {
     BKE_id_copy_ex(bmain, &lt_src->key->id, (ID **)&lt_dst->key, flag);
+    /* XXX This is not nice, we need to make BKE_id_copy_ex fully re-entrant... */
+    lt_dst->key->from = &lt_dst->id;
   }
 
   if (lt_src->dvert) {
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 09529582a43..2191ac53a54 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -608,6 +608,8 @@ void BKE_mesh_copy_data(Main *bmain, Mesh *me_dst, const Mesh *me_src, const int
   /* TODO Do we want to add flag to prevent this? */
   if (me_src->key && (flag & LIB_ID_COPY_SHAPEKEY)) {
     BKE_id_copy_ex(bmain, &me_src->key->id, (ID **)&me_dst->key, flag);
+    /* XXX This is not nice, we need to make BKE_id_copy_ex fully re-entrant... */
+    me_dst->key->from = &me_dst->id;
   }
 }



More information about the Bf-blender-cvs mailing list