[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50158] trunk/blender/source/blender/bmesh /intern: Fix #32387: some mesh modifications breaking other shape keys.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Aug 23 15:54:31 CEST 2012


Revision: 50158
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50158
Author:   blendix
Date:     2012-08-23 13:54:30 +0000 (Thu, 23 Aug 2012)
Log Message:
-----------
Fix #32387: some mesh modifications breaking other shape keys.

The vertex shapekey index is now no longer copied, and propagation of offsets
in the basis to other shapekeys is disabled if new vertices were added. The
reason being that the propagation will only be done for the old vertices leaving
the new ones behind, and so doing e.g. subdivide + translate on the basis would
create a mess on other shape keys.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_core.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_core.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_core.c	2012-08-23 13:51:41 UTC (rev 50157)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_core.c	2012-08-23 13:54:30 UTC (rev 50158)
@@ -80,7 +80,14 @@
 	CustomData_bmesh_set_default(&bm->vdata, &v->head.data);
 	
 	if (example) {
+		int *keyi;
+
 		BM_elem_attrs_copy(bm, bm, example, v);
+
+		/* exception: don't copy the original shapekey index */
+		keyi = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_SHAPE_KEYINDEX);
+		if(keyi)
+			*keyi = ORIGINDEX_NONE;
 	}
 
 	BM_CHECK_ELEMENT(v);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c	2012-08-23 13:51:41 UTC (rev 50157)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c	2012-08-23 13:54:30 UTC (rev 50158)
@@ -793,6 +793,15 @@
 					if (keyi && *keyi != ORIGINDEX_NONE) {
 						sub_v3_v3v3(ofs[i], mvert->co, fp[*keyi]);
 					}
+					else {
+						/* if there are new vertices in the mesh, we can't propagate the offset
+						 * because it will only work for the existing vertices and not the new
+						 * ones, creating a mess when doing e.g. subdivide + translate */
+						MEM_freeN(ofs);
+						ofs = NULL;
+						break;
+					}
+
 					mvert++;
 				}
 			}




More information about the Bf-blender-cvs mailing list