[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26469] trunk/blender/source/blender/ blenkernel/intern/key.c: Fix #20696: shape keys with vertex groups showing in edit mode did

Brecht Van Lommel brecht at blender.org
Sun Jan 31 12:15:51 CET 2010


Revision: 26469
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26469
Author:   blendix
Date:     2010-01-31 12:15:51 +0100 (Sun, 31 Jan 2010)

Log Message:
-----------
Fix #20696: shape keys with vertex groups showing in edit mode did
not update immediately when editing the vertex groups.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/key.c

Modified: trunk/blender/source/blender/blenkernel/intern/key.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/key.c	2010-01-31 11:13:31 UTC (rev 26468)
+++ trunk/blender/source/blender/blenkernel/intern/key.c	2010-01-31 11:15:51 UTC (rev 26469)
@@ -52,6 +52,7 @@
 #include "BKE_action.h"
 #include "BKE_blender.h"
 #include "BKE_curve.h"
+#include "BKE_customdata.h"
 #include "BKE_global.h"
 #include "BKE_key.h"
 #include "BKE_lattice.h"
@@ -999,6 +1000,8 @@
 {
 	bDeformGroup *curdef;
 	MDeformVert *dvert= NULL;
+	EditMesh *em= NULL;
+	EditVert *eve;
 	int totvert= 0, index= 0;
 	
 	/* no vgroup string set? */
@@ -1009,6 +1012,9 @@
 		Mesh *me= ob->data;
 		dvert= me->dvert;
 		totvert= me->totvert;
+
+		if(me->edit_mesh && me->edit_mesh->totvert == totvert)
+			em= me->edit_mesh;
 	}
 	else if(ob->type==OB_LATTICE) {
 		Lattice *lt= ob->data;
@@ -1028,15 +1034,32 @@
 		int i, j;
 		
 		weights= MEM_callocN(totvert*sizeof(float), "weights");
-		
-		for (i=0; i < totvert; i++, dvert++) {
-			for(j=0; j<dvert->totweight; j++) {
-				if (dvert->dw[j].def_nr == index) {
-					weights[i]= dvert->dw[j].weight;
-					break;
+
+		if(em) {
+			for(i=0, eve=em->verts.first; eve; eve=eve->next, i++) {
+				dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
+
+				if(dvert) {
+					for(j=0; j<dvert->totweight; j++) {
+						if(dvert->dw[j].def_nr == index) {
+							weights[i]= dvert->dw[j].weight;
+							break;
+						}
+					}
 				}
 			}
 		}
+		else {
+			for(i=0; i < totvert; i++, dvert++) {
+				for(j=0; j<dvert->totweight; j++) {
+					if(dvert->dw[j].def_nr == index) {
+						weights[i]= dvert->dw[j].weight;
+						break;
+					}
+				}
+			}
+		}
+
 		return weights;
 	}
 	return NULL;





More information about the Bf-blender-cvs mailing list