[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42515] trunk/blender/source/blender/ modifiers/intern/MOD_hook.c: Fix [#29543] Hook modifier: falloff + vgroup influence broken

Bastien Montagne montagne29 at wanadoo.fr
Thu Dec 8 16:50:36 CET 2011


Revision: 42515
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42515
Author:   mont29
Date:     2011-12-08 15:50:28 +0000 (Thu, 08 Dec 2011)
Log Message:
-----------
Fix [#29543] Hook modifier: falloff + vgroup influence broken

A valid derivedmesh is needed for modifier_get_vgroup to work, and it wasn?\226?\128?\153t take care of when not in edit mode... Checked quickly the other deform modifiers, they all seem to handle this correctly.

Modified Paths:
--------------
    trunk/blender/source/blender/modifiers/intern/MOD_hook.c

Modified: trunk/blender/source/blender/modifiers/intern/MOD_hook.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_hook.c	2011-12-08 14:26:46 UTC (rev 42514)
+++ trunk/blender/source/blender/modifiers/intern/MOD_hook.c	2011-12-08 15:50:28 UTC (rev 42515)
@@ -143,14 +143,9 @@
 	return fac;
 }
 
-static void deformVerts(ModifierData *md, Object *ob,
-						DerivedMesh *dm,
-						float (*vertexCos)[3],
-						int numVerts,
-						int UNUSED(useRenderParams),
-						int UNUSED(isFinalCalc))
+static void deformVerts_do(HookModifierData *hmd, Object *ob, DerivedMesh *dm,
+                           float (*vertexCos)[3], int numVerts)
 {
-	HookModifierData *hmd = (HookModifierData*) md;
 	bPoseChannel *pchan= get_pose_channel(hmd->object->pose, hmd->subtarget);
 	float vec[3], mat[4][4], dmat[4][4];
 	int i, *index_pt;
@@ -251,17 +246,29 @@
 	}
 }
 
-static void deformVertsEM(
-					   ModifierData *md, Object *ob, struct EditMesh *editData,
-	   DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+                        float (*vertexCos)[3], int numVerts,
+                        int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
 {
-	DerivedMesh *dm = derivedData;
+	HookModifierData *hmd = (HookModifierData*) md;
+	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
 
-	if(!derivedData) dm = CDDM_from_editmesh(editData, ob->data);
+	deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
 
-	deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
+	if(derivedData != dm)
+		dm->release(dm);
+}
 
-	if(!derivedData) dm->release(dm);
+static void deformVertsEM(ModifierData *md, Object *ob, struct EditMesh *editData,
+                          DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+{
+	HookModifierData *hmd = (HookModifierData*) md;
+	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
+
+	deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
+
+	if(derivedData != dm)
+		dm->release(dm);
 }
 
 




More information about the Bf-blender-cvs mailing list