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:
Diffstat (limited to 'source/blender/modifiers/intern/MOD_shapekey.c')
-rw-r--r--source/blender/modifiers/intern/MOD_shapekey.c86
1 files changed, 63 insertions, 23 deletions
diff --git a/source/blender/modifiers/intern/MOD_shapekey.c b/source/blender/modifiers/intern/MOD_shapekey.c
index f73dcc25235..94d23de6573 100644
--- a/source/blender/modifiers/intern/MOD_shapekey.c
+++ b/source/blender/modifiers/intern/MOD_shapekey.c
@@ -30,10 +30,18 @@
*
*/
+/** \file blender/modifiers/intern/MOD_shapekey.c
+ * \ingroup modifiers
+ */
+
+
#include "BLI_math.h"
#include "DNA_key_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_key.h"
#include "BKE_particle.h"
@@ -42,9 +50,12 @@
#include "MEM_guardedalloc.h"
-static void deformVerts(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc)
+static void deformVerts(ModifierData *md, Object *ob,
+ DerivedMesh *UNUSED(derivedData),
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
KeyBlock *kb= ob_get_keyblock(ob);
float (*deformedVerts)[3];
@@ -58,9 +69,33 @@ static void deformVerts(
}
}
-static void deformVertsEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
- DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+static void deformMatrices(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
+{
+ Key *key= ob_get_key(ob);
+ KeyBlock *kb= ob_get_keyblock(ob);
+ float scale[3][3];
+
+ (void)vertexCos; /* unused */
+
+ if(kb && kb->totelem==numVerts && kb!=key->refkey) {
+ int a;
+
+ if(ob->shapeflag & OB_SHAPE_LOCK) scale_m3_fl(scale, 1);
+ else scale_m3_fl(scale, kb->curval);
+
+ for(a=0; a<numVerts; a++)
+ copy_m3_m3(defMats[a], scale);
+ }
+
+ deformVerts(md, ob, derivedData, vertexCos, numVerts, 0, 0);
+}
+
+static void deformVertsEM(ModifierData *md, Object *ob,
+ struct EditMesh *UNUSED(editData),
+ DerivedMesh *derivedData,
+ float (*vertexCos)[3],
+ int numVerts)
{
Key *key= ob_get_key(ob);
@@ -68,17 +103,21 @@ static void deformVertsEM(
deformVerts(md, ob, derivedData, vertexCos, numVerts, 0, 0);
}
-static void deformMatricesEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
- DerivedMesh *derivedData, float (*vertexCos)[3],
- float (*defMats)[3][3], int numVerts)
+static void deformMatricesEM(ModifierData *UNUSED(md), Object *ob,
+ struct EditMesh *UNUSED(editData),
+ DerivedMesh *UNUSED(derivedData),
+ float (*vertexCos)[3],
+ float (*defMats)[3][3],
+ int numVerts)
{
Key *key= ob_get_key(ob);
KeyBlock *kb= ob_get_keyblock(ob);
float scale[3][3];
- int a;
+
+ (void)vertexCos; /* unused */
if(kb && kb->totelem==numVerts && kb!=key->refkey) {
+ int a;
scale_m3_fl(scale, kb->curval);
for(a=0; a<numVerts; a++)
@@ -86,7 +125,6 @@ static void deformMatricesEM(
}
}
-
ModifierTypeInfo modifierType_ShapeKey = {
/* name */ "ShapeKey",
/* structName */ "ShapeKeyModifierData",
@@ -95,18 +133,20 @@ ModifierTypeInfo modifierType_ShapeKey = {
/* flags */ eModifierTypeFlag_AcceptsCVs
| eModifierTypeFlag_SupportsEditmode,
- /* copyData */ 0,
+ /* copyData */ NULL,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ deformMatrices,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ deformMatricesEM,
- /* applyModifier */ 0,
- /* applyModifierEM */ 0,
- /* initData */ 0,
- /* requiredDataMask */ 0,
- /* freeData */ 0,
- /* isDisabled */ 0,
- /* updateDepgraph */ 0,
- /* dependsOnTime */ 0,
- /* foreachObjectLink */ 0,
- /* foreachIDLink */ 0,
+ /* applyModifier */ NULL,
+ /* applyModifierEM */ NULL,
+ /* initData */ NULL,
+ /* requiredDataMask */ NULL,
+ /* freeData */ NULL,
+ /* isDisabled */ NULL,
+ /* updateDepgraph */ NULL,
+ /* dependsOnTime */ NULL,
+ /* dependsOnNormals */ NULL,
+ /* foreachObjectLink */ NULL,
+ /* foreachIDLink */ NULL
};