[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35329] trunk/blender/source/blender/ editors/mesh/editmesh_tools.c: Fix #26261: blend from shape operator "add" option was not working correct.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Mar 3 14:26:55 CET 2011


Revision: 35329
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35329
Author:   blendix
Date:     2011-03-03 13:26:55 +0000 (Thu, 03 Mar 2011)
Log Message:
-----------
Fix #26261: blend from shape operator "add" option was not working correct.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2011-03-03 13:23:40 UTC (rev 35328)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2011-03-03 13:26:55 UTC (rev 35329)
@@ -5204,8 +5204,8 @@
 	Key *key= me->key;
 	EditMesh *em= BKE_mesh_get_editmesh(me);
 	EditVert *eve;
-	KeyBlock *kb;
-	float *data, co[3];
+	KeyBlock *kb, *refkb= NULL;
+	float *data, *refdata= NULL, co[3];
 	float blend= RNA_float_get(op->ptr, "blend");
 	int shape= RNA_enum_get(op->ptr, "shape");
 	int add= RNA_boolean_get(op->ptr, "add");
@@ -5214,17 +5214,28 @@
 	if(key && (kb= BLI_findlink(&key->block, shape))) {
 		data= kb->data;
 
+		if(add) {
+			refkb= BLI_findlink(&key->block, kb->relative);
+			if(refkb)
+				refdata = refkb->data;
+		}
+
 		for(eve=em->verts.first; eve; eve=eve->next){
 			if(eve->f & SELECT) {
 				if(eve->keyindex >= 0 && eve->keyindex < kb->totelem) {
-					VECCOPY(co, data + eve->keyindex*3);
+					copy_v3_v3(co, data + eve->keyindex*3);
 
 					if(add) {
-						mul_v3_fl(co, blend);
-						add_v3_v3(eve->co, co);
+						/* in add mode, we add relative shape key offset */
+						if(refdata && eve->keyindex < refkb->totelem)
+							sub_v3_v3v3(co, co, refdata + eve->keyindex*3);
+
+						madd_v3_v3fl(eve->co, co, blend);
 					}
-					else
+					else {
+						/* in blend mode, we interpolate to the shape key */
 						interp_v3_v3v3(eve->co, eve->co, co, blend);
+					}
 
 					blended= 1;
 				}




More information about the Bf-blender-cvs mailing list