Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-01-31 14:15:51 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-01-31 14:15:51 +0300
commitfffaa0e18ae68904dad93f8cecfad8350aa229d8 (patch)
treef2535e295acfa212065e2193b756d8646ec13fbc /source/blender/blenkernel/intern/key.c
parent127754373216db89fc72cbfd564292dcd1437bdd (diff)
Fix #20696: shape keys with vertex groups showing in edit mode did
not update immediately when editing the vertex groups.
Diffstat (limited to 'source/blender/blenkernel/intern/key.c')
-rw-r--r--source/blender/blenkernel/intern/key.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 1f5e0ca1624..1e1c945d386 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -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 @@ static float *get_weights_array(Object *ob, char *vgroup)
{
bDeformGroup *curdef;
MDeformVert *dvert= NULL;
+ EditMesh *em= NULL;
+ EditVert *eve;
int totvert= 0, index= 0;
/* no vgroup string set? */
@@ -1009,6 +1012,9 @@ static float *get_weights_array(Object *ob, char *vgroup)
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 @@ static float *get_weights_array(Object *ob, char *vgroup)
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;