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:
authorJoseph Eagar <joeedh@gmail.com>2011-02-27 09:19:40 +0300
committerJoseph Eagar <joeedh@gmail.com>2011-02-27 09:19:40 +0300
commitf01261d040be27337db9f9996d648a279c89b7c4 (patch)
treec448230939b3c90d53ce8852dd00925d6052e3a4 /source/blender/modifiers/intern
parentdcaeda5c4e3a0687251b8511de4f2e8b85ef75c0 (diff)
parent2198cfdb2deec8b2e85e242c74a032f43d0b26ca (diff)
merge with/from trunk at r35190
Diffstat (limited to 'source/blender/modifiers/intern')
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c47
-rw-r--r--source/blender/modifiers/intern/MOD_array.c6
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c28
-rw-r--r--source/blender/modifiers/intern/MOD_boolean.c44
-rw-r--r--source/blender/modifiers/intern/MOD_boolean_util.c14
-rw-r--r--source/blender/modifiers/intern/MOD_boolean_util.h7
-rw-r--r--source/blender/modifiers/intern/MOD_build.c189
-rw-r--r--source/blender/modifiers/intern/MOD_cast.c37
-rw-r--r--source/blender/modifiers/intern/MOD_cloth.c29
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c30
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c33
-rw-r--r--source/blender/modifiers/intern/MOD_decimate.c30
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c51
-rw-r--r--source/blender/modifiers/intern/MOD_edgesplit.c3
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c940
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim.c31
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim_util.c146
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim_util.h9
-rw-r--r--source/blender/modifiers/intern/MOD_hook.c207
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c31
-rw-r--r--source/blender/modifiers/intern/MOD_mask.c29
-rw-r--r--source/blender/modifiers/intern/MOD_meshdeform.c43
-rw-r--r--source/blender/modifiers/intern/MOD_mirror.c8
-rw-r--r--source/blender/modifiers/intern/MOD_multires.c16
-rw-r--r--source/blender/modifiers/intern/MOD_none.c15
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c31
-rw-r--r--source/blender/modifiers/intern/MOD_particlesystem.c53
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c57
-rw-r--r--source/blender/modifiers/intern/MOD_shapekey.c86
-rw-r--r--source/blender/modifiers/intern/MOD_shrinkwrap.c40
-rw-r--r--source/blender/modifiers/intern/MOD_simpledeform.c41
-rw-r--r--source/blender/modifiers/intern/MOD_smoke.c54
-rw-r--r--source/blender/modifiers/intern/MOD_smooth.c21
-rw-r--r--source/blender/modifiers/intern/MOD_softbody.c21
-rw-r--r--source/blender/modifiers/intern/MOD_solidify.c69
-rw-r--r--source/blender/modifiers/intern/MOD_subsurf.c23
-rw-r--r--source/blender/modifiers/intern/MOD_surface.c24
-rw-r--r--source/blender/modifiers/intern/MOD_util.c27
-rw-r--r--source/blender/modifiers/intern/MOD_util.h16
-rw-r--r--source/blender/modifiers/intern/MOD_uvproject.c32
-rw-r--r--source/blender/modifiers/intern/MOD_wave.c42
-rw-r--r--source/blender/modifiers/intern/Makefile55
42 files changed, 1653 insertions, 1062 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index d0e36f90ff5..fa39c197c7b 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -30,10 +30,19 @@
*
*/
+/** \file blender/modifiers/intern/MOD_armature.c
+ * \ingroup modifiers
+ */
+
+
#include <string.h>
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
+
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
@@ -60,20 +69,21 @@ static void copyData(ModifierData *md, ModifierData *target)
tamd->object = amd->object;
tamd->deformflag = amd->deformflag;
+ tamd->multi = amd->multi;
strncpy(tamd->defgrp_name, amd->defgrp_name, 32);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md))
{
CustomDataMask dataMask = 0;
/* ask for vertexgroups */
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
ArmatureModifierData *amd = (ArmatureModifierData*) md;
@@ -90,9 +100,10 @@ static void foreachObjectLink(
walk(userData, ob, &amd->object);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob,
- DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
ArmatureModifierData *amd = (ArmatureModifierData*) md;
@@ -104,9 +115,12 @@ static void updateDepgraph(
}
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
ArmatureModifierData *amd = (ArmatureModifierData*) md;
@@ -153,6 +167,19 @@ static void deformMatricesEM(
if(!derivedData) dm->release(dm);
}
+static void deformMatrices(ModifierData *md, Object *ob, DerivedMesh *derivedData,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts)
+{
+ ArmatureModifierData *amd = (ArmatureModifierData*) md;
+ DerivedMesh *dm = derivedData;
+
+ if(!derivedData) dm = CDDM_from_mesh((Mesh*)ob->data, ob);
+
+ armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
+ amd->deformflag, NULL, amd->defgrp_name);
+
+ if(!derivedData) dm->release(dm);
+}
ModifierTypeInfo modifierType_Armature = {
/* name */ "Armature",
@@ -164,6 +191,7 @@ ModifierTypeInfo modifierType_Armature = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ deformMatrices,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ deformMatricesEM,
/* applyModifier */ 0,
@@ -174,6 +202,7 @@ ModifierTypeInfo modifierType_Armature = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 98295ae0d8e..f5a276aeadc 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -37,6 +37,7 @@
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_edgehash.h"
+#include "BLI_utildefines.h"
#include "DNA_curve_types.h"
#include "DNA_meshdata_types.h"
@@ -51,6 +52,10 @@
#include "depsgraph_private.h"
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
static void initData(ModifierData *md)
{
ArrayModifierData *amd = (ArrayModifierData*) md;
@@ -544,6 +549,7 @@ ModifierTypeInfo modifierType_Array = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index e37bf18a293..8d34fdcb10e 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -29,13 +29,22 @@
* ***** END GPL LICENSE BLOCK *****
*
*/
+
+/** \file blender/modifiers/intern/MOD_bevel.c
+ * \ingroup modifiers
+ */
+
#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
+
#include "BKE_bmesh.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_particle.h"
+#include "MOD_util.h"
+
static void initData(ModifierData *md)
{
@@ -66,20 +75,21 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(tbmd->defgrp_name, bmd->defgrp_name, 32);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
BevelModifierData *bmd = (BevelModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(bmd->defgrp_name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(bmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
-static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
#if 0
DerivedMesh *result;
@@ -109,9 +119,9 @@ static DerivedMesh *applyModifier(
return CDDM_copy(derivedData, 0);
}
-static DerivedMesh *applyModifierEM(
- ModifierData *md, Object *ob, EditMesh *editData,
- DerivedMesh *derivedData)
+static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
+ EditMesh *UNUSED(editData),
+ DerivedMesh *derivedData)
{
return applyModifier(md, ob, derivedData, 0, 1);
}
@@ -128,6 +138,7 @@ ModifierTypeInfo modifierType_Bevel = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -138,6 +149,7 @@ ModifierTypeInfo modifierType_Bevel = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c
index 4e8e3117b7e..d4be9d3d03a 100644
--- a/source/blender/modifiers/intern/MOD_boolean.c
+++ b/source/blender/modifiers/intern/MOD_boolean.c
@@ -30,14 +30,23 @@
*
*/
+/** \file blender/modifiers/intern/MOD_boolean.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_object_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "depsgraph_private.h"
#include "MOD_boolean_util.h"
+#include "MOD_util.h"
static void copyData(ModifierData *md, ModifierData *target)
@@ -49,7 +58,7 @@ static void copyData(ModifierData *md, ModifierData *target)
tbmd->operation = bmd->operation;
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
BooleanModifierData *bmd = (BooleanModifierData*) md;
@@ -66,9 +75,10 @@ static void foreachObjectLink(
walk(userData, ob, &bmd->object);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob,
- DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
BooleanModifierData *bmd = (BooleanModifierData*) md;
@@ -80,10 +90,11 @@ static void updateDepgraph(
}
}
-
-static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+#ifdef WITH_MOD_BOOLEAN
+static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
BooleanModifierData *bmd = (BooleanModifierData*) md;
DerivedMesh *dm = bmd->object->derivedFinal;
@@ -104,12 +115,21 @@ static DerivedMesh *applyModifier(
return derivedData;
}
+#else // WITH_MOD_BOOLEAN
+static DerivedMesh *applyModifier(ModifierData *UNUSED(md), Object *UNUSED(ob),
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
+{
+ return derivedData;
+}
+#endif // WITH_MOD_BOOLEAN
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md))
{
- CustomDataMask dataMask = (1 << CD_MTFACE) + (1 << CD_MEDGE);
+ CustomDataMask dataMask = CD_MASK_MTFACE | CD_MASK_MEDGE;
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
@@ -125,6 +145,7 @@ ModifierTypeInfo modifierType_Boolean = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -135,6 +156,7 @@ ModifierTypeInfo modifierType_Boolean = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c
index a0532f9db5c..cefad37ea26 100644
--- a/source/blender/modifiers/intern/MOD_boolean_util.c
+++ b/source/blender/modifiers/intern/MOD_boolean_util.c
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -28,6 +28,11 @@
* CSG operations.
*/
+/** \file blender/modifiers/intern/MOD_boolean_util.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
@@ -37,6 +42,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "BKE_cdderivedmesh.h"
@@ -47,6 +53,8 @@
#include "CSG_BooleanOps.h"
+#include "MOD_boolean_util.h"
+
/**
* Here's the vertex iterator structure used to walk through
* the blender vertex structure.
@@ -454,7 +462,7 @@ static void FreeMeshDescriptors(
FaceIt_Destruct(face_it);
}
-DerivedMesh *NewBooleanDerivedMesh_intern(
+static DerivedMesh *NewBooleanDerivedMesh_intern(
DerivedMesh *dm, struct Object *ob, DerivedMesh *dm_select, struct Object *ob_select,
int int_op_type, Material **mat, int *totmat)
{
@@ -581,7 +589,7 @@ int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type)
MEM_freeN(mat);
/* update dag */
- DAG_id_flush_update(&ob_new->id, OB_RECALC_DATA);
+ DAG_id_tag_update(&ob_new->id, OB_RECALC_DATA);
return 1;
}
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.h b/source/blender/modifiers/intern/MOD_boolean_util.h
index e415b368a85..2a4191de407 100644
--- a/source/blender/modifiers/intern/MOD_boolean_util.h
+++ b/source/blender/modifiers/intern/MOD_boolean_util.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,6 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file blender/modifiers/intern/MOD_boolean_util.h
+ * \ingroup modifiers
+ */
+
+
#ifndef MOD_BOOLEAN_UTILS_H
#define MOD_BOOLEAN_UTILS_H
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index e027cc1fccc..e2a54648623 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -30,8 +30,14 @@
*
*/
+/** \file blender/modifiers/intern/MOD_build.c
+ * \ingroup modifiers
+ */
+
+
#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
#include "BLI_rand.h"
#include "BLI_ghash.h"
@@ -45,6 +51,7 @@
#include "BKE_particle.h"
#include "BKE_scene.h"
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -65,21 +72,21 @@ static void copyData(ModifierData *md, ModifierData *target)
tbmd->seed = bmd->seed;
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = derivedData;
DerivedMesh *result;
BuildModifierData *bmd = (BuildModifierData*) md;
int i;
int numFaces, numEdges;
- int maxVerts, maxEdges, maxFaces;
int *vertMap, *edgeMap, *faceMap;
float frac;
GHashIterator *hashIter;
@@ -90,19 +97,15 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
GHash *edgeHash = BLI_ghash_new(BLI_ghashutil_inthash,
BLI_ghashutil_intcmp, "build ed apply gh");
- maxVerts = dm->getNumVerts(dm);
- vertMap = MEM_callocN(sizeof(*vertMap) * maxVerts,
- "build modifier vertMap");
- for(i = 0; i < maxVerts; ++i) vertMap[i] = i;
+ const int maxVerts= dm->getNumVerts(dm);
+ const int maxEdges= dm->getNumEdges(dm);
+ const int maxFaces= dm->getNumTessFaces(dm);
- maxEdges = dm->getNumEdges(dm);
- edgeMap = MEM_callocN(sizeof(*edgeMap) * maxEdges,
- "build modifier edgeMap");
+ vertMap = MEM_callocN(sizeof(*vertMap) * maxVerts, "build modifier vertMap");
+ for(i = 0; i < maxVerts; ++i) vertMap[i] = i;
+ edgeMap = MEM_callocN(sizeof(*edgeMap) * maxEdges, "build modifier edgeMap");
for(i = 0; i < maxEdges; ++i) edgeMap[i] = i;
-
- maxFaces = dm->getNumTessFaces(dm);
- faceMap = MEM_callocN(sizeof(*faceMap) * maxFaces,
- "build modifier faceMap");
+ faceMap = MEM_callocN(sizeof(*faceMap) * maxFaces, "build modifier faceMap");
for(i = 0; i < maxFaces; ++i) faceMap[i] = i;
if (ob) {
@@ -118,8 +121,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* if there's at least one face, build based on faces */
if(numFaces) {
- int maxEdges;
-
if(bmd->randomize)
BLI_array_randomize(faceMap, sizeof(*faceMap),
maxFaces, bmd->seed);
@@ -148,7 +149,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* get the set of edges that will be in the new mesh (i.e. all edges
* that have both verts in the new mesh)
*/
- maxEdges = dm->getNumEdges(dm);
for(i = 0; i < maxEdges; ++i) {
MEdge me;
dm->getEdge(dm, i, &me);
@@ -208,75 +208,72 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
BLI_ghash_size(edgeHash), numFaces, 0, 0);
/* copy the vertices across */
- for(hashIter = BLI_ghashIterator_new(vertHash);
- !BLI_ghashIterator_isDone(hashIter);
- BLI_ghashIterator_step(hashIter)) {
- MVert source;
- MVert *dest;
- int oldIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(hashIter));
- int newIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getValue(hashIter));
-
- dm->getVert(dm, oldIndex, &source);
- dest = CDDM_get_vert(result, newIndex);
-
- DM_copy_vert_data(dm, result, oldIndex, newIndex, 1);
- *dest = source;
- }
- BLI_ghashIterator_free(hashIter);
-
- /* copy the edges across, remapping indices */
- for(i = 0; i < BLI_ghash_size(edgeHash); ++i) {
- MEdge source;
- MEdge *dest;
- int oldIndex = GET_INT_FROM_POINTER(BLI_ghash_lookup(edgeHash, SET_INT_IN_POINTER(i)));
-
- dm->getEdge(dm, oldIndex, &source);
- dest = CDDM_get_edge(result, i);
-
- source.v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v1)));
- source.v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v2)));
-
- DM_copy_edge_data(dm, result, oldIndex, i, 1);
- *dest = source;
- }
-
- /* copy the faces across, remapping indices */
- for(i = 0; i < numFaces; ++i) {
- MFace source;
- MFace *dest;
- int orig_v4;
-
- dm->getTessFace(dm, faceMap[i], &source);
- dest = CDDM_get_tessface(result, i);
-
- orig_v4 = source.v4;
-
- source.v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v1)));
- source.v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v2)));
- source.v3 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v3)));
- if(source.v4)
- source.v4 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v4)));
-
- DM_copy_face_data(dm, result, faceMap[i], i, 1);
- *dest = source;
-
- test_index_face(dest, &result->faceData, i, (orig_v4 ? 4 : 3));
- }
-
- CDDM_calc_normals(result);
-
- BLI_ghash_free(vertHash, NULL, NULL);
- BLI_ghash_free(edgeHash, NULL, NULL);
-
- MEM_freeN(vertMap);
- MEM_freeN(edgeMap);
- MEM_freeN(faceMap);
+ for( hashIter = BLI_ghashIterator_new(vertHash);
+ !BLI_ghashIterator_isDone(hashIter);
+ BLI_ghashIterator_step(hashIter)
+ ) {
+ MVert source;
+ MVert *dest;
+ int oldIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(hashIter));
+ int newIndex = GET_INT_FROM_POINTER(BLI_ghashIterator_getValue(hashIter));
+
+ dm->getVert(dm, oldIndex, &source);
+ dest = CDDM_get_vert(result, newIndex);
+
+ DM_copy_vert_data(dm, result, oldIndex, newIndex, 1);
+ *dest = source;
+ }
+ BLI_ghashIterator_free(hashIter);
+
+ /* copy the edges across, remapping indices */
+ for(i = 0; i < BLI_ghash_size(edgeHash); ++i) {
+ MEdge source;
+ MEdge *dest;
+ int oldIndex = GET_INT_FROM_POINTER(BLI_ghash_lookup(edgeHash, SET_INT_IN_POINTER(i)));
+
+ dm->getEdge(dm, oldIndex, &source);
+ dest = CDDM_get_edge(result, i);
+
+ source.v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v1)));
+ source.v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v2)));
+
+ DM_copy_edge_data(dm, result, oldIndex, i, 1);
+ *dest = source;
+ }
- dm = CDDM_copy(result, 1); /*builds ngon faces from tess (mface) faces*/
- result->needsFree = 1;
- result->release(result);
+ /* copy the faces across, remapping indices */
+ for(i = 0; i < numFaces; ++i) {
+ MFace source;
+ MFace *dest;
+ int orig_v4;
+
+ dm->getTessFace(dm, faceMap[i], &source);
+ dest = CDDM_get_tessface(result, i);
+
+ orig_v4 = source.v4;
+
+ source.v1 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v1)));
+ source.v2 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v2)));
+ source.v3 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v3)));
+ if(source.v4)
+ source.v4 = GET_INT_FROM_POINTER(BLI_ghash_lookup(vertHash, SET_INT_IN_POINTER(source.v4)));
+
+ DM_copy_face_data(dm, result, faceMap[i], i, 1);
+ *dest = source;
+
+ test_index_face(dest, &result->faceData, i, (orig_v4 ? 4 : 3));
+ }
- return dm;
+ CDDM_calc_normals(result);
+
+ BLI_ghash_free(vertHash, NULL, NULL);
+ BLI_ghash_free(edgeHash, NULL, NULL);
+
+ MEM_freeN(vertMap);
+ MEM_freeN(edgeMap);
+ MEM_freeN(faceMap);
+
+ return result;
}
@@ -288,17 +285,19 @@ ModifierTypeInfo modifierType_Build = {
/* flags */ eModifierTypeFlag_AcceptsMesh
| eModifierTypeFlag_AcceptsCVs,
/* copyData */ copyData,
- /* deformVerts */ 0,
- /* deformVertsEM */ 0,
- /* deformMatricesEM */ 0,
+ /* deformVerts */ NULL,
+ /* deformMatrices */ NULL,
+ /* deformVertsEM */ NULL,
+ /* deformMatricesEM */ NULL,
/* applyModifier */ applyModifier,
- /* applyModifierEM */ 0,
+ /* applyModifierEM */ NULL,
/* initData */ initData,
- /* requiredDataMask */ 0,
- /* freeData */ 0,
- /* isDisabled */ 0,
- /* updateDepgraph */ 0,
+ /* requiredDataMask */ NULL,
+ /* freeData */ NULL,
+ /* isDisabled */ NULL,
+ /* updateDepgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
- /* foreachObjectLink */ 0,
- /* foreachIDLink */ 0,
+ /* dependsOnNormals */ NULL,
+ /* foreachObjectLink */ NULL,
+ /* foreachIDLink */ NULL
};
diff --git a/source/blender/modifiers/intern/MOD_cast.c b/source/blender/modifiers/intern/MOD_cast.c
index 10843cf9677..68e9e173ee6 100644
--- a/source/blender/modifiers/intern/MOD_cast.c
+++ b/source/blender/modifiers/intern/MOD_cast.c
@@ -30,15 +30,22 @@
*
*/
+/** \file blender/modifiers/intern/MOD_cast.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_deform.h"
#include "BKE_DerivedMesh.h"
#include "BKE_modifier.h"
-#include "BKE_utildefines.h"
+
#include "depsgraph_private.h"
@@ -73,7 +80,7 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(tcmd->defgrp_name, cmd->defgrp_name, 32);
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
CastModifierData *cmd = (CastModifierData*) md;
short flag;
@@ -85,13 +92,13 @@ static int isDisabled(ModifierData *md, int useRenderParams)
return 0;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
CastModifierData *cmd = (CastModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(cmd->defgrp_name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(cmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
@@ -106,9 +113,10 @@ static void foreachObjectLink(
walk (userData, ob, &cmd->object);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob,
- DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
CastModifierData *cmd = (CastModifierData*) md;
@@ -566,14 +574,17 @@ static void cuboid_do(
}
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = NULL;
CastModifierData *cmd = (CastModifierData *)md;
- dm = get_dm(md->scene, ob, NULL, derivedData, NULL, 0);
+ dm = get_dm(ob, NULL, derivedData, NULL, 0);
if (cmd->type == MOD_CAST_TYPE_CUBOID) {
cuboid_do(cmd, ob, dm, vertexCos, numVerts);
@@ -589,7 +600,7 @@ static void deformVertsEM(
ModifierData *md, Object *ob, struct EditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
- DerivedMesh *dm = get_dm(md->scene, ob, editData, derivedData, NULL, 0);
+ DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
CastModifierData *cmd = (CastModifierData *)md;
if (cmd->type == MOD_CAST_TYPE_CUBOID) {
@@ -613,6 +624,7 @@ ModifierTypeInfo modifierType_Cast = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -623,6 +635,7 @@ ModifierTypeInfo modifierType_Cast = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index bfb5f6ee028..999349dca7f 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -30,12 +30,20 @@
*
*/
+/** \file blender/modifiers/intern/MOD_cloth.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_cloth_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cloth.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_global.h"
@@ -44,6 +52,7 @@
#include "depsgraph_private.h"
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -61,7 +70,9 @@ static void initData(ModifierData *md)
}
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData, int useRenderParams, int isFinalCalc)
+ DerivedMesh *dm,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
ClothModifierData *clmd = (ClothModifierData*) md;
DerivedMesh *result=NULL;
@@ -72,17 +83,17 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
initData(md);
if(!clmd->sim_parms || !clmd->coll_parms)
- return derivedData;
+ return dm;
}
- result = clothModifier_do(clmd, md->scene, ob, derivedData, useRenderParams, isFinalCalc);
+ result = clothModifier_do(clmd, md->scene, ob, dm);
if(result)
{
CDDM_calc_normals(result);
return result;
}
- return derivedData;
+ return dm;
}
static void updateDepgraph(
@@ -111,16 +122,16 @@ static void updateDepgraph(
}
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
CustomDataMask dataMask = 0;
ClothModifierData *clmd = (ClothModifierData*)md;
if(cloth_uses_vgroup(clmd))
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
if(clmd->sim_parms->shapekey_rest != 0)
- dataMask |= (1 << CD_CLOTH_ORCO);
+ dataMask |= CD_MASK_CLOTH_ORCO;
return dataMask;
}
@@ -150,7 +161,7 @@ static void copyData(ModifierData *md, ModifierData *target)
tclmd->clothObject = NULL;
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
@@ -191,6 +202,7 @@ ModifierTypeInfo modifierType_Cloth = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -201,6 +213,7 @@ ModifierTypeInfo modifierType_Cloth = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index fd43e057144..07b35cdf334 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -30,6 +30,11 @@
*
*/
+/** \file blender/modifiers/intern/MOD_collision.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
@@ -37,6 +42,8 @@
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_collision.h"
#include "BKE_cdderivedmesh.h"
@@ -46,6 +53,7 @@
#include "BKE_pointcache.h"
#include "BKE_scene.h"
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -94,19 +102,20 @@ static void freeData(ModifierData *md)
}
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int UNUSED(numVerts),
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
CollisionModifierData *collmd = (CollisionModifierData*) md;
DerivedMesh *dm = NULL;
- float current_time = 0;
- unsigned int numverts = 0, i = 0;
MVert *tempVert = NULL;
/* if possible use/create DerivedMesh */
@@ -121,6 +130,9 @@ static void deformVerts(
if(dm)
{
+ float current_time = 0;
+ unsigned int numverts = 0;
+
CDDM_apply_vert_coords(dm, vertexCos);
CDDM_calc_normals(dm);
@@ -132,7 +144,9 @@ static void deformVerts(
numverts = dm->getNumVerts ( dm );
if((current_time > collmd->time)|| (BKE_ptcache_get_continue_physics()))
- {
+ {
+ unsigned int i;
+
// check if mesh has changed
if(collmd->x && (numverts != collmd->numverts))
freeData((ModifierData *)collmd);
@@ -238,6 +252,7 @@ ModifierTypeInfo modifierType_Collision = {
/* copyData */ 0,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -248,6 +263,7 @@ ModifierTypeInfo modifierType_Collision = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index 97c7a4b01d6..84fee7b5102 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -30,17 +30,26 @@
*
*/
+/** \file blender/modifiers/intern/MOD_curve.c
+ * \ingroup modifiers
+ */
+
+
#include <string.h>
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
#include "BKE_modifier.h"
#include "depsgraph_private.h"
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -59,18 +68,18 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(tcmd->name, cmd->name, 32);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
CurveModifierData *cmd = (CurveModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(cmd->name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(cmd->name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
-static int isDisabled(ModifierData *md, int userRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(userRenderParams))
{
CurveModifierData *cmd = (CurveModifierData*) md;
@@ -87,9 +96,10 @@ static void foreachObjectLink(
walk(userData, ob, &cmd->object);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, Scene *scene,
- Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
CurveModifierData *cmd = (CurveModifierData*) md;
@@ -101,9 +111,12 @@ static void updateDepgraph(
}
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
CurveModifierData *cmd = (CurveModifierData*) md;
@@ -135,6 +148,7 @@ ModifierTypeInfo modifierType_Curve = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -145,6 +159,7 @@ ModifierTypeInfo modifierType_Curve = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_decimate.c b/source/blender/modifiers/intern/MOD_decimate.c
index f75fc0dd1f4..4eae988f92f 100644
--- a/source/blender/modifiers/intern/MOD_decimate.c
+++ b/source/blender/modifiers/intern/MOD_decimate.c
@@ -30,9 +30,16 @@
*
*/
+/** \file blender/modifiers/intern/MOD_decimate.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
@@ -41,8 +48,11 @@
#include "MEM_guardedalloc.h"
+#ifdef WITH_MOD_DECIMATE
#include "LOD_decimation.h"
+#endif
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -59,9 +69,11 @@ static void copyData(ModifierData *md, ModifierData *target)
tdmd->percent = dmd->percent;
}
-static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+#ifdef WITH_MOD_DECIMATE
+static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DecimateModifierData *dmd = (DecimateModifierData*) md;
DerivedMesh *dm = derivedData, *result = NULL;
@@ -179,7 +191,15 @@ exit:
return dm;
}
-
+#else // WITH_MOD_DECIMATE
+static DerivedMesh *applyModifier(ModifierData *UNUSED(md), Object *UNUSED(ob),
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
+{
+ return derivedData;
+}
+#endif // WITH_MOD_DECIMATE
ModifierTypeInfo modifierType_Decimate = {
/* name */ "Decimate",
@@ -189,6 +209,7 @@ ModifierTypeInfo modifierType_Decimate = {
/* flags */ eModifierTypeFlag_AcceptsMesh,
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -199,6 +220,7 @@ ModifierTypeInfo modifierType_Decimate = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 6dbe3d3622c..6ae5c14d5ef 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -30,10 +30,17 @@
*
*/
+/** \file blender/modifiers/intern/MOD_displace.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
@@ -75,16 +82,16 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(tdmd->uvlayer_name, dmd->uvlayer_name, 32);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
DisplaceModifierData *dmd = (DisplaceModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(dmd->defgrp_name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(dmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT;
/* ask for UV coordinates if we need them */
- if(dmd->texmapping == MOD_DISP_MAP_UV) dataMask |= (1 << CD_MTFACE);
+ if(dmd->texmapping == MOD_DISP_MAP_UV) dataMask |= CD_MASK_MTFACE;
return dataMask;
}
@@ -103,6 +110,12 @@ static int dependsOnTime(ModifierData *md)
}
}
+static int dependsOnNormals(ModifierData *md)
+{
+ DisplaceModifierData *dmd = (DisplaceModifierData *)md;
+ return (dmd->direction == MOD_DISP_DIR_NOR);
+}
+
static void foreachObjectLink(ModifierData *md, Object *ob,
ObjectWalkFunc walk, void *userData)
{
@@ -121,25 +134,32 @@ static void foreachIDLink(ModifierData *md, Object *ob,
foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData);
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
DisplaceModifierData *dmd = (DisplaceModifierData*) md;
return (!dmd->texture || dmd->strength == 0.0f);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, struct Scene *scene,
- Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
DisplaceModifierData *dmd = (DisplaceModifierData*) md;
- if(dmd->map_object) {
+ if(dmd->map_object && dmd->texmapping == MOD_DISP_MAP_OBJECT) {
DagNode *curNode = dag_get_node(forest, dmd->map_object);
dag_add_relation(forest, curNode, obNode,
DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Displace Modifier");
}
+
+
+ if(dmd->texmapping == MOD_DISP_MAP_GLOBAL)
+ dag_add_relation(forest, obNode, obNode,
+ DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Displace Modifier");
+
}
static void get_texture_coords(DisplaceModifierData *dmd, Object *ob,
@@ -302,11 +322,14 @@ static void displaceModifier_do(
MEM_freeN(tex_co);
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
- DerivedMesh *dm= get_cddm(md->scene, ob, NULL, derivedData, vertexCos);
+ DerivedMesh *dm= get_cddm(ob, NULL, derivedData, vertexCos);
displaceModifier_do((DisplaceModifierData *)md, ob, dm,
vertexCos, numVerts);
@@ -319,7 +342,7 @@ static void deformVertsEM(
ModifierData *md, Object *ob, struct EditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
- DerivedMesh *dm= get_cddm(md->scene, ob, editData, derivedData, vertexCos);
+ DerivedMesh *dm= get_cddm(ob, editData, derivedData, vertexCos);
displaceModifier_do((DisplaceModifierData *)md, ob, dm,
vertexCos, numVerts);
@@ -339,6 +362,7 @@ ModifierTypeInfo modifierType_Displace = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -349,6 +373,7 @@ ModifierTypeInfo modifierType_Displace = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ dependsOnNormals,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ foreachIDLink,
};
diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c
index 9d622669c78..4549448f45e 100644
--- a/source/blender/modifiers/intern/MOD_edgesplit.c
+++ b/source/blender/modifiers/intern/MOD_edgesplit.c
@@ -36,11 +36,13 @@
#include "BLI_edgehash.h"
#include "BLI_math.h"
#include "BLI_array.h"
+#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_particle.h"
#include "BKE_tessmesh.h"
+#include "BKE_mesh.h"
#include "MEM_guardedalloc.h"
@@ -446,6 +448,7 @@ ModifierTypeInfo modifierType_EdgeSplit = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index ec4137c2654..04687958efd 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -30,6 +30,11 @@
*
*/
+/** \file blender/modifiers/intern/MOD_explode.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
@@ -37,6 +42,7 @@
#include "BLI_rand.h"
#include "BLI_math.h"
#include "BLI_edgehash.h"
+#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_deform.h"
@@ -46,10 +52,11 @@
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
+
#include "MEM_guardedalloc.h"
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -74,24 +81,24 @@ static void copyData(ModifierData *md, ModifierData *target)
temd->protect = emd->protect;
temd->vgroup = emd->vgroup;
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
ExplodeModifierData *emd= (ExplodeModifierData*) md;
CustomDataMask dataMask = 0;
if(emd->vgroup)
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
static void createFacepa(ExplodeModifierData *emd,
- ParticleSystemModifierData *psmd,
- Object *ob, DerivedMesh *dm)
+ ParticleSystemModifierData *psmd,
+ DerivedMesh *dm)
{
ParticleSystem *psys=psmd->psys;
MFace *fa=0, *mface=0;
@@ -127,11 +134,10 @@ static void createFacepa(ExplodeModifierData *emd,
/* set protected verts */
if(emd->vgroup){
MDeformVert *dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
- float val;
if(dvert){
- int defgrp_index= emd->vgroup-1;
+ const int defgrp_index= emd->vgroup-1;
for(i=0; i<totvert; i++, dvert++){
- val = BLI_frand();
+ float val = BLI_frand();
val = (1.0f-emd->protect)*val + emd->protect*0.5f;
if(val < defvert_find_weight(dvert, defgrp_index))
vertpa[i] = -1;
@@ -179,15 +185,369 @@ static void createFacepa(ExplodeModifierData *emd,
BLI_kdtree_free(tree);
}
-static int edgesplit_get(EdgeHash *edgehash, int v1, int v2)
+static int edgecut_get(EdgeHash *edgehash, int v1, int v2)
{
return GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, v1, v2));
}
-static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
+
+const short add_faces[24] = {
+ 0,
+ 0, 0, 2, 0, 1, 2, 2, 0, 2, 1,
+ 2, 2, 2, 2, 3, 0, 0, 0, 1, 0,
+ 1, 1, 2
+ };
+
+MFace *get_dface(DerivedMesh *dm, DerivedMesh *split, int cur, int i, MFace *mf)
+{
+ MFace *df = CDDM_get_tessface(split, cur);
+ DM_copy_face_data(dm, split, i, cur, 1);
+ *df = *mf;
+ return df;
+}
+
+#define SET_VERTS(a, b, c, d) \
+ v[0]=mf->v##a; uv[0]=a-1; \
+ v[1]=mf->v##b; uv[1]=b-1; \
+ v[2]=mf->v##c; uv[2]=c-1; \
+ v[3]=mf->v##d; uv[3]=d-1;
+
+#define GET_ES(v1, v2) edgecut_get(eh, v1, v2);
+#define INT_UV(uvf, c0, c1) interp_v2_v2v2(uvf, mf->uv[c0], mf->uv[c1], 0.5f);
+
+static void remap_faces_3_6_9_12(DerivedMesh *dm, DerivedMesh *split, MFace *mf, int *facepa, int *vertpa, int i, EdgeHash *eh, int cur, int v1, int v2, int v3, int v4)
+{
+ MFace *df1 = get_dface(dm, split, cur, i, mf);
+ MFace *df2 = get_dface(dm, split, cur+1, i, mf);
+ MFace *df3 = get_dface(dm, split, cur+2, i, mf);
+
+ facepa[cur] = vertpa[v1];
+ df1->v1 = v1;
+ df1->v2 = GET_ES(v1, v2)
+ df1->v3 = GET_ES(v2, v3)
+ df1->v4 = v3;
+ df1->flag |= ME_FACE_SEL;
+
+ facepa[cur+1] = vertpa[v2];
+ df2->v1 = GET_ES(v1, v2)
+ df2->v2 = v2;
+ df2->v3 = GET_ES(v2, v3)
+ df2->v4 = 0;
+ df2->flag &= ~ME_FACE_SEL;
+
+ facepa[cur+2] = vertpa[v1];
+ df3->v1 = v1;
+ df3->v2 = v3;
+ df3->v3 = v4;
+ df3->v4 = 0;
+ df3->flag &= ~ME_FACE_SEL;
+}
+
+static void remap_uvs_3_6_9_12(DerivedMesh *dm, DerivedMesh *split, int numlayer, int i, int cur, int c0, int c1, int c2, int c3)
+{
+ MTFace *mf, *df1, *df2, *df3;
+ int l;
+
+ for(l=0; l<numlayer; l++) {
+ mf = CustomData_get_layer_n(&split->faceData, CD_MTFACE, l);
+ df1 = mf+cur;
+ df2 = df1 + 1;
+ df3 = df1 + 2;
+ mf = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, l);
+ mf += i;
+
+ copy_v2_v2(df1->uv[0], mf->uv[c0]);
+ INT_UV(df1->uv[1], c0, c1)
+ INT_UV(df1->uv[2], c1, c2)
+ copy_v2_v2(df1->uv[3], mf->uv[c2]);
+
+ INT_UV(df2->uv[0], c0, c1)
+ copy_v2_v2(df2->uv[1], mf->uv[c1]);
+ INT_UV(df2->uv[2], c1, c2)
+
+ copy_v2_v2(df3->uv[0], mf->uv[c0]);
+ copy_v2_v2(df3->uv[1], mf->uv[c2]);
+ copy_v2_v2(df3->uv[2], mf->uv[c3]);
+ }
+}
+
+static void remap_faces_5_10(DerivedMesh *dm, DerivedMesh *split, MFace *mf, int *facepa, int *vertpa, int i, EdgeHash *eh, int cur, int v1, int v2, int v3, int v4)
+{
+ MFace *df1 = get_dface(dm, split, cur, i, mf);
+ MFace *df2 = get_dface(dm, split, cur+1, i, mf);
+
+ facepa[cur] = vertpa[v1];
+ df1->v1 = v1;
+ df1->v2 = v2;
+ df1->v3 = GET_ES(v2, v3)
+ df1->v4 = GET_ES(v1, v4)
+ df1->flag |= ME_FACE_SEL;
+
+ facepa[cur+1] = vertpa[v3];
+ df2->v1 = GET_ES(v1, v4)
+ df2->v2 = GET_ES(v2, v3)
+ df2->v3 = v3;
+ df2->v4 = v4;
+ df2->flag |= ME_FACE_SEL;
+}
+
+static void remap_uvs_5_10(DerivedMesh *dm, DerivedMesh *split, int numlayer, int i, int cur, int c0, int c1, int c2, int c3)
+{
+ MTFace *mf, *df1, *df2;
+ int l;
+
+ for(l=0; l<numlayer; l++) {
+ mf = CustomData_get_layer_n(&split->faceData, CD_MTFACE, l);
+ df1 = mf+cur;
+ df2 = df1 + 1;
+ mf = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, l);
+ mf += i;
+
+ copy_v2_v2(df1->uv[0], mf->uv[c0]);
+ copy_v2_v2(df1->uv[1], mf->uv[c1]);
+ INT_UV(df1->uv[2], c1, c2)
+ INT_UV(df1->uv[3], c0, c3)
+
+ INT_UV(df2->uv[0], c0, c3)
+ INT_UV(df2->uv[1], c1, c2)
+ copy_v2_v2(df2->uv[2], mf->uv[c2]);
+ copy_v2_v2(df2->uv[3], mf->uv[c3]);
+
+ }
+}
+
+static void remap_faces_15(DerivedMesh *dm, DerivedMesh *split, MFace *mf, int *facepa, int *vertpa, int i, EdgeHash *eh, int cur, int v1, int v2, int v3, int v4)
+{
+ MFace *df1 = get_dface(dm, split, cur, i, mf);
+ MFace *df2 = get_dface(dm, split, cur+1, i, mf);
+ MFace *df3 = get_dface(dm, split, cur+2, i, mf);
+ MFace *df4 = get_dface(dm, split, cur+3, i, mf);
+
+ facepa[cur] = vertpa[v1];
+ df1->v1 = v1;
+ df1->v2 = GET_ES(v1, v2)
+ df1->v3 = GET_ES(v1, v3)
+ df1->v4 = GET_ES(v1, v4)
+ df1->flag |= ME_FACE_SEL;
+
+ facepa[cur+1] = vertpa[v2];
+ df2->v1 = GET_ES(v1, v2)
+ df2->v2 = v2;
+ df2->v3 = GET_ES(v2, v3)
+ df2->v4 = GET_ES(v1, v3)
+ df2->flag |= ME_FACE_SEL;
+
+ facepa[cur+2] = vertpa[v3];
+ df3->v1 = GET_ES(v1, v3)
+ df3->v2 = GET_ES(v2, v3)
+ df3->v3 = v3;
+ df3->v4 = GET_ES(v3, v4)
+ df3->flag |= ME_FACE_SEL;
+
+ facepa[cur+3] = vertpa[v4];
+ df4->v1 = GET_ES(v1, v4)
+ df4->v2 = GET_ES(v1, v3)
+ df4->v3 = GET_ES(v3, v4)
+ df4->v4 = v4;
+ df4->flag |= ME_FACE_SEL;
+}
+
+static void remap_uvs_15(DerivedMesh *dm, DerivedMesh *split, int numlayer, int i, int cur, int c0, int c1, int c2, int c3)
+{
+ MTFace *mf, *df1, *df2, *df3, *df4;
+ int l;
+
+ for(l=0; l<numlayer; l++) {
+ mf = CustomData_get_layer_n(&split->faceData, CD_MTFACE, l);
+ df1 = mf+cur;
+ df2 = df1 + 1;
+ df3 = df1 + 2;
+ df4 = df1 + 3;
+ mf = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, l);
+ mf += i;
+
+ copy_v2_v2(df1->uv[0], mf->uv[c0]);
+ INT_UV(df1->uv[1], c0, c1)
+ INT_UV(df1->uv[2], c0, c2)
+ INT_UV(df1->uv[3], c0, c3)
+
+ INT_UV(df2->uv[0], c0, c1)
+ copy_v2_v2(df2->uv[1], mf->uv[c1]);
+ INT_UV(df2->uv[2], c1, c2)
+ INT_UV(df2->uv[3], c0, c2)
+
+ INT_UV(df3->uv[0], c0, c2)
+ INT_UV(df3->uv[1], c1, c2)
+ copy_v2_v2(df3->uv[2], mf->uv[c2]);
+ INT_UV(df3->uv[3], c2, c3)
+
+ INT_UV(df4->uv[0], c0, c3)
+ INT_UV(df4->uv[1], c0, c2)
+ INT_UV(df4->uv[2], c2, c3)
+ copy_v2_v2(df4->uv[3], mf->uv[c3]);
+ }
+}
+
+static void remap_faces_7_11_13_14(DerivedMesh *dm, DerivedMesh *split, MFace *mf, int *facepa, int *vertpa, int i, EdgeHash *eh, int cur, int v1, int v2, int v3, int v4)
+{
+ MFace *df1 = get_dface(dm, split, cur, i, mf);
+ MFace *df2 = get_dface(dm, split, cur+1, i, mf);
+ MFace *df3 = get_dface(dm, split, cur+2, i, mf);
+
+ facepa[cur] = vertpa[v1];
+ df1->v1 = v1;
+ df1->v2 = GET_ES(v1, v2)
+ df1->v3 = GET_ES(v2, v3)
+ df1->v4 = GET_ES(v1, v4)
+ df1->flag |= ME_FACE_SEL;
+
+ facepa[cur+1] = vertpa[v2];
+ df2->v1 = GET_ES(v1, v2)
+ df2->v2 = v2;
+ df2->v3 = GET_ES(v2, v3)
+ df2->v4 = 0;
+ df2->flag &= ~ME_FACE_SEL;
+
+ facepa[cur+2] = vertpa[v4];
+ df3->v1 = GET_ES(v1, v4)
+ df3->v2 = GET_ES(v2, v3)
+ df3->v3 = v3;
+ df3->v4 = v4;
+ df3->flag |= ME_FACE_SEL;
+}
+
+static void remap_uvs_7_11_13_14(DerivedMesh *dm, DerivedMesh *split, int numlayer, int i, int cur, int c0, int c1, int c2, int c3)
+{
+ MTFace *mf, *df1, *df2, *df3;
+ int l;
+
+ for(l=0; l<numlayer; l++) {
+ mf = CustomData_get_layer_n(&split->faceData, CD_MTFACE, l);
+ df1 = mf+cur;
+ df2 = df1 + 1;
+ df3 = df1 + 2;
+ mf = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, l);
+ mf += i;
+
+ copy_v2_v2(df1->uv[0], mf->uv[c0]);
+ INT_UV(df1->uv[1], c0, c1)
+ INT_UV(df1->uv[2], c1, c2)
+ INT_UV(df1->uv[3], c0, c3)
+
+ INT_UV(df2->uv[0], c0, c1)
+ copy_v2_v2(df2->uv[1], mf->uv[c1]);
+ INT_UV(df2->uv[2], c1, c2)
+
+ INT_UV(df3->uv[0], c0, c3)
+ INT_UV(df3->uv[1], c1, c2)
+ copy_v2_v2(df3->uv[2], mf->uv[c2]);
+ copy_v2_v2(df3->uv[3], mf->uv[c3]);
+ }
+}
+
+static void remap_faces_19_21_22(DerivedMesh *dm, DerivedMesh *split, MFace *mf, int *facepa, int *vertpa, int i, EdgeHash *eh, int cur, int v1, int v2, int v3)
+{
+ MFace *df1 = get_dface(dm, split, cur, i, mf);
+ MFace *df2 = get_dface(dm, split, cur+1, i, mf);
+
+ facepa[cur] = vertpa[v1];
+ df1->v1 = v1;
+ df1->v2 = GET_ES(v1, v2)
+ df1->v3 = GET_ES(v1, v3)
+ df1->v4 = 0;
+ df1->flag &= ~ME_FACE_SEL;
+
+ facepa[cur+1] = vertpa[v2];
+ df2->v1 = GET_ES(v1, v2)
+ df2->v2 = v2;
+ df2->v3 = v3;
+ df2->v4 = GET_ES(v1, v3)
+ df2->flag |= ME_FACE_SEL;
+}
+
+static void remap_uvs_19_21_22(DerivedMesh *dm, DerivedMesh *split, int numlayer, int i, int cur, int c0, int c1, int c2)
+{
+ MTFace *mf, *df1, *df2;
+ int l;
+
+ for(l=0; l<numlayer; l++) {
+ mf = CustomData_get_layer_n(&split->faceData, CD_MTFACE, l);
+ df1 = mf+cur;
+ df2 = df1 + 1;
+ mf = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, l);
+ mf += i;
+
+ copy_v2_v2(df1->uv[0], mf->uv[c0]);
+ INT_UV(df1->uv[1], c0, c1)
+ INT_UV(df1->uv[2], c0, c2)
+
+ INT_UV(df2->uv[0], c0, c1)
+ copy_v2_v2(df2->uv[1], mf->uv[c1]);
+ copy_v2_v2(df2->uv[2], mf->uv[c2]);
+ INT_UV(df2->uv[3], c0, c2)
+ }
+}
+
+static void remap_faces_23(DerivedMesh *dm, DerivedMesh *split, MFace *mf, int *facepa, int *vertpa, int i, EdgeHash *eh, int cur, int v1, int v2, int v3)
+{
+ MFace *df1 = get_dface(dm, split, cur, i, mf);
+ MFace *df2 = get_dface(dm, split, cur+1, i, mf);
+ MFace *df3 = get_dface(dm, split, cur+2, i, mf);
+
+ facepa[cur] = vertpa[v1];
+ df1->v1 = v1;
+ df1->v2 = GET_ES(v1, v2)
+ df1->v3 = GET_ES(v2, v3)
+ df1->v4 = GET_ES(v1, v3)
+ df1->flag |= ME_FACE_SEL;
+
+ facepa[cur+1] = vertpa[v2];
+ df2->v1 = GET_ES(v1, v2)
+ df2->v2 = v2;
+ df2->v3 = GET_ES(v2, v3)
+ df2->v4 = 0;
+ df2->flag &= ~ME_FACE_SEL;
+
+ facepa[cur+2] = vertpa[v3];
+ df3->v1 = GET_ES(v1, v3)
+ df3->v2 = GET_ES(v2, v3)
+ df3->v3 = v3;
+ df3->v4 = 0;
+ df3->flag &= ~ME_FACE_SEL;
+}
+
+static void remap_uvs_23(DerivedMesh *dm, DerivedMesh *split, int numlayer, int i, int cur, int c0, int c1, int c2)
+{
+ MTFace *mf, *df1, *df2, *df3;
+ int l;
+
+ for(l=0; l<numlayer; l++) {
+ mf = CustomData_get_layer_n(&split->faceData, CD_MTFACE, l);
+ df1 = mf+cur;
+ df2 = df1 + 1;
+ df3 = df1 + 2;
+ mf = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, l);
+ mf += i;
+
+ copy_v2_v2(df1->uv[0], mf->uv[c0]);
+ INT_UV(df1->uv[1], c0, c1)
+ INT_UV(df1->uv[2], c1, c2)
+ INT_UV(df1->uv[3], c0, c2)
+
+ INT_UV(df2->uv[0], c0, c1)
+ copy_v2_v2(df2->uv[1], mf->uv[c1]);
+ INT_UV(df2->uv[2], c1, c2)
+
+ INT_UV(df2->uv[0], c0, c2)
+ INT_UV(df2->uv[1], c1, c2)
+ copy_v2_v2(df2->uv[2], mf->uv[c2]);
+ }
+}
+
+static DerivedMesh * cutEdges(ExplodeModifierData *emd, DerivedMesh *dm){
DerivedMesh *splitdm;
- MFace *mf=0,*df1=0,*df2=0,*df3=0;
- MFace *mface=CDDM_get_tessfaces(dm);
+ MFace *mf=NULL,*df1=NULL;
+ MFace *mface=dm->getTessFaceArray(dm);
MVert *dupve, *mv;
EdgeHash *edgehash;
EdgeHashIterator *ehi;
@@ -197,8 +557,9 @@ static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
int *facesplit = MEM_callocN(sizeof(int)*totface,"explode_facesplit");
int *vertpa = MEM_callocN(sizeof(int)*totvert,"explode_vertpa2");
int *facepa = emd->facepa;
- int *fs, totesplit=0,totfsplit=0,totin=0,curdupvert=0,curdupface=0,curdupin=0;
- int i,j,v1,v2,v3,v4,esplit;
+ int *fs, totesplit=0,totfsplit=0,curdupface=0;
+ int i,j,v1,v2,v3,v4,esplit, v[4], uv[4];
+ int numlayer;
edgehash= BLI_edgehash_new();
@@ -213,52 +574,48 @@ static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
/* mark edges for splitting and how to split faces */
for (i=0,mf=mface,fs=facesplit; i<totface; i++,mf++,fs++) {
- if(mf->v4){
- v1=vertpa[mf->v1];
- v2=vertpa[mf->v2];
- v3=vertpa[mf->v3];
- v4=vertpa[mf->v4];
+ v1=vertpa[mf->v1];
+ v2=vertpa[mf->v2];
+ v3=vertpa[mf->v3];
- if(v1!=v2){
- BLI_edgehash_insert(edgehash, mf->v1, mf->v2, NULL);
- (*fs)++;
- }
+ if(v1!=v2){
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v2, NULL);
+ (*fs) |= 1;
+ }
- if(v2!=v3){
- BLI_edgehash_insert(edgehash, mf->v2, mf->v3, NULL);
- (*fs)++;
- }
+ if(v2!=v3){
+ BLI_edgehash_insert(edgehash, mf->v2, mf->v3, NULL);
+ (*fs) |= 2;
+ }
+
+ if(mf->v4){
+ v4=vertpa[mf->v4];
if(v3!=v4){
BLI_edgehash_insert(edgehash, mf->v3, mf->v4, NULL);
- (*fs)++;
+ (*fs) |= 4;
}
if(v1!=v4){
BLI_edgehash_insert(edgehash, mf->v1, mf->v4, NULL);
- (*fs)++;
+ (*fs) |= 8;
}
- if(*fs==2){
- if((v1==v2 && v3==v4) || (v1==v4 && v2==v3))
- *fs=1;
- else if(v1!=v2){
- if(v1!=v4)
- BLI_edgehash_insert(edgehash, mf->v2, mf->v3, NULL);
- else
- BLI_edgehash_insert(edgehash, mf->v3, mf->v4, NULL);
- }
- else{
- if(v1!=v4)
- BLI_edgehash_insert(edgehash, mf->v1, mf->v2, NULL);
- else
- BLI_edgehash_insert(edgehash, mf->v1, mf->v4, NULL);
- }
+ /* mark center vertex as a fake edge split */
+ if(*fs == 15)
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v3, NULL);
+ }
+ else {
+ (*fs) |= 16; /* mark face as tri */
+
+ if(v1!=v3){
+ BLI_edgehash_insert(edgehash, mf->v1, mf->v3, NULL);
+ (*fs) |= 4;
}
}
}
- /* count splits & reindex */
+ /* count splits & create indexes for new verts */
ehi= BLI_edgehashIterator_new(edgehash);
totesplit=totvert;
for(; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
@@ -268,24 +625,11 @@ static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
BLI_edgehashIterator_free(ehi);
/* count new faces due to splitting */
- for(i=0,fs=facesplit; i<totface; i++,fs++){
- if(*fs==1)
- totfsplit+=1;
- else if(*fs==2)
- totfsplit+=2;
- else if(*fs==3)
- totfsplit+=3;
- else if(*fs==4){
- totfsplit+=3;
-
- mf=dm->getTessFaceData(dm,i,CD_MFACE);//CDDM_get_tessface(dm,i);
-
- if(vertpa[mf->v1]!=vertpa[mf->v2] && vertpa[mf->v2]!=vertpa[mf->v3])
- totin++;
- }
- }
+ for(i=0,fs=facesplit; i<totface; i++,fs++)
+ totfsplit += add_faces[*fs];
- splitdm= CDDM_from_template(dm, totesplit+totin, dm->getNumEdges(dm),totface+totfsplit, 0, 0);
+ splitdm= CDDM_from_template(dm, totesplit, 0, totface+totfsplit, 0, 0);
+ numlayer = CustomData_number_of_layers(&splitdm->faceData, CD_MTFACE);
/* copy new faces & verts (is it really this painful with custom data??) */
for(i=0; i<totvert; i++){
@@ -297,23 +641,13 @@ static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
DM_copy_vert_data(dm, splitdm, i, i, 1);
*dest = source;
}
- for(i=0; i<totface; i++){
- MFace source;
- MFace *dest;
- dm->getTessFace(dm, i, &source);
- dest = CDDM_get_tessface(splitdm, i);
-
- DM_copy_tessface_data(dm, splitdm, i, i, 1);
- *dest = source;
- }
/* override original facepa (original pointer is saved in caller function) */
facepa= MEM_callocN(sizeof(int)*(totface+totfsplit),"explode_facepa");
- memcpy(facepa,emd->facepa,totface*sizeof(int));
+ //memcpy(facepa,emd->facepa,totface*sizeof(int));
emd->facepa=facepa;
/* create new verts */
- curdupvert=totvert;
ehi= BLI_edgehashIterator_new(edgehash);
for(; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
BLI_edgehashIterator_getKey(ehi, &i, &j);
@@ -333,320 +667,101 @@ static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
BLI_edgehashIterator_free(ehi);
/* create new faces */
- curdupface=totface;
- curdupin=totesplit;
+ curdupface=0;//=totface;
+ //curdupin=totesplit;
for(i=0,fs=facesplit; i<totface; i++,fs++){
- if(*fs){
- mf=CDDM_get_tessface(splitdm,i);
-
- v1=vertpa[mf->v1];
- v2=vertpa[mf->v2];
- v3=vertpa[mf->v3];
- v4=vertpa[mf->v4];
- /* ouch! creating new faces & remapping them to new verts is no fun */
- if(*fs==1){
- df1=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df1=*mf;
- curdupface++;
-
- if(v1==v2){
- df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
- df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
- mf->v3=df1->v2;
- mf->v4=df1->v1;
- }
- else{
- df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
- df1->v4=edgesplit_get(edgehash, mf->v3, mf->v4);
- mf->v2=df1->v1;
- mf->v3=df1->v4;
- }
-
- facepa[i]=v1;
- facepa[curdupface-1]=v3;
-
- test_index_face(df1, &splitdm->faceData, curdupface, (df1->v4 ? 4 : 3));
- }
- if(*fs==2){
- df1=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df1=*mf;
- curdupface++;
-
- df2=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df2=*mf;
- curdupface++;
-
- if(v1!=v2){
- if(v1!=v4){
- df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
- df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
- df2->v1=df1->v3=mf->v2;
- df2->v3=df1->v4=mf->v4;
- df2->v2=mf->v3;
-
- mf->v2=df1->v2;
- mf->v3=df1->v1;
-
- df2->v4=mf->v4=0;
-
- facepa[i]=v1;
- }
- else{
- df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
- df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
- df1->v4=mf->v3;
- df2->v2=mf->v3;
- df2->v3=mf->v4;
-
- mf->v1=df1->v2;
- mf->v3=df1->v3;
-
- df2->v4=mf->v4=0;
-
- facepa[i]=v2;
- }
- facepa[curdupface-1]=facepa[curdupface-2]=v3;
- }
- else{
- if(v1!=v4){
- df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
- df1->v4=edgesplit_get(edgehash, mf->v1, mf->v4);
- df1->v2=mf->v3;
-
- mf->v1=df1->v4;
- mf->v2=df1->v3;
- mf->v3=mf->v4;
-
- df2->v4=mf->v4=0;
-
- facepa[i]=v4;
- }
- else{
- df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
- df1->v4=edgesplit_get(edgehash, mf->v3, mf->v4);
- df1->v1=mf->v4;
- df1->v2=mf->v2;
- df2->v3=mf->v4;
-
- mf->v1=df1->v4;
- mf->v2=df1->v3;
-
- df2->v4=mf->v4=0;
-
- facepa[i]=v3;
- }
-
- facepa[curdupface-1]=facepa[curdupface-2]=v1;
- }
-
- test_index_face(df1, &splitdm->faceData, curdupface-2, (df1->v4 ? 4 : 3));
- test_index_face(df1, &splitdm->faceData, curdupface-1, (df1->v4 ? 4 : 3));
- }
- else if(*fs==3){
- df1=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df1=*mf;
- curdupface++;
-
- df2=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df2=*mf;
- curdupface++;
-
- df3=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df3=*mf;
- curdupface++;
-
- if(v1==v2){
- df2->v1=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
- df3->v1=df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
- df3->v3=df2->v2=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
- df3->v2=mf->v3;
- df2->v3=mf->v4;
- df1->v4=df2->v4=df3->v4=0;
-
- mf->v3=df1->v2;
- mf->v4=df1->v1;
-
- facepa[i]=facepa[curdupface-3]=v1;
- facepa[curdupface-1]=v3;
- facepa[curdupface-2]=v4;
- }
- else if(v2==v3){
- df3->v1=df2->v3=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
- df2->v2=df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
- df3->v2=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
-
- df3->v3=mf->v4;
- df2->v1=mf->v1;
- df1->v4=df2->v4=df3->v4=0;
-
- mf->v1=df1->v2;
- mf->v4=df1->v3;
-
- facepa[i]=facepa[curdupface-3]=v2;
- facepa[curdupface-1]=v4;
- facepa[curdupface-2]=v1;
- }
- else if(v3==v4){
- df3->v2=df2->v1=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
- df2->v3=df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
- df3->v3=df1->v3=edgesplit_get(edgehash, mf->v1, mf->v4);
-
- df3->v1=mf->v1;
- df2->v2=mf->v2;
- df1->v4=df2->v4=df3->v4=0;
-
- mf->v1=df1->v3;
- mf->v2=df1->v2;
-
- facepa[i]=facepa[curdupface-3]=v3;
- facepa[curdupface-1]=v1;
- facepa[curdupface-2]=v2;
- }
- else{
- df3->v1=df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
- df3->v3=df2->v1=df1->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
- df2->v3=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
-
- df3->v2=mf->v2;
- df2->v2=mf->v3;
- df1->v4=df2->v4=df3->v4=0;
-
- mf->v2=df1->v1;
- mf->v3=df1->v3;
-
- facepa[i]=facepa[curdupface-3]=v1;
- facepa[curdupface-1]=v2;
- facepa[curdupface-2]=v3;
- }
-
- test_index_face(df1, &splitdm->faceData, curdupface-3, (df1->v4 ? 4 : 3));
- test_index_face(df1, &splitdm->faceData, curdupface-2, (df1->v4 ? 4 : 3));
- test_index_face(df1, &splitdm->faceData, curdupface-1, (df1->v4 ? 4 : 3));
- }
- else if(*fs==4){
- if(v1!=v2 && v2!=v3){
-
- /* set new vert to face center */
- mv=CDDM_get_vert(splitdm,mf->v1);
- dupve=CDDM_get_vert(splitdm,curdupin);
- DM_copy_vert_data(splitdm,splitdm,mf->v1,curdupin,1);
- *dupve=*mv;
-
- mv=CDDM_get_vert(splitdm,mf->v2);
- VECADD(dupve->co,dupve->co,mv->co);
- mv=CDDM_get_vert(splitdm,mf->v3);
- VECADD(dupve->co,dupve->co,mv->co);
- mv=CDDM_get_vert(splitdm,mf->v4);
- VECADD(dupve->co,dupve->co,mv->co);
- mul_v3_fl(dupve->co,0.25);
-
-
- df1=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df1=*mf;
- curdupface++;
-
- df2=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df2=*mf;
- curdupface++;
-
- df3=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df3=*mf;
- curdupface++;
-
- df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
- df3->v2=df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
-
- df2->v1=edgesplit_get(edgehash, mf->v1, mf->v4);
- df3->v4=df2->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
-
- df3->v1=df2->v2=df1->v4=curdupin;
-
- mf->v2=df1->v1;
- mf->v3=curdupin;
- mf->v4=df2->v1;
-
- curdupin++;
-
- facepa[i]=v1;
- facepa[curdupface-3]=v2;
- facepa[curdupface-2]=v3;
- facepa[curdupface-1]=v4;
-
- test_index_face(df1, &splitdm->faceData, curdupface-3, (df1->v4 ? 4 : 3));
-
- test_index_face(df1, &splitdm->faceData, curdupface-2, (df1->v4 ? 4 : 3));
- test_index_face(df1, &splitdm->faceData, curdupface-1, (df1->v4 ? 4 : 3));
- }
- else{
- df1=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df1=*mf;
- curdupface++;
-
- df2=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df2=*mf;
- curdupface++;
-
- df3=CDDM_get_tessface(splitdm,curdupface);
- DM_copy_face_data(splitdm,splitdm,i,curdupface,1);
- *df3=*mf;
- curdupface++;
-
- if(v2==v3){
- df1->v1=edgesplit_get(edgehash, mf->v1, mf->v2);
- df3->v1=df1->v2=df1->v3=edgesplit_get(edgehash, mf->v2, mf->v3);
- df2->v1=df1->v4=edgesplit_get(edgehash, mf->v1, mf->v4);
-
- df3->v3=df2->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
-
- df3->v2=mf->v3;
- df3->v4=0;
-
- mf->v2=df1->v1;
- mf->v3=df1->v4;
- mf->v4=0;
-
- facepa[i]=v1;
- facepa[curdupface-3]=facepa[curdupface-2]=v2;
- facepa[curdupface-1]=v3;
- }
- else{
- df3->v1=df2->v1=df1->v2=edgesplit_get(edgehash, mf->v1, mf->v2);
- df2->v4=df1->v3=edgesplit_get(edgehash, mf->v3, mf->v4);
- df1->v4=edgesplit_get(edgehash, mf->v1, mf->v4);
-
- df3->v3=df2->v2=edgesplit_get(edgehash, mf->v2, mf->v3);
-
- df3->v4=0;
-
- mf->v1=df1->v4;
- mf->v2=df1->v3;
- mf->v3=mf->v4;
- mf->v4=0;
-
- facepa[i]=v4;
- facepa[curdupface-3]=facepa[curdupface-2]=v1;
- facepa[curdupface-1]=v2;
- }
-
- test_index_face(df1, &splitdm->faceData, curdupface-3, (df1->v4 ? 4 : 3));
- test_index_face(df1, &splitdm->faceData, curdupface-2, (df1->v4 ? 4 : 3));
- test_index_face(df1, &splitdm->faceData, curdupface-1, (df1->v4 ? 4 : 3));
- }
- }
+ mf = dm->getTessFaceData(dm, i, CD_MFACE);
+
+ switch(*fs) {
+ case 3:
+ case 10:
+ case 11:
+ case 15:
+ SET_VERTS(1, 2, 3, 4)
+ break;
+ case 5:
+ case 6:
+ case 7:
+ SET_VERTS(2, 3, 4, 1)
+ break;
+ case 9:
+ case 13:
+ SET_VERTS(4, 1, 2, 3)
+ break;
+ case 12:
+ case 14:
+ SET_VERTS(3, 4, 1, 2)
+ break;
+ case 21:
+ case 23:
+ SET_VERTS(1, 2, 3, 4)
+ break;
+ case 19:
+ SET_VERTS(2, 3, 1, 4)
+ break;
+ case 22:
+ SET_VERTS(3, 1, 2, 4)
+ break;
+ }
- test_index_face(df1, &splitdm->faceData, i, (df1->v4 ? 4 : 3));
+ switch(*fs) {
+ case 3:
+ case 6:
+ case 9:
+ case 12:
+ remap_faces_3_6_9_12(dm, splitdm, mf, facepa, vertpa, i, edgehash, curdupface, v[0], v[1], v[2], v[3]);
+ if(numlayer)
+ remap_uvs_3_6_9_12(dm, splitdm, numlayer, i, curdupface, uv[0], uv[1], uv[2], uv[3]);
+ break;
+ case 5:
+ case 10:
+ remap_faces_5_10(dm, splitdm, mf, facepa, vertpa, i, edgehash, curdupface, v[0], v[1], v[2], v[3]);
+ if(numlayer)
+ remap_uvs_5_10(dm, splitdm, numlayer, i, curdupface, uv[0], uv[1], uv[2], uv[3]);
+ break;
+ case 15:
+ remap_faces_15(dm, splitdm, mf, facepa, vertpa, i, edgehash, curdupface, v[0], v[1], v[2], v[3]);
+ if(numlayer)
+ remap_uvs_15(dm, splitdm, numlayer, i, curdupface, uv[0], uv[1], uv[2], uv[3]);
+ break;
+ case 7:
+ case 11:
+ case 13:
+ case 14:
+ remap_faces_7_11_13_14(dm, splitdm, mf, facepa, vertpa, i, edgehash, curdupface, v[0], v[1], v[2], v[3]);
+ if(numlayer)
+ remap_uvs_7_11_13_14(dm, splitdm, numlayer, i, curdupface, uv[0], uv[1], uv[2], uv[3]);
+ break;
+ case 19:
+ case 21:
+ case 22:
+ remap_faces_19_21_22(dm, splitdm, mf, facepa, vertpa, i, edgehash, curdupface, v[0], v[1], v[2]);
+ if(numlayer)
+ remap_uvs_19_21_22(dm, splitdm, numlayer, i, curdupface, uv[0], uv[1], uv[2]);
+ break;
+ case 23:
+ remap_faces_23(dm, splitdm, mf, facepa, vertpa, i, edgehash, curdupface, v[0], v[1], v[2]);
+ if(numlayer)
+ remap_uvs_23(dm, splitdm, numlayer, i, curdupface, uv[0], uv[1], uv[2]);
+ break;
+ case 0:
+ case 16:
+ df1 = get_dface(dm, splitdm, curdupface, i, mf);
+ facepa[curdupface] = vertpa[mf->v1];
+
+ if(df1->v4)
+ df1->flag |= ME_FACE_SEL;
+ else
+ df1->flag &= ~ME_FACE_SEL;
+ break;
}
+
+ curdupface += add_faces[*fs]+1;
+ }
+
+ for(i=0; i<curdupface; i++) {
+ mf = CDDM_get_tessface(splitdm, i);
+ test_index_face(mf, &splitdm->faceData, i, (mf->flag & ME_FACE_SEL ? 4 : 3));
}
BLI_edgehash_free(edgehash, NULL);
@@ -666,24 +781,31 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd,
DerivedMesh *explode, *dm=to_explode;
MFace *mf=0, *mface;
ParticleSettings *part=psmd->psys->part;
- ParticleSimulationData sim = {scene, ob, psmd->psys, psmd};
+ ParticleSimulationData sim= {0};
ParticleData *pa=NULL, *pars=psmd->psys->particles;
ParticleKey state;
EdgeHash *vertpahash;
EdgeHashIterator *ehi;
float *vertco=0, imat[4][4];
float loc0[3], nor[3];
- float timestep, cfra;
+ float cfra;
+ /* float timestep; */
int *facepa=emd->facepa;
int totdup=0,totvert=0,totface=0,totpart=0;
int i, j, v, mindex=0;
+ MTFace *mtface = NULL, *mtf;
totface= dm->getNumTessFaces(dm);
totvert= dm->getNumVerts(dm);
mface= dm->getTessFaceArray(dm);
totpart= psmd->psys->totpart;
- timestep= psys_get_timestep(&sim);
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psmd->psys;
+ sim.psmd= psmd;
+
+ /* timestep= psys_get_timestep(&sim); */
//if(part->flag & PART_GLOB_TIME)
cfra= BKE_curframe(scene);
@@ -721,6 +843,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd,
/* the final duplicated vertices */
explode= CDDM_from_template(dm, totdup, 0,totface, 0, 0);
+ mtface = CustomData_get_layer_named(&explode->faceData, CD_MTFACE, emd->uvname);
/*dupvert= CDDM_get_verts(explode);*/
/* getting back to object space */
@@ -797,16 +920,28 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd,
else
mindex = totvert+facepa[i];
- source.v1 = edgesplit_get(vertpahash, source.v1, mindex);
- source.v2 = edgesplit_get(vertpahash, source.v2, mindex);
- source.v3 = edgesplit_get(vertpahash, source.v3, mindex);
+ source.v1 = edgecut_get(vertpahash, source.v1, mindex);
+ source.v2 = edgecut_get(vertpahash, source.v2, mindex);
+ source.v3 = edgecut_get(vertpahash, source.v3, mindex);
if(source.v4)
- source.v4 = edgesplit_get(vertpahash, source.v4, mindex);
+ source.v4 = edgecut_get(vertpahash, source.v4, mindex);
DM_copy_face_data(dm,explode,i,i,1);
*mf = source;
+ /* override uv channel for particle age */
+ if(mtface) {
+ float age = (cfra - pa->time)/pa->lifetime;
+ /* Clamp to this range to avoid flipping to the other side of the coordinates. */
+ CLAMP(age, 0.001f, 0.999f);
+
+ mtf = mtface + i;
+
+ mtf->uv[0][0] = mtf->uv[1][0] = mtf->uv[2][0] = mtf->uv[3][0] = age;
+ mtf->uv[0][1] = mtf->uv[1][1] = mtf->uv[2][1] = mtf->uv[3][1] = 0.5f;
+ }
+
test_index_face(mf, &explode->faceData, i, (orig_v4 ? 4 : 3));
}
@@ -840,9 +975,10 @@ static ParticleSystemModifierData * findPrecedingParticlesystem(Object *ob, Modi
}
return psmd;
}
-static DerivedMesh * applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+static DerivedMesh * applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = derivedData;
ExplodeModifierData *emd= (ExplodeModifierData*) md;
@@ -859,20 +995,20 @@ static DerivedMesh * applyModifier(
if(emd->facepa==0
|| psmd->flag&eParticleSystemFlag_Pars
|| emd->flag&eExplodeFlag_CalcFaces
- || MEM_allocN_len(emd->facepa)/sizeof(int) != dm->getNumTessFaces(dm)){
+ || MEM_allocN_len(emd->facepa)/sizeof(int) != dm->getNumTessFaces(dm))
+ {
if(psmd->flag & eParticleSystemFlag_Pars)
psmd->flag &= ~eParticleSystemFlag_Pars;
if(emd->flag & eExplodeFlag_CalcFaces)
emd->flag &= ~eExplodeFlag_CalcFaces;
- createFacepa(emd,psmd,ob,derivedData);
- }
-
+ createFacepa(emd,psmd,derivedData);
+ }
/* 2. create new mesh */
- if(emd->flag & eExplodeFlag_EdgeSplit){
+ if(emd->flag & eExplodeFlag_EdgeCut){
int *facepa = emd->facepa;
- DerivedMesh *splitdm=splitEdges(emd,dm);
+ DerivedMesh *splitdm=cutEdges(emd,dm);
DerivedMesh *explode=explodeMesh(emd, psmd, md->scene, ob, splitdm);
MEM_freeN(emd->facepa);
@@ -895,6 +1031,7 @@ ModifierTypeInfo modifierType_Explode = {
/* flags */ eModifierTypeFlag_AcceptsMesh,
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -905,6 +1042,7 @@ ModifierTypeInfo modifierType_Explode = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_fluidsim.c b/source/blender/modifiers/intern/MOD_fluidsim.c
index c683bee0b35..1cce9863ccc 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim.c
+++ b/source/blender/modifiers/intern/MOD_fluidsim.c
@@ -30,15 +30,24 @@
*
*/
+/** \file blender/modifiers/intern/MOD_fluidsim.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_scene_types.h"
#include "DNA_object_fluidsim.h"
#include "DNA_object_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "depsgraph_private.h"
+#include "MOD_util.h"
#include "MOD_fluidsim_util.h"
#include "MEM_guardedalloc.h"
@@ -69,9 +78,10 @@ static void copyData(ModifierData *md, ModifierData *target)
-static DerivedMesh * applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *dm,
+ int useRenderParams,
+ int isFinalCalc)
{
FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
DerivedMesh *result = NULL;
@@ -82,17 +92,12 @@ static DerivedMesh * applyModifier(
initData(md);
if(!fluidmd->fss)
- return derivedData;
+ return dm;
}
- result = fluidsimModifier_do(fluidmd, md->scene, ob, derivedData, useRenderParams, isFinalCalc);
+ result= fluidsimModifier_do(fluidmd, md->scene, ob, dm, useRenderParams, isFinalCalc);
- if(result)
- {
- return result;
- }
-
- return derivedData;
+ return result ? result : dm;
}
static void updateDepgraph(
@@ -125,7 +130,7 @@ static void updateDepgraph(
}
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
@@ -143,6 +148,7 @@ ModifierTypeInfo modifierType_Fluidsim = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -153,6 +159,7 @@ ModifierTypeInfo modifierType_Fluidsim = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.c b/source/blender/modifiers/intern/MOD_fluidsim_util.c
index 17ce46129bc..7db1f003146 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim_util.c
+++ b/source/blender/modifiers/intern/MOD_fluidsim_util.c
@@ -30,6 +30,11 @@
*
*/
+/** \file blender/modifiers/intern/MOD_fluidsim_util.c
+ * \ingroup modifiers
+ */
+
+
#include <stddef.h>
#include <zlib.h>
@@ -42,12 +47,16 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+#include "BKE_main.h"
+#include "BKE_fluidsim.h" /* ensure definitions here match */
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
#include "BKE_utildefines.h"
-#include "BKE_global.h" /* G.sce only */
+#include "BKE_global.h" /* G.main->name only */
+#include "MOD_fluidsim_util.h"
#include "MOD_modifiertypes.h"
#include "MEM_guardedalloc.h"
@@ -138,6 +147,8 @@ void fluidsim_init(FluidsimModifierData *fluidmd)
fss->flag |= OB_FLUIDSIM_ACTIVE;
}
+#else
+ (void)fluidmd; /* unused */
#endif
return;
}
@@ -154,23 +165,26 @@ void fluidsim_free(FluidsimModifierData *fluidmd)
}
MEM_freeN(fluidmd->fss);
}
+#else
+ (void)fluidmd; /* unused */
#endif
+
return;
}
#ifndef DISABLE_ELBEEM
/* read .bobj.gz file into a fluidsimDerivedMesh struct */
-DerivedMesh *fluidsim_read_obj(char *filename)
+static DerivedMesh *fluidsim_read_obj(const char *filename)
{
- int wri,i,j;
- float wrf;
+ int wri = 0,i;
int gotBytes;
gzFile gzf;
int numverts = 0, numfaces = 0;
DerivedMesh *dm = NULL;
- MFace *mface;
- MVert *mvert;
- short *normals;
+ MFace *mf;
+ MVert *mv;
+ short *normals, *no_s;
+ float no[3];
// ------------------------------------------------
// get numverts + numfaces first
@@ -186,28 +200,25 @@ DerivedMesh *fluidsim_read_obj(char *filename)
numverts = wri;
// skip verts
- for(i=0; i<numverts*3; i++)
- {
- gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
- }
+ gotBytes = gzseek(gzf, numverts * 3 * sizeof(float), SEEK_CUR) != -1;
+
// read number of normals
- gotBytes = gzread(gzf, &wri, sizeof(wri));
+ if(gotBytes)
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
// skip normals
- for(i=0; i<numverts*3; i++)
- {
- gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
- }
+ gotBytes = gzseek(gzf, numverts * 3 * sizeof(float), SEEK_CUR) != -1;
/* get no. of triangles */
- gotBytes = gzread(gzf, &wri, sizeof(wri));
+ if(gotBytes)
+ gotBytes = gzread(gzf, &wri, sizeof(wri));
numfaces = wri;
gzclose( gzf );
// ------------------------------------------------
- if(!numfaces || !numverts)
+ if(!numfaces || !numverts || !gotBytes)
return NULL;
gzf = gzopen(filename, "rb");
@@ -228,17 +239,10 @@ DerivedMesh *fluidsim_read_obj(char *filename)
gotBytes = gzread(gzf, &wri, sizeof(wri));
// read vertex position from file
- mvert = CDDM_get_verts(dm);
- for(i=0; i<numverts; i++)
- {
- MVert *mv = &mvert[i];
+ mv = CDDM_get_verts(dm);
- for(j=0; j<3; j++)
- {
- gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
- mv->co[j] = wrf;
- }
- }
+ for(i=0; i<numverts; i++, mv++)
+ gotBytes = gzread(gzf, mv->co, sizeof(float) * 3);
// should be the same as numverts
gotBytes = gzread(gzf, &wri, sizeof(wri));
@@ -260,29 +264,31 @@ DerivedMesh *fluidsim_read_obj(char *filename)
}
// read normals from file (but don't save them yet)
- for(i=0; i<numverts*3; i++)
+ for(i=numverts, no_s= normals; i>0; i--, no_s += 3)
{
- gotBytes = gzread(gzf, &wrf, sizeof( wrf ));
- normals[i] = (short)(wrf*32767.0f);
+ gotBytes = gzread(gzf, no, sizeof(float) * 3);
+ normal_float_to_short_v3(no_s, no);
}
/* read no. of triangles */
gotBytes = gzread(gzf, &wri, sizeof(wri));
- if(wri!=numfaces)
+ if(wri!=numfaces) {
printf("Fluidsim: error in reading data from file.\n");
+ if(dm)
+ dm->release(dm);
+ gzclose( gzf );
+ MEM_freeN(normals);
+ return NULL;
+ }
// read triangles from file
- mface = CDDM_get_tessfaces(dm);
- for(i=0; i<numfaces; i++)
+ mf = CDDM_get_tessfaces(dm);
+ for(i=numfaces; i>0; i--, mf++)
{
- int face[4];
- MFace *mf = &mface[i];
+ int face[3];
- gotBytes = gzread(gzf, &(face[0]), sizeof( face[0] ));
- gotBytes = gzread(gzf, &(face[1]), sizeof( face[1] ));
- gotBytes = gzread(gzf, &(face[2]), sizeof( face[2] ));
- face[3] = 0;
+ gotBytes = gzread(gzf, face, sizeof(int) * 3);
// check if 3rd vertex has index 0 (not allowed in blender)
if(face[2])
@@ -297,7 +303,7 @@ DerivedMesh *fluidsim_read_obj(char *filename)
mf->v2 = face[2];
mf->v3 = face[0];
}
- mf->v4 = face[3];
+ mf->v4 = 0;
test_index_face(mf, NULL, 0, 3);
}
@@ -380,7 +386,7 @@ void fluid_estimate_memory(Object *ob, FluidsimSettings *fss, char *value)
/* read zipped fluidsim velocities into the co's of the fluidsimsettings normals struct */
-void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh *dm, char *filename)
+static void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh *dm, char *filename)
{
int wri, i, j;
float wrf;
@@ -443,7 +449,7 @@ void fluidsim_read_vel_cache(FluidsimModifierData *fluidmd, DerivedMesh *dm, cha
gzclose(gzf);
}
-DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams)
+static DerivedMesh *fluidsim_read_cache(DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams)
{
int displaymode = 0;
int curFrame = framenr - 1 /*scene->r.sfra*/; /* start with 0 at start frame */
@@ -460,7 +466,7 @@ DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifie
displaymode = fss->renderDisplayMode;
}
- strncpy(targetDir, fss->surfdataPath, FILE_MAXDIR);
+ BLI_strncpy(targetDir, fss->surfdataPath, sizeof(targetDir));
// use preview or final mesh?
if(displaymode==1)
@@ -477,11 +483,10 @@ DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifie
strcat(targetDir,"fluidsurface_final_####");
}
- BLI_path_abs(targetDir, G.sce);
+ BLI_path_abs(targetDir, G.main->name);
BLI_path_frame(targetDir, curFrame, 0); // fixed #frame-no
- strcpy(targetFile,targetDir);
- strcat(targetFile, ".bobj.gz");
+ BLI_snprintf(targetFile, sizeof(targetFile), "%s.bobj.gz", targetDir);
dm = fluidsim_read_obj(targetFile);
@@ -534,10 +539,12 @@ DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifie
return dm;
}
-
#endif // DISABLE_ELBEEM
-DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
+DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Scene *scene,
+ Object *UNUSED(ob),
+ DerivedMesh *dm,
+ int useRenderParams, int UNUSED(isFinalCalc))
{
#ifndef DISABLE_ELBEEM
DerivedMesh *result = NULL;
@@ -558,7 +565,7 @@ DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Scene *scene, Ob
// timescale not supported yet
// clmd->sim_parms->timescale= timescale;
-
+
// support reversing of baked fluid frames here
if((fss->flag & OB_FLUIDSIM_REVERSE) && (fss->lastgoodframe >= 0))
{
@@ -567,42 +574,17 @@ DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Scene *scene, Ob
}
/* try to read from cache */
- if(((fss->lastgoodframe >= framenr) || (fss->lastgoodframe < 0)) && (result = fluidsim_read_cache(ob, dm, fluidmd, framenr, useRenderParams)))
- {
- // fss->lastgoodframe = framenr; // set also in src/fluidsim.c
+ /* if the frame is there, fine, otherwise don't do anything */
+ if((result = fluidsim_read_cache(dm, fluidmd, framenr, useRenderParams)))
return result;
- }
- else
- {
- // display last known good frame
- if(fss->lastgoodframe >= 0)
- {
- if((result = fluidsim_read_cache(ob, dm, fluidmd, fss->lastgoodframe, useRenderParams)))
- {
- return result;
- }
-
- // it was supposed to be a valid frame but it isn't!
- fss->lastgoodframe = framenr - 1;
-
-
- // this could be likely the case when you load an old fluidsim
- if((result = fluidsim_read_cache(ob, dm, fluidmd, fss->lastgoodframe, useRenderParams)))
- {
- return result;
- }
- }
-
- result = CDDM_copy(dm, 1);
-
- if(result)
- {
- return result;
- }
- }
return dm;
#else
+ /* unused */
+ (void)fluidmd;
+ (void)scene;
+ (void)dm;
+ (void)useRenderParams;
return NULL;
#endif
}
diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.h b/source/blender/modifiers/intern/MOD_fluidsim_util.h
index a06c74cb8dd..f8af8e6f583 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim_util.h
+++ b/source/blender/modifiers/intern/MOD_fluidsim_util.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -27,6 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file blender/modifiers/intern/MOD_fluidsim_util.h
+ * \ingroup modifiers
+ */
+
+
#ifndef MOD_FLUIDSIM_UTIL_H
#define MOD_FLUIDSIM_UTIL_H
@@ -42,6 +47,6 @@ void fluidsim_free(struct FluidsimModifierData *fluidmd);
struct DerivedMesh *fluidsimModifier_do(struct FluidsimModifierData *fluidmd,
struct Scene *scene, struct Object *ob, struct DerivedMesh *dm,
int useRenderParams, int isFinalCalc);
-
+
#endif
diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c
index 2c9ae311585..2a85378f987 100644
--- a/source/blender/modifiers/intern/MOD_hook.c
+++ b/source/blender/modifiers/intern/MOD_hook.c
@@ -30,20 +30,28 @@
*
*/
+/** \file blender/modifiers/intern/MOD_hook.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
#include "BKE_action.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_deform.h"
+
#include "depsgraph_private.h"
#include "MEM_guardedalloc.h"
+#include "MOD_util.h"
static void initData(ModifierData *md)
{
@@ -68,13 +76,14 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(thmd->subtarget, hmd->subtarget, 32);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
HookModifierData *hmd = (HookModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(!hmd->indexar && hmd->name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(hmd->name[0]) dataMask |= CD_MASK_MDEFORMVERT;
+ if(hmd->indexar) dataMask |= CD_MASK_ORIGINDEX;
return dataMask;
}
@@ -86,7 +95,7 @@ static void freeData(ModifierData *md)
if (hmd->indexar) MEM_freeN(hmd->indexar);
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
HookModifierData *hmd = (HookModifierData*) md;
@@ -103,8 +112,10 @@ static void foreachObjectLink(
walk(userData, ob, &hmd->object);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *scene,
- Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
HookModifierData *hmd = (HookModifierData*) md;
@@ -118,15 +129,37 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *sc
}
}
-static void deformVerts(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc)
+static float hook_falloff(float *co_1, float *co_2, const float falloff_squared, float fac)
+{
+ if(falloff_squared) {
+ float len_squared = len_squared_v3v3(co_1, co_2);
+ if(len_squared > falloff_squared) {
+ return 0.0f;
+ }
+ else if(len_squared > 0.0) {
+ return fac * (1.0 - (len_squared / falloff_squared));
+ }
+ }
+
+ return fac;
+}
+
+static void deformVerts(ModifierData *md, Object *ob,
+ DerivedMesh *dm,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
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;
- DerivedMesh *dm = derivedData;
+ int i, *index_pt;
+ const float falloff_squared= hmd->falloff * hmd->falloff; /* for faster comparisons */
+
+ int max_dvert= 0;
+ MDeformVert *dvert= NULL;
+ int defgrp_index = -1;
/* get world-space matrix of target, corrected for the space the verts are in */
if (hmd->subtarget[0] && pchan) {
@@ -141,98 +174,90 @@ static void deformVerts(
mul_serie_m4(mat, ob->imat, dmat, hmd->parentinv,
NULL, NULL, NULL, NULL, NULL);
- /* vertex indices? */
- if(hmd->indexar) {
- for(i = 0; i < hmd->totindex; i++) {
- int index = hmd->indexar[i];
-
- /* This should always be true and I don't generally like
- * "paranoid" style code like this, but old files can have
- * indices that are out of range because old blender did
- * not correct them on exit editmode. - zr
- */
- if(index < numVerts) {
- float *co = vertexCos[index];
- float fac = hmd->force;
-
- /* if DerivedMesh is present and has original index data,
- * use it
- */
- if(dm && dm->getVertDataArray(dm, CD_ORIGINDEX)) {
+ if((defgrp_index= defgroup_name_index(ob, hmd->name)) != -1) {
+ Mesh *me = ob->data;
+ if(dm) {
+ dvert= dm->getVertDataArray(dm, CD_MDEFORMVERT);
+ if(dvert) {
+ max_dvert = numVerts;
+ }
+ }
+ else if(me->dvert) {
+ dvert= me->dvert;
+ if(dvert) {
+ max_dvert = me->totvert;
+ }
+ }
+ }
+
+ /* Regarding index range checking below.
+ *
+ * This should always be true and I don't generally like
+ * "paranoid" style code like this, but old files can have
+ * indices that are out of range because old blender did
+ * not correct them on exit editmode. - zr
+ */
+
+ if(hmd->force == 0.0f) {
+ /* do nothing, avoid annoying checks in the loop */
+ }
+ else if(hmd->indexar) { /* vertex indices? */
+ const float fac_orig= hmd->force;
+ float fac;
+ const int *origindex_ar;
+
+ /* if DerivedMesh is present and has original index data,
+ * use it
+ */
+ if(dm && (origindex_ar= dm->getVertDataArray(dm, CD_ORIGINDEX))) {
+ for(i= 0, index_pt= hmd->indexar; i < hmd->totindex; i++, index_pt++) {
+ if(*index_pt < numVerts) {
int j;
- int orig_index;
- for(j = 0; j < numVerts; ++j) {
- fac = hmd->force;
- orig_index = *(int *)dm->getVertData(dm, j,
- CD_ORIGINDEX);
- if(orig_index == index) {
- co = vertexCos[j];
- if(hmd->falloff != 0.0) {
- float len = len_v3v3(co, hmd->cent);
- if(len > hmd->falloff) fac = 0.0;
- else if(len > 0.0)
- fac *= sqrt(1.0 - len / hmd->falloff);
- }
- if(fac != 0.0) {
- mul_v3_m4v3(vec, mat, co);
- interp_v3_v3v3(co, co, vec, fac);
+ for(j = 0; j < numVerts; j++) {
+ if(origindex_ar[j] == *index_pt) {
+ float *co = vertexCos[j];
+ if((fac= hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) {
+ if(dvert)
+ fac *= defvert_find_weight(dvert+j, defgrp_index);
+
+ if(fac) {
+ mul_v3_m4v3(vec, mat, co);
+ interp_v3_v3v3(co, co, vec, fac);
+ }
}
}
}
- } else {
- if(hmd->falloff != 0.0) {
- float len = len_v3v3(co, hmd->cent);
- if(len > hmd->falloff) fac = 0.0;
- else if(len > 0.0)
- fac *= sqrt(1.0 - len / hmd->falloff);
- }
-
- if(fac != 0.0) {
- mul_v3_m4v3(vec, mat, co);
- interp_v3_v3v3(co, co, vec, fac);
- }
}
}
}
- }
- else if(hmd->name[0]) { /* vertex group hook */
- Mesh *me = ob->data;
- int use_dverts = 0;
- int maxVerts = 0;
- int defgrp_index = defgroup_name_index(ob, hmd->name);
-
- if(dm) {
- if(dm->getVertData(dm, 0, CD_MDEFORMVERT)) {
- maxVerts = dm->getNumVerts(dm);
- use_dverts = 1;
+ else { /* missing dm or ORIGINDEX */
+ for(i= 0, index_pt= hmd->indexar; i < hmd->totindex; i++, index_pt++) {
+ if(*index_pt < numVerts) {
+ float *co = vertexCos[*index_pt];
+ if((fac= hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) {
+ if(dvert)
+ fac *= defvert_find_weight(dvert+(*index_pt), defgrp_index);
+
+ if(fac) {
+ mul_v3_m4v3(vec, mat, co);
+ interp_v3_v3v3(co, co, vec, fac);
+ }
+ }
+ }
}
}
- else if(me->dvert) {
- maxVerts = me->totvert;
- use_dverts = 1;
- }
+ }
+ else if(dvert) { /* vertex group hook */
+ const float fac_orig= hmd->force;
- if(defgrp_index >= 0 && use_dverts) {
- MDeformVert *dvert = me->dvert;
- int i;
+ for(i = 0; i < max_dvert; i++, dvert++) {
float fac;
+ float *co = vertexCos[i];
- for(i = 0; i < maxVerts; i++, dvert++) {
- if(dm) dvert = dm->getVertData(dm, i, CD_MDEFORMVERT);
-
- fac= defvert_find_weight(dvert, defgrp_index);
-
- if(fac > 0.0f) {
- float *co = vertexCos[i];
-
- if(hmd->falloff != 0.0) {
- float len = len_v3v3(co, hmd->cent);
- if(len > hmd->falloff) fac = 0.0;
- else if(len > 0.0)
- fac *= sqrt(1.0 - len / hmd->falloff);
- }
-
+ if((fac= hook_falloff(hmd->cent, co, falloff_squared, fac_orig))) {
+ fac *= defvert_find_weight(dvert, defgrp_index);
+ if(fac) {
mul_v3_m4v3(vec, mat, co);
interp_v3_v3v3(co, co, vec, fac);
}
@@ -249,7 +274,7 @@ static void deformVertsEM(
if(!derivedData) dm = CDDM_from_editmesh(editData, ob->data);
- deformVerts(md, ob, derivedData, vertexCos, numVerts, 0, 0);
+ deformVerts(md, ob, dm, vertexCos, numVerts, 0, 0);
if(!derivedData) dm->release(dm);
}
@@ -264,6 +289,7 @@ ModifierTypeInfo modifierType_Hook = {
| eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -274,6 +300,7 @@ ModifierTypeInfo modifierType_Hook = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index 4270f2ff6e8..22427d04338 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -30,10 +30,18 @@
*
*/
+/** \file blender/modifiers/intern/MOD_lattice.c
+ * \ingroup modifiers
+ */
+
+
#include <string.h>
#include "DNA_object_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
#include "BKE_modifier.h"
@@ -52,18 +60,18 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(tlmd->name, lmd->name, 32);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
LatticeModifierData *lmd = (LatticeModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(lmd->name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(lmd->name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
-static int isDisabled(ModifierData *md, int userRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(userRenderParams))
{
LatticeModifierData *lmd = (LatticeModifierData*) md;
@@ -80,8 +88,10 @@ static void foreachObjectLink(
walk(userData, ob, &lmd->object);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *scene,
- Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
LatticeModifierData *lmd = (LatticeModifierData*) md;
@@ -93,9 +103,12 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *sc
}
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
LatticeModifierData *lmd = (LatticeModifierData*) md;
@@ -129,6 +142,7 @@ ModifierTypeInfo modifierType_Lattice = {
| eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -139,6 +153,7 @@ ModifierTypeInfo modifierType_Lattice = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c
index 6a62ce645d8..7b969f9322e 100644
--- a/source/blender/modifiers/intern/MOD_mask.c
+++ b/source/blender/modifiers/intern/MOD_mask.c
@@ -30,8 +30,14 @@
*
*/
+/** \file blender/modifiers/intern/MOD_mask.c
+ * \ingroup modifiers
+ */
+
+
#include "MEM_guardedalloc.h"
+#include "BLI_utildefines.h"
#include "BLI_ghash.h"
#include "DNA_armature_types.h"
@@ -46,18 +52,20 @@
#include "depsgraph_private.h"
+#include "MOD_util.h"
static void copyData(ModifierData *md, ModifierData *target)
{
MaskModifierData *mmd = (MaskModifierData*) md;
MaskModifierData *tmmd = (MaskModifierData*) target;
- strcpy(tmmd->vgroup, mmd->vgroup);
+ BLI_strncpy(tmmd->vgroup, mmd->vgroup, sizeof(tmmd->vgroup));
+ tmmd->flag = mmd->flag;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md))
{
- return (1 << CD_MDEFORMVERT);
+ return CD_MASK_MDEFORMVERT;
}
static void foreachObjectLink(
@@ -69,8 +77,10 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->ob_arm);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *scene,
- Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
MaskModifierData *mmd = (MaskModifierData *)md;
@@ -84,8 +94,9 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *sc
}
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
MaskModifierData *mmd= (MaskModifierData *)md;
DerivedMesh *dm= derivedData, *result= NULL;
@@ -129,7 +140,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
return derivedData;
/* hashes for finding mapping of:
- * - vgroups to indicies -> vgroupHash (string, int)
+ * - vgroups to indices -> vgroupHash (string, int)
* - bones to vgroup indices -> boneHash (index of vgroup, dummy)
*/
vgroupHash= BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp, "mask vgroup gh");
@@ -398,6 +409,7 @@ ModifierTypeInfo modifierType_Mask = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -408,6 +420,7 @@ ModifierTypeInfo modifierType_Mask = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c
index b89db2fdc2d..a34eff6120c 100644
--- a/source/blender/modifiers/intern/MOD_meshdeform.c
+++ b/source/blender/modifiers/intern/MOD_meshdeform.c
@@ -30,11 +30,17 @@
*
*/
+/** \file blender/modifiers/intern/MOD_meshdeform.c
+ * \ingroup modifiers
+ */
+
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_global.h"
@@ -78,18 +84,18 @@ static void copyData(ModifierData *md, ModifierData *target)
tmmd->object = mmd->object;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(mmd->defgrp_name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(mmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
MeshDeformModifierData *mmd = (MeshDeformModifierData*) md;
@@ -106,9 +112,10 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->object);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob,
- DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
MeshDeformModifierData *mmd = (MeshDeformModifierData*) md;
@@ -205,7 +212,7 @@ static void meshdeformModifier_do(
/* if we don't have one computed, use derivedmesh from data
* without any modifiers */
if(!cagedm) {
- cagedm= get_dm(md->scene, mmd->object, NULL, NULL, NULL, 0);
+ cagedm= get_dm(mmd->object, NULL, NULL, NULL, 0);
if(cagedm)
cagedm->needsFree= 1;
}
@@ -339,11 +346,14 @@ static void meshdeformModifier_do(
cagedm->release(cagedm);
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
- DerivedMesh *dm= get_dm(md->scene, ob, NULL, derivedData, NULL, 0);;
+ DerivedMesh *dm= get_dm(ob, NULL, derivedData, NULL, 0);
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
@@ -353,10 +363,13 @@ static void deformVerts(
dm->release(dm);
}
-static void deformVertsEM(ModifierData *md, Object *ob, struct BMEditMesh *editData,
- DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+static void deformVertsEM(ModifierData *md, Object *ob,
+ struct EditMesh *UNUSED(editData),
+ DerivedMesh *derivedData,
+ float (*vertexCos)[3],
+ int numVerts)
{
- DerivedMesh *dm= get_dm(md->scene, ob, NULL, derivedData, NULL, 0);;
+ DerivedMesh *dm= get_dm(ob, NULL, derivedData, NULL, 0);
meshdeformModifier_do(md, ob, dm, vertexCos, numVerts);
@@ -437,6 +450,7 @@ ModifierTypeInfo modifierType_MeshDeform = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -447,6 +461,7 @@ ModifierTypeInfo modifierType_MeshDeform = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c
index f393d834874..2540a1e3b3b 100644
--- a/source/blender/modifiers/intern/MOD_mirror.c
+++ b/source/blender/modifiers/intern/MOD_mirror.c
@@ -71,8 +71,9 @@ static void foreachObjectLink(
void *userData)
{
MirrorModifierData *mmd = (MirrorModifierData*) md;
-
- walk(userData, ob, &mmd->mirror_ob);
+
+ if (mmd->mirror_ob)
+ walk(userData, ob, &mmd->mirror_ob);
}
static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *scene,
@@ -233,7 +234,7 @@ static DerivedMesh *applyModifier(
}
static DerivedMesh *applyModifierEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
+ ModifierData *md, Object *ob, struct BMEditMesh *editData,
DerivedMesh *derivedData)
{
return applyModifier(md, ob, derivedData, 0, 1);
@@ -254,6 +255,7 @@ ModifierTypeInfo modifierType_Mirror = {
/* copyData */ copyData,
/* deformVerts */ 0,
/* deformVertsEM */ 0,
+ /* deformMatrices */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
/* applyModifierEM */ applyModifierEM,
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index 699ab44a75c..b61302d118b 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -30,6 +30,11 @@
*
*/
+/** \file blender/modifiers/intern/MOD_multires.c
+ * \ingroup modifiers
+ */
+
+
#include <stddef.h>
#include "BKE_cdderivedmesh.h"
@@ -40,6 +45,8 @@
#include "DNA_mesh_types.h"
+#include "MOD_util.h"
+
static void initData(ModifierData *md)
{
MultiresModifierData *mmd = (MultiresModifierData*)md;
@@ -59,6 +66,8 @@ static void copyData(ModifierData *md, ModifierData *target)
tmmd->sculptlvl = mmd->sculptlvl;
tmmd->renderlvl = mmd->renderlvl;
tmmd->totlvl = mmd->totlvl;
+ tmmd->simple = mmd->simple;
+ tmmd->flags = mmd->flags;
}
static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
@@ -72,9 +81,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
if(mmd->totlvl) {
if(!CustomData_get_layer(&me->ldata, CD_MDISPS)) {
- /* multires can't work without displacement layer */
- modifier_setError(md, "Modifier needs mesh with displacement data.");
- return dm;
+ /* multires always needs a displacement layer */
+ CustomData_add_layer(&me->fdata, CD_MDISPS, CD_CALLOC, NULL, me->totface);
}
}
@@ -108,6 +116,7 @@ ModifierTypeInfo modifierType_Multires = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -118,6 +127,7 @@ ModifierTypeInfo modifierType_Multires = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_none.c b/source/blender/modifiers/intern/MOD_none.c
index 0c749b79f5a..bebb9b58774 100644
--- a/source/blender/modifiers/intern/MOD_none.c
+++ b/source/blender/modifiers/intern/MOD_none.c
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -34,13 +34,22 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file blender/modifiers/intern/MOD_none.c
+ * \ingroup modifiers
+ */
+
+
+
+
+#include "BLI_utildefines.h"
+
#include "MOD_modifiertypes.h"
/* We only need to define isDisabled; because it always returns 1,
* no other functions will be called
*/
-static int isDisabled(ModifierData *md, int userRenderParams)
+static int isDisabled(ModifierData *UNUSED(md), int UNUSED(userRenderParams))
{
return 1;
}
@@ -55,6 +64,7 @@ ModifierTypeInfo modifierType_None = {
/* copyData */ 0,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -65,6 +75,7 @@ ModifierTypeInfo modifierType_None = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index 100a22603d5..92c8b089360 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -30,6 +30,11 @@
*
*/
+/** \file blender/modifiers/intern/MOD_particleinstance.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "MEM_guardedalloc.h"
@@ -37,13 +42,15 @@
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_rand.h"
+#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
#include "BKE_modifier.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
+
+#include "MOD_util.h"
#include "depsgraph_private.h"
@@ -72,12 +79,14 @@ static void copyData(ModifierData *md, ModifierData *target)
tpimd->random_position = pimd->random_position;
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 0;
}
static void updateDepgraph(ModifierData *md, DagForest *forest,
- struct Scene *scene,Object *ob, DagNode *obNode)
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
ParticleInstanceModifierData *pimd = (ParticleInstanceModifierData*) md;
@@ -98,9 +107,10 @@ static void foreachObjectLink(ModifierData *md, Object *ob,
walk(userData, ob, &pimd->ob);
}
-static DerivedMesh * applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+static DerivedMesh * applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = derivedData, *result;
ParticleInstanceModifierData *pimd= (ParticleInstanceModifierData*) md;
@@ -310,10 +320,9 @@ static DerivedMesh * applyModifier(
return dm;
}
-
-static DerivedMesh *applyModifierEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
- DerivedMesh *derivedData)
+static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
+ struct EditMesh *UNUSED(editData),
+ DerivedMesh *derivedData)
{
return applyModifier(md, ob, derivedData, 0, 1);
}
@@ -331,6 +340,7 @@ ModifierTypeInfo modifierType_ParticleInstance = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -341,6 +351,7 @@ ModifierTypeInfo modifierType_ParticleInstance = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c
index 4feeef54882..80c96fd8553 100644
--- a/source/blender/modifiers/intern/MOD_particlesystem.c
+++ b/source/blender/modifiers/intern/MOD_particlesystem.c
@@ -30,10 +30,18 @@
*
*/
+/** \file blender/modifiers/intern/MOD_particlesystem.c
+ * \ingroup modifiers
+ */
+
+
#include "stddef.h"
#include "DNA_material_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
@@ -77,41 +85,36 @@ static void copyData(ModifierData *md, ModifierData *target)
tpsmd->psys = psmd->psys;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
CustomDataMask dataMask = 0;
- Material *ma;
MTex *mtex;
int i;
if(!psmd->psys->part)
return 0;
- ma= give_current_material(ob, psmd->psys->part->omat);
- if(ma) {
- for(i=0; i<MAX_MTEX; i++) {
- mtex=ma->mtex[i];
- if(mtex && (ma->septex & (1<<i))==0)
- if(mtex->pmapto && (mtex->texco & TEXCO_UV))
- dataMask |= (1 << CD_MTFACE);
- }
+ for(i=0; i<MAX_MTEX; i++) {
+ mtex = psmd->psys->part->mtex[i];
+ if(mtex && mtex->mapto && (mtex->texco & TEXCO_UV))
+ dataMask |= CD_MASK_MTFACE;
}
if(psmd->psys->part->tanfac!=0.0)
- dataMask |= (1 << CD_MTFACE);
+ dataMask |= CD_MASK_MTFACE;
/* ask for vertexgroups if we need them */
for(i=0; i<PSYS_TOT_VG; i++){
if(psmd->psys->vgroup[i]){
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
break;
}
}
/* particles only need this if they are after a non deform modifier, and
* the modifier stack will only create them in that case. */
- dataMask |= CD_MASK_ORIGSPACE;
+ dataMask |= CD_MASK_ORIGSPACE|CD_MASK_ORIGINDEX;
dataMask |= CD_MASK_ORCO;
@@ -119,9 +122,12 @@ static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
}
/* saves the current emitter state for a particle system and calculates particles */
-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 *derivedData,
+ float (*vertexCos)[3],
+ int UNUSED(numVerts),
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = derivedData;
ParticleSystemModifierData *psmd= (ParticleSystemModifierData*) md;
@@ -137,7 +143,7 @@ static void deformVerts(
return;
if(dm==0) {
- dm= get_dm(md->scene, ob, NULL, NULL, vertexCos, 1);
+ dm= get_dm(ob, NULL, NULL, vertexCos, 1);
if(!dm)
return;
@@ -150,6 +156,14 @@ static void deformVerts(
psmd->dm->needsFree = 1;
psmd->dm->release(psmd->dm);
}
+ else if(psmd->flag & eParticleSystemFlag_file_loaded) {
+ /* in file read dm just wasn't saved in file so no need to reset everything */
+ psmd->flag &= ~eParticleSystemFlag_file_loaded;
+ }
+ else {
+ /* no dm before, so recalc particles fully */
+ psys->recalc |= PSYS_RECALC_RESET;
+ }
/* make new dm */
psmd->dm=CDDM_copy(dm, 0);
@@ -168,10 +182,8 @@ static void deformVerts(
if(psmd->dm->getNumVerts(psmd->dm)!=psmd->totdmvert ||
psmd->dm->getNumEdges(psmd->dm)!=psmd->totdmedge ||
psmd->dm->getNumTessFaces(psmd->dm)!=psmd->totdmface){
- /* in file read dm hasn't really changed but just wasn't saved in file */
psys->recalc |= PSYS_RECALC_RESET;
- psmd->flag |= eParticleSystemFlag_DM_changed;
psmd->totdmvert= psmd->dm->getNumVerts(psmd->dm);
psmd->totdmedge= psmd->dm->getNumEdges(psmd->dm);
@@ -182,7 +194,6 @@ static void deformVerts(
psmd->flag &= ~eParticleSystemFlag_psys_updated;
particle_system_update(md->scene, ob, psys);
psmd->flag |= eParticleSystemFlag_psys_updated;
- psmd->flag &= ~eParticleSystemFlag_DM_changed;
}
}
@@ -218,6 +229,7 @@ ModifierTypeInfo modifierType_ParticleSystem = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
/* deformVertsEM */ 0 /* deformVertsEM */ ,
+ /* deformMatrices */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
/* applyModifierEM */ 0,
@@ -227,6 +239,7 @@ ModifierTypeInfo modifierType_ParticleSystem = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index 7cec359fd33..68ad5437585 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -30,12 +30,19 @@
*
*/
+/** \file blender/modifiers/intern/MOD_screw.c
+ * \ingroup modifiers
+ */
+
+
/* Screw modifier: revolves the edges about an axis */
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
@@ -128,8 +135,9 @@ static void copyData(ModifierData *md, ModifierData *target)
}
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
- DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+ DerivedMesh *derivedData,
+ int useRenderParams,
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm= derivedData;
DerivedMesh *result;
@@ -140,7 +148,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
int step;
int i, j;
int i1,i2;
- int step_tot= ltmd->steps;
+ int step_tot= useRenderParams ? ltmd->render_steps : ltmd->steps;
const int do_flip = ltmd->flag & MOD_SCREW_NORMAL_FLIP ? 1 : 0;
int maxVerts=0, maxEdges=0, maxFaces=0;
int totvert= dm->getNumVerts(dm);
@@ -166,17 +174,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
ScrewVertConnect *vc, *vc_tmp, *vert_connect= NULL;
- float mat[4][4] = {{0.0f, 0.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 0.0f, 1.0f}};
-
/* dont do anything? */
if (!totvert)
return CDDM_from_template(dm, 0, 0, 0, 0, 0);
- step_tot= useRenderParams ? ltmd->render_steps : ltmd->steps;
-
switch(ltmd->axis) {
case 0:
other_axis_1=1;
@@ -221,7 +222,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* angle */
-#if 0 // cant incluide this, not pradictable enough, though quite fun,.
+#if 0 // cant incluide this, not predictable enough, though quite fun,.
if(ltmd->flag & MOD_SCREW_OBJECT_ANGLE) {
float mtx3_tx[3][3];
copy_m3_m4(mtx3_tx, mtx_tx);
@@ -270,7 +271,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
step_tot = ((step_tot + 1) * ltmd->iter) - (ltmd->iter - 1);
/* will the screw be closed?
- * Note! smaller then FLT_EPSILON*100 gives problems with float precission so its never closed. */
+ * Note! smaller then FLT_EPSILON*100 gives problems with float precision so its never closed. */
if (fabs(screw_ofs) <= (FLT_EPSILON*100) && fabs(fabs(angle) - (M_PI * 2)) <= (FLT_EPSILON*100)) {
close= 1;
step_tot--;
@@ -304,6 +305,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
medge_new = result->getEdgeArray(result);
origindex= result->getTessFaceDataArray(result, CD_ORIGINDEX);
+
+ DM_copy_vert_data(dm, result, 0, 0, totvert); /* copy first otherwise this overwrites our own vertex normals */
/* Set the locations of the first set of verts */
@@ -435,15 +438,15 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* find the first vert */
vc= vert_connect;
for (i=0; i < totvert; i++, vc++) {
- int v_best=-1, ed_loop_closed=0; /* vert and vert new */
- int ed_loop_flip= 0; /* compiler complains if not initialized, but it should be initialized below */
- float fl= -1.0f;
- ScrewVertIter lt_iter;
-
/* Now do search for connected verts, order all edges and flip them
* so resulting faces are flipped the right way */
vc_tot_linked= 0; /* count the number of linked verts for this loop */
if (vc->flag == 0) {
+ int v_best=-1, ed_loop_closed=0; /* vert and vert new */
+ ScrewVertIter lt_iter;
+ int ed_loop_flip= 0; /* compiler complains if not initialized, but it should be initialized below */
+ float fl= -1.0f;
+
/*printf("Loop on connected vert: %i\n", i);*/
for(j=0; j<2; j++) {
@@ -665,13 +668,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* done with edge connectivity based normal flipping */
- DM_copy_vert_data(dm, result, 0, 0, totvert);
-
/* Add Faces */
for (step=1; step < step_tot; step++) {
const int varray_stride= totvert * step;
float step_angle;
float nor_tx[3];
+ float mat[4][4];
/* Rotation Matrix */
step_angle= (angle / (step_tot - (!close))) * step;
@@ -831,12 +833,15 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
dm = CDDM_copy(result, 1); /*builds ngon faces from tess (mface) faces*/
result->needsFree = 1;
result->release(result);
+
+ return dm;
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest,
- struct Scene *scene, Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
ScrewModifierData *ltmd= (ScrewModifierData*) md;
@@ -861,13 +866,15 @@ static void foreachObjectLink(
/* This dosnt work with material*/
static DerivedMesh *applyModifierEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
+ ModifierData *md,
+ Object *ob,
+ struct EditMesh *UNUSED(editData),
DerivedMesh *derivedData)
{
return applyModifier(md, ob, derivedData, 0, 1);
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 0;
}
@@ -886,6 +893,7 @@ ModifierTypeInfo modifierType_Screw = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -896,6 +904,7 @@ ModifierTypeInfo modifierType_Screw = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
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
};
diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c
index 6526be4cb53..cfd12833a38 100644
--- a/source/blender/modifiers/intern/MOD_shrinkwrap.c
+++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c
@@ -30,8 +30,16 @@
*
*/
+/** \file blender/modifiers/intern/MOD_shrinkwrap.c
+ * \ingroup modifiers
+ */
+
+
#include <string.h>
+#include "BLI_string.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
#include "BKE_shrinkwrap.h"
@@ -62,7 +70,7 @@ static void copyData(ModifierData *md, ModifierData *target)
tsmd->target = smd->target;
tsmd->auxTarget = smd->auxTarget;
- strcpy(tsmd->vgroup_name, smd->vgroup_name);
+ BLI_strncpy(tsmd->vgroup_name, smd->vgroup_name, sizeof(tsmd->vgroup_name));
tsmd->keepDist = smd->keepDist;
tsmd->shrinkType= smd->shrinkType;
@@ -71,23 +79,23 @@ static void copyData(ModifierData *md, ModifierData *target)
tsmd->subsurfLevels = smd->subsurfLevels;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
if(smd->vgroup_name[0])
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
if(smd->shrinkType == MOD_SHRINKWRAP_PROJECT
&& smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)
- dataMask |= (1 << CD_MVERT);
+ dataMask |= CD_MASK_MVERT;
return dataMask;
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
return !smd->target;
@@ -102,16 +110,21 @@ static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk,
walk(userData, ob, &smd->auxTarget);
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = derivedData;
CustomDataMask dataMask = requiredDataMask(ob, md);
/* ensure we get a CDDM with applied vertex coords */
if(dataMask)
- dm= get_cddm(md->scene, ob, NULL, dm, vertexCos);
+ dm= get_cddm(ob, NULL, dm, vertexCos);
- shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, md->scene, ob, dm, vertexCos, numVerts);
+ shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, ob, dm, vertexCos, numVerts);
if(dm != derivedData)
dm->release(dm);
@@ -124,15 +137,18 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct EditMesh *editDat
/* ensure we get a CDDM with applied vertex coords */
if(dataMask)
- dm= get_cddm(md->scene, ob, editData, dm, vertexCos);
+ dm= get_cddm(ob, editData, dm, vertexCos);
- shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, md->scene, ob, dm, vertexCos, numVerts);
+ shrinkwrapModifier_deform((ShrinkwrapModifierData*)md, ob, dm, vertexCos, numVerts);
if(dm != derivedData)
dm->release(dm);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData*) md;
@@ -156,6 +172,7 @@ ModifierTypeInfo modifierType_Shrinkwrap = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -166,6 +183,7 @@ ModifierTypeInfo modifierType_Shrinkwrap = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c
index c64fec4075d..0150322ae8c 100644
--- a/source/blender/modifiers/intern/MOD_simpledeform.c
+++ b/source/blender/modifiers/intern/MOD_simpledeform.c
@@ -30,17 +30,24 @@
*
*/
+/** \file blender/modifiers/intern/MOD_simpledeform.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
+#include "BLI_string.h"
+#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_lattice.h"
#include "BKE_modifier.h"
#include "BKE_deform.h"
#include "BKE_shrinkwrap.h"
-#include "BKE_utildefines.h"
+
#include "depsgraph_private.h"
@@ -146,7 +153,7 @@ static void simpleDeform_bend(const float factor, const float dcut[3], float *co
/* simple deform modifier */
-void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
+static void SimpleDeformModifier_do(SimpleDeformModifierData *smd, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
{
static const float lock_axis[2] = {0.0f, 0.0f};
@@ -287,17 +294,17 @@ static void copyData(ModifierData *md, ModifierData *target)
tsmd->originOpts= smd->originOpts;
tsmd->factor= smd->factor;
memcpy(tsmd->limit, smd->limit, sizeof(tsmd->limit));
- strcpy(tsmd->vgroup_name, smd->vgroup_name);
+ BLI_strncpy(tsmd->vgroup_name, smd->vgroup_name, sizeof(tsmd->vgroup_name));
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
if(smd->vgroup_name[0])
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
@@ -308,7 +315,10 @@ static void foreachObjectLink(ModifierData *md, Object *ob, void (*walk)(void *u
walk(userData, ob, &smd->origin);
}
-static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
SimpleDeformModifierData *smd = (SimpleDeformModifierData*)md;
@@ -316,7 +326,12 @@ static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *sc
dag_add_relation(forest, dag_get_node(forest, smd->origin), obNode, DAG_RL_OB_DATA, "SimpleDeform Modifier");
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm = derivedData;
CustomDataMask dataMask = requiredDataMask(ob, md);
@@ -324,7 +339,7 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
/* we implement requiredDataMask but thats not really usefull since
mesh_calc_modifiers pass a NULL derivedData */
if(dataMask)
- dm= get_dm(md->scene, ob, NULL, dm, NULL, 0);
+ dm= get_dm(ob, NULL, dm, NULL, 0);
SimpleDeformModifier_do((SimpleDeformModifierData*)md, ob, dm, vertexCos, numVerts);
@@ -332,7 +347,11 @@ static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
dm->release(dm);
}
-static void deformVertsEM(ModifierData *md, Object *ob, struct EditMesh *editData, DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
+static void deformVertsEM(ModifierData *md, Object *ob,
+ struct EditMesh *editData,
+ DerivedMesh *derivedData,
+ float (*vertexCos)[3],
+ int numVerts)
{
DerivedMesh *dm = derivedData;
CustomDataMask dataMask = requiredDataMask(ob, md);
@@ -340,7 +359,7 @@ static void deformVertsEM(ModifierData *md, Object *ob, struct EditMesh *editDat
/* we implement requiredDataMask but thats not really usefull since
mesh_calc_modifiers pass a NULL derivedData */
if(dataMask)
- dm= get_dm(md->scene, ob, editData, dm, NULL, 0);
+ dm= get_dm(ob, editData, dm, NULL, 0);
SimpleDeformModifier_do((SimpleDeformModifierData*)md, ob, dm, vertexCos, numVerts);
@@ -362,6 +381,7 @@ ModifierTypeInfo modifierType_SimpleDeform = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -372,6 +392,7 @@ ModifierTypeInfo modifierType_SimpleDeform = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c
index 25153de7be4..46f0483dbff 100644
--- a/source/blender/modifiers/intern/MOD_smoke.c
+++ b/source/blender/modifiers/intern/MOD_smoke.c
@@ -30,11 +30,22 @@
*
*/
+/** \file blender/modifiers/intern/MOD_smoke.c
+ * \ingroup modifiers
+ */
+
+
#include "stddef.h"
#include "MEM_guardedalloc.h"
+#include "DNA_group_types.h"
#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_smoke_types.h"
+
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
@@ -71,29 +82,34 @@ static void freeData(ModifierData *md)
smokeModifier_free (smd);
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int UNUSED(numVerts),
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
SmokeModifierData *smd = (SmokeModifierData*) md;
- DerivedMesh *dm = dm= get_cddm(md->scene, ob, NULL, derivedData, vertexCos);
+ DerivedMesh *dm = get_cddm(ob, NULL, derivedData, vertexCos);
- smokeModifier_do(smd, md->scene, ob, dm, useRenderParams, isFinalCalc);
+ smokeModifier_do(smd, md->scene, ob, dm);
if(dm != derivedData)
dm->release(dm);
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, struct Scene *scene, Object *ob,
- DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *scene,
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
- /*SmokeModifierData *smd = (SmokeModifierData *) md;
+ SmokeModifierData *smd = (SmokeModifierData *) md;
+
if(smd && (smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
{
if(smd->domain->fluid_group)
@@ -107,7 +123,7 @@ static void updateDepgraph(
SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(go->ob, eModifierType_Smoke);
// check for initialized smoke object
- if(smd2 && (smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow)
+ if(smd2 && (((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) || ((smd->type & MOD_SMOKE_TYPE_COLL) && smd2->coll)))
{
DagNode *curNode = dag_get_node(forest, go->ob);
dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow");
@@ -115,8 +131,20 @@ static void updateDepgraph(
}
}
}
+ else {
+ Base *base = scene->base.first;
+
+ for(; base; base = base->next) {
+ SmokeModifierData *smd2 = (SmokeModifierData *)modifiers_findByType(base->object, eModifierType_Smoke);
+
+ if(smd2 && (((smd2->type & MOD_SMOKE_TYPE_FLOW) && smd2->flow) || ((smd->type & MOD_SMOKE_TYPE_COLL) && smd2->coll)))
+ {
+ DagNode *curNode = dag_get_node(forest, base->object);
+ dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Smoke Flow");
+ }
+ }
+ }
}
- */
}
@@ -131,6 +159,7 @@ ModifierTypeInfo modifierType_Smoke = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -141,6 +170,7 @@ ModifierTypeInfo modifierType_Smoke = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_smooth.c b/source/blender/modifiers/intern/MOD_smooth.c
index a42bf8abbaf..526b54d1cf8 100644
--- a/source/blender/modifiers/intern/MOD_smooth.c
+++ b/source/blender/modifiers/intern/MOD_smooth.c
@@ -30,14 +30,21 @@
*
*/
+/** \file blender/modifiers/intern/MOD_smooth.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_particle.h"
#include "BKE_deform.h"
+
#include "MEM_guardedalloc.h"
#include "MOD_modifiertypes.h"
@@ -65,7 +72,7 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(tsmd->defgrp_name, smd->defgrp_name, 32);
}
-static int isDisabled(ModifierData *md, int useRenderParams)
+static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
{
SmoothModifierData *smd = (SmoothModifierData*) md;
short flag;
@@ -78,13 +85,13 @@ static int isDisabled(ModifierData *md, int useRenderParams)
return 0;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
SmoothModifierData *smd = (SmoothModifierData *)md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(smd->defgrp_name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(smd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
@@ -219,9 +226,9 @@ static void smoothModifier_do(
static void deformVerts(
ModifierData *md, Object *ob, DerivedMesh *derivedData,
- float (*vertexCos)[3], int numVerts, int useRenderParams, int isFinalCalc)
+ float (*vertexCos)[3], int numVerts, int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
- DerivedMesh *dm= get_dm(md->scene, ob, NULL, derivedData, NULL, 0);
+ DerivedMesh *dm= get_dm(ob, NULL, derivedData, NULL, 0);
smoothModifier_do((SmoothModifierData *)md, ob, dm,
vertexCos, numVerts);
@@ -234,7 +241,7 @@ static void deformVertsEM(
ModifierData *md, Object *ob, struct EditMesh *editData,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
- DerivedMesh *dm= get_dm(md->scene, ob, editData, derivedData, NULL, 0);
+ DerivedMesh *dm= get_dm(ob, editData, derivedData, NULL, 0);
smoothModifier_do((SmoothModifierData *)md, ob, dm,
vertexCos, numVerts);
@@ -254,6 +261,7 @@ ModifierTypeInfo modifierType_Smooth = {
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -264,6 +272,7 @@ ModifierTypeInfo modifierType_Smooth = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_softbody.c b/source/blender/modifiers/intern/MOD_softbody.c
index 8f629001e0b..0abf2fa6281 100644
--- a/source/blender/modifiers/intern/MOD_softbody.c
+++ b/source/blender/modifiers/intern/MOD_softbody.c
@@ -30,22 +30,33 @@
*
*/
+/** \file blender/modifiers/intern/MOD_softbody.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_scene_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_particle.h"
#include "BKE_softbody.h"
#include "MOD_modifiertypes.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))
{
sbObjectStep(md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts);
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
@@ -62,6 +73,7 @@ ModifierTypeInfo modifierType_Softbody = {
/* copyData */ 0,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -72,6 +84,7 @@ ModifierTypeInfo modifierType_Softbody = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index 9c17100b33f..50317e363ad 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -30,16 +30,22 @@
*
*/
+/** \file blender/modifiers/intern/MOD_solidify.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
#include "BLI_edgehash.h"
+#include "BLI_utildefines.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
#include "BKE_particle.h"
#include "BKE_deform.h"
-#include "BKE_utildefines.h"
+
#include "MOD_modifiertypes.h"
@@ -126,7 +132,7 @@ static void dm_calc_normal(DerivedMesh *dm, float (*temp_nors)[3])
}
for(edge_iter = BLI_edgehashIterator_new(edge_hash); !BLI_edgehashIterator_isDone(edge_iter); BLI_edgehashIterator_step(edge_iter)) {
- /* Get the edge vert indicies, and edge value (the face indicies that use it)*/
+ /* Get the edge vert indices, and edge value (the face indices that use it)*/
BLI_edgehashIterator_getKey(edge_iter, (int*)&ed_v1, (int*)&ed_v2);
edge_ref = BLI_edgehashIterator_getValue(edge_iter);
@@ -179,35 +185,34 @@ static void copyData(ModifierData *md, ModifierData *target)
strcpy(tsmd->defgrp_name, smd->defgrp_name);
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
SolidifyModifierData *smd = (SolidifyModifierData*) md;
CustomDataMask dataMask = 0;
/* ask for vertexgroups if we need them */
- if(smd->defgrp_name[0]) dataMask |= (1 << CD_MDEFORMVERT);
+ if(smd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
-static DerivedMesh *applyModifier(ModifierData *md,
- Object *ob,
- DerivedMesh *dm,
- int useRenderParams,
- int isFinalCalc)
+static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *dm,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
int i;
DerivedMesh *result, *copy;
- SolidifyModifierData *smd = (SolidifyModifierData*) md;
+ const SolidifyModifierData *smd = (SolidifyModifierData*) md;
MFace *mf, *mface, *orig_mface;
MEdge *ed, *medge, *orig_medge;
MVert *mv, *mvert, *orig_mvert;
- int numVerts = dm->getNumVerts(dm);
- int numEdges = dm->getNumEdges(dm);
- int numFaces = dm->getNumFaces(dm);
+ const int numVerts = dm->getNumVerts(dm);
+ const int numEdges = dm->getNumEdges(dm);
+ const int numFaces = dm->getNumFaces(dm);
/* use for edges */
int *new_vert_arr= NULL;
@@ -221,13 +226,13 @@ static DerivedMesh *applyModifier(ModifierData *md,
float (*vert_nors)[3]= NULL;
- float ofs_orig= - (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
- float ofs_new= smd->offset - (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+ float const ofs_orig= - (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
+ float const ofs_new= smd->offset - (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
/* weights */
MDeformVert *dvert= NULL, *dv= NULL;
- int defgrp_invert = ((smd->flag & MOD_SOLIDIFY_VGROUP_INV) != 0);
- int defgrp_index= defgroup_name_index(ob, smd->defgrp_name);
+ const int defgrp_invert = ((smd->flag & MOD_SOLIDIFY_VGROUP_INV) != 0);
+ const int defgrp_index= defgroup_name_index(ob, smd->defgrp_name);
if (defgrp_index >= 0)
dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
@@ -291,7 +296,7 @@ static DerivedMesh *applyModifier(ModifierData *md,
ehi= BLI_edgehashIterator_new(edgehash);
for(; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
- int eidx= GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
+ eidx= GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
if(edge_users[eidx] >= 0) {
BLI_edgehashIterator_getKey(ehi, &v1, &v2);
orig_mvert[v1].flag |= ME_VERT_TMP_TAG;
@@ -408,7 +413,7 @@ static DerivedMesh *applyModifier(ModifierData *md,
float *vert_angles= MEM_callocN(sizeof(float) * numVerts * 2, "mod_solid_pair"); /* 2 in 1 */
float *vert_accum= vert_angles + numVerts;
float face_angles[4];
- int i, j, vidx;
+ int j, vidx;
face_nors = CustomData_get_layer(&dm->faceData, CD_NORMAL);
if(!face_nors) {
@@ -442,11 +447,11 @@ static DerivedMesh *applyModifier(ModifierData *md,
j= 2;
}
- for(; j>=0; j--) {
+ do {
vidx = *(&mf->v1 + j);
vert_accum[vidx] += face_angles[j];
vert_angles[vidx]+= shell_angle_to_dist(angle_normalized_v3v3(vert_nors[vidx], face_nors[i])) * face_angles[j];
- }
+ } while(j--);
}
/* vertex group support */
@@ -634,7 +639,7 @@ static DerivedMesh *applyModifier(ModifierData *md,
static DerivedMesh *applyModifierEM(ModifierData *md,
Object *ob,
- struct EditMesh *editData,
+ struct EditMesh *UNUSED(editData),
DerivedMesh *derivedData)
{
return applyModifier(md, ob, derivedData, 0, 1);
@@ -654,17 +659,19 @@ ModifierTypeInfo modifierType_Solidify = {
| eModifierTypeFlag_EnableInEditmode,
/* copyData */ copyData,
- /* deformVerts */ 0,
- /* deformVertsEM */ 0,
- /* deformMatricesEM */ 0,
+ /* deformVerts */ NULL,
+ /* deformMatrices */ NULL,
+ /* deformVertsEM */ NULL,
+ /* deformMatricesEM */ NULL,
/* applyModifier */ applyModifier,
/* applyModifierEM */ applyModifierEM,
/* initData */ initData,
/* requiredDataMask */ requiredDataMask,
- /* freeData */ 0,
- /* isDisabled */ 0,
- /* updateDepgraph */ 0,
- /* dependsOnTime */ 0,
- /* foreachObjectLink */ 0,
- /* foreachIDLink */ 0,
+ /* freeData */ NULL,
+ /* isDisabled */ NULL,
+ /* updateDepgraph */ NULL,
+ /* dependsOnTime */ NULL,
+ /* dependsOnNormals */ NULL,
+ /* foreachObjectLink */ NULL,
+ /* foreachIDLink */ NULL
};
diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c
index e84d8e24faa..6d5477e5ec8 100644
--- a/source/blender/modifiers/intern/MOD_subsurf.c
+++ b/source/blender/modifiers/intern/MOD_subsurf.c
@@ -30,11 +30,19 @@
*
*/
+/** \file blender/modifiers/intern/MOD_subsurf.c
+ * \ingroup modifiers
+ */
+
+
#include "stddef.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_cdderivedmesh.h"
#include "BKE_scene.h"
#include "BKE_subsurf.h"
@@ -83,9 +91,10 @@ static int isDisabled(ModifierData *md, int useRenderParams)
return get_render_subsurf_level(&md->scene->r, levels) == 0;
}
-static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
+ DerivedMesh *derivedData,
+ int useRenderParams,
+ int isFinalCalc)
{
SubsurfModifierData *smd = (SubsurfModifierData*) md;
DerivedMesh *result;
@@ -102,9 +111,9 @@ static DerivedMesh *applyModifier(
return result;
}
-static DerivedMesh *applyModifierEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
- DerivedMesh *derivedData)
+static DerivedMesh *applyModifierEM(ModifierData *md, Object *UNUSED(ob),
+ struct EditMesh *UNUSED(editData),
+ DerivedMesh *derivedData)
{
SubsurfModifierData *smd = (SubsurfModifierData*) md;
DerivedMesh *result;
@@ -129,6 +138,7 @@ ModifierTypeInfo modifierType_Subsurf = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -139,6 +149,7 @@ ModifierTypeInfo modifierType_Subsurf = {
/* isDisabled */ isDisabled,
/* updateDepgraph */ 0,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c
index a55d6bbd141..d229f75189f 100644
--- a/source/blender/modifiers/intern/MOD_surface.c
+++ b/source/blender/modifiers/intern/MOD_surface.c
@@ -30,11 +30,18 @@
*
*/
+/** \file blender/modifiers/intern/MOD_surface.c
+ * \ingroup modifiers
+ */
+
+
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
@@ -76,24 +83,26 @@ static void freeData(ModifierData *md)
}
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int UNUSED(numVerts),
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
SurfaceModifierData *surmd = (SurfaceModifierData*) md;
- unsigned int numverts = 0, i = 0;
if(surmd->dm)
surmd->dm->release(surmd->dm);
/* if possible use/create DerivedMesh */
if(derivedData) surmd->dm = CDDM_copy(derivedData, 0);
- else surmd->dm = get_dm(md->scene, ob, NULL, NULL, NULL, 0);
+ else surmd->dm = get_dm(ob, NULL, NULL, NULL, 0);
if(!ob->pd)
{
@@ -103,6 +112,7 @@ static void deformVerts(
if(surmd->dm)
{
+ unsigned int numverts = 0, i = 0;
int init = 0;
float *vec;
MVert *x, *v;
@@ -168,6 +178,7 @@ ModifierTypeInfo modifierType_Surface = {
/* copyData */ 0,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -178,6 +189,7 @@ ModifierTypeInfo modifierType_Surface = {
/* isDisabled */ 0,
/* updateDepgraph */ 0,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 25072ee7b9b..d5235736368 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -30,16 +30,23 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file blender/modifiers/intern/MOD_util.c
+ * \ingroup modifiers
+ */
+
+
#include <string.h>
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_curve_types.h"
+#include "BLI_utildefines.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
#include "BKE_displist.h"
-#include "BKE_utildefines.h"
+
#include "BKE_modifier.h"
#include "MOD_util.h"
@@ -53,7 +60,8 @@ void get_texture_value(Tex *texture, float *tex_co, TexResult *texres)
{
int result_type;
- result_type = multitex_ext(texture, tex_co, NULL, NULL, 0, texres);
+ /* no node textures for now */
+ result_type = multitex_ext_safe(texture, tex_co, texres);
/* if the texture gave an RGB value, we assume it didn't give a valid
* intensity, so calculate one (formula from do_material_tex).
@@ -84,13 +92,13 @@ void validate_layer_name(const CustomData *data, int type, char *name, char *out
/* if a layer name was given, try to find that layer */
if(name[0])
- index = CustomData_get_named_layer_index(data, CD_MTFACE, name);
+ index = CustomData_get_named_layer_index(data, type, name);
if(index < 0) {
/* either no layer was specified, or the layer we want has been
* deleted, so assign the active layer to name
*/
- index = CustomData_get_active_layer_index(data, CD_MTFACE);
+ index = CustomData_get_active_layer_index(data, type);
strcpy(outname, data->layers[index].name);
}
else
@@ -98,13 +106,13 @@ void validate_layer_name(const CustomData *data, int type, char *name, char *out
}
/* returns a cdderivedmesh if dm == NULL or is another type of derivedmesh */
-DerivedMesh *get_cddm(struct Scene *scene, Object *ob, struct EditMesh *em, DerivedMesh *dm, float (*vertexCos)[3])
+DerivedMesh *get_cddm(Object *ob, struct EditMesh *em, DerivedMesh *dm, float (*vertexCos)[3])
{
if(dm && dm->type == DM_TYPE_CDDM)
return dm;
if(!dm) {
- dm= get_dm(scene, ob, em, dm, vertexCos, 0);
+ dm= get_dm(ob, em, dm, vertexCos, 0);
}
else {
dm= CDDM_copy(dm, 0);
@@ -118,7 +126,7 @@ DerivedMesh *get_cddm(struct Scene *scene, Object *ob, struct EditMesh *em, Deri
}
/* returns a derived mesh if dm == NULL, for deforming modifiers that need it */
-DerivedMesh *get_dm(struct Scene *scene, Object *ob, struct EditMesh *em, DerivedMesh *dm, float (*vertexCos)[3], int orco)
+DerivedMesh *get_dm(Object *ob, struct EditMesh *em, DerivedMesh *dm, float (*vertexCos)[3], int orco)
{
if(dm)
return dm;
@@ -143,9 +151,8 @@ DerivedMesh *get_dm(struct Scene *scene, Object *ob, struct EditMesh *em, Derive
}
/* only called by BKE_modifier.h/modifier.c */
-void modifier_type_init(ModifierTypeInfo *types[], ModifierType type)
+void modifier_type_init(ModifierTypeInfo *types[])
{
- memset(types, 0, sizeof(types));
#define INIT_TYPE(typeName) (types[eModifierType_##typeName] = &modifierType_##typeName)
INIT_TYPE(None);
INIT_TYPE(Curve);
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index 5750e042199..a42151904e9 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -1,4 +1,4 @@
-/**
+/*
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
@@ -25,9 +25,17 @@
* ***** END GPL LICENSE BLOCK *****
*/
+/** \file blender/modifiers/intern/MOD_util.h
+ * \ingroup modifiers
+ */
+
+
#ifndef MOD_UTIL_H
#define MOD_UTIL_H
+/* so modifier types match their defines */
+#include "MOD_modifiertypes.h"
+
struct Tex;
struct TexResult;
struct CustomData;
@@ -40,9 +48,7 @@ struct ModifierData;
void get_texture_value(struct Tex *texture, float *tex_co, struct TexResult *texres);
void modifier_vgroup_cache(struct ModifierData *md, float (*vertexCos)[3]);
void validate_layer_name(const struct CustomData *data, int type, char *name, char *outname);
-struct DerivedMesh *get_cddm(struct Scene *scene, struct Object *ob, struct EditMesh *em, struct DerivedMesh *dm, float (*vertexCos)[3]);
-struct DerivedMesh *get_dm(struct Scene *scene, struct Object *ob, struct EditMesh *em, struct DerivedMesh *dm, float (*vertexCos)[3], int orco);
-
-void modifier_type_init(struct ModifierTypeInfo *types[], ModifierType type);
+struct DerivedMesh *get_cddm(struct Object *ob, struct EditMesh *em, struct DerivedMesh *dm, float (*vertexCos)[3]);
+struct DerivedMesh *get_dm(struct Object *ob, struct EditMesh *em, struct DerivedMesh *dm, float (*vertexCos)[3], int orco);
#endif /* MOD_UTIL_H */
diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c
index 3deef13735f..29bdde4d2f6 100644
--- a/source/blender/modifiers/intern/MOD_uvproject.c
+++ b/source/blender/modifiers/intern/MOD_uvproject.c
@@ -30,6 +30,11 @@
*
*/
+/** \file blender/modifiers/intern/MOD_uvproject.c
+ * \ingroup modifiers
+ */
+
+
/* UV Project modifier: Generates UVs projected from an object */
#include "DNA_meshdata_types.h"
@@ -38,6 +43,8 @@
#include "BLI_math.h"
#include "BLI_uvproject.h"
+#include "BLI_utildefines.h"
+
#include "BKE_DerivedMesh.h"
@@ -78,12 +85,12 @@ static void copyData(ModifierData *md, ModifierData *target)
tumd->scaley = umd->scaley;
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md))
{
CustomDataMask dataMask = 0;
/* ask for UV coordinates */
- dataMask |= (1 << CD_MTFACE);
+ dataMask |= CD_MASK_MTFACE;
return dataMask;
}
@@ -109,8 +116,10 @@ static void foreachIDLink(ModifierData *md, Object *ob,
userData);
}
-static void updateDepgraph(ModifierData *md,
- DagForest *forest, struct Scene *scene, Object *ob, DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ struct Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
UVProjectModifierData *umd = (UVProjectModifierData*) md;
int i;
@@ -376,9 +385,10 @@ static DerivedMesh *uvprojectModifier_do(UVProjectModifierData *umd,
return dm;
}
-static DerivedMesh *applyModifier(
- ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
+ DerivedMesh *derivedData,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *result;
UVProjectModifierData *umd = (UVProjectModifierData*) md;
@@ -388,9 +398,9 @@ static DerivedMesh *applyModifier(
return result;
}
-static DerivedMesh *applyModifierEM(
- ModifierData *md, Object *ob, struct EditMesh *editData,
- DerivedMesh *derivedData)
+static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
+ struct EditMesh *UNUSED(editData),
+ DerivedMesh *derivedData)
{
return applyModifier(md, ob, derivedData, 0, 1);
}
@@ -408,6 +418,7 @@ ModifierTypeInfo modifierType_UVProject = {
/* copyData */ copyData,
/* deformVerts */ 0,
+ /* deformMatrices */ 0,
/* deformVertsEM */ 0,
/* deformMatricesEM */ 0,
/* applyModifier */ applyModifier,
@@ -418,6 +429,7 @@ ModifierTypeInfo modifierType_UVProject = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ 0,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ foreachIDLink,
};
diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c
index a4cf8f4a2c2..42b1369e8ca 100644
--- a/source/blender/modifiers/intern/MOD_wave.c
+++ b/source/blender/modifiers/intern/MOD_wave.c
@@ -30,12 +30,20 @@
*
*/
+/** \file blender/modifiers/intern/MOD_wave.c
+ * \ingroup modifiers
+ */
+
+
#include "BLI_math.h"
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
+#include "BLI_utildefines.h"
+
+
#include "BKE_DerivedMesh.h"
#include "BKE_object.h"
#include "BKE_deform.h"
@@ -93,7 +101,7 @@ static void copyData(ModifierData *md, ModifierData *target)
strncpy(twmd->defgrp_name, wmd->defgrp_name, 32);
}
-static int dependsOnTime(ModifierData *md)
+static int dependsOnTime(ModifierData *UNUSED(md))
{
return 1;
}
@@ -118,9 +126,10 @@ static void foreachIDLink(ModifierData *md, Object *ob,
foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData);
}
-static void updateDepgraph(
- ModifierData *md, DagForest *forest, Scene *scene, Object *ob,
- DagNode *obNode)
+static void updateDepgraph(ModifierData *md, DagForest *forest,
+ Scene *UNUSED(scene),
+ Object *UNUSED(ob),
+ DagNode *obNode)
{
WaveModifierData *wmd = (WaveModifierData*) md;
@@ -139,7 +148,7 @@ static void updateDepgraph(
}
}
-static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
+static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
{
WaveModifierData *wmd = (WaveModifierData *)md;
CustomDataMask dataMask = 0;
@@ -147,11 +156,11 @@ static CustomDataMask requiredDataMask(Object *ob, ModifierData *md)
/* ask for UV coordinates if we need them */
if(wmd->texture && wmd->texmapping == MOD_WAV_MAP_UV)
- dataMask |= (1 << CD_MTFACE);
+ dataMask |= CD_MASK_MTFACE;
/* ask for vertexgroups if we need them */
if(wmd->defgrp_name[0])
- dataMask |= (1 << CD_MDEFORMVERT);
+ dataMask |= CD_MASK_MDEFORMVERT;
return dataMask;
}
@@ -399,17 +408,20 @@ static void waveModifier_do(WaveModifierData *md,
if(wmd->texture) MEM_freeN(tex_co);
}
-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 *derivedData,
+ float (*vertexCos)[3],
+ int numVerts,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *dm= derivedData;
WaveModifierData *wmd = (WaveModifierData *)md;
if(wmd->flag & MOD_WAVE_NORM)
- dm= get_cddm(md->scene, ob, NULL, dm, vertexCos);
+ dm= get_cddm(ob, NULL, dm, vertexCos);
else if(wmd->texture || wmd->defgrp_name[0])
- dm= get_dm(md->scene, ob, NULL, dm, NULL, 0);
+ dm= get_dm(ob, NULL, dm, NULL, 0);
waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
@@ -425,9 +437,9 @@ static void deformVertsEM(
WaveModifierData *wmd = (WaveModifierData *)md;
if(wmd->flag & MOD_WAVE_NORM)
- dm= get_cddm(md->scene, ob, editData, dm, vertexCos);
+ dm= get_cddm(ob, editData, dm, vertexCos);
else if(wmd->texture || wmd->defgrp_name[0])
- dm= get_dm(md->scene, ob, editData, dm, NULL, 0);
+ dm= get_dm(ob, editData, dm, NULL, 0);
waveModifier_do(wmd, md->scene, ob, dm, vertexCos, numVerts);
@@ -445,6 +457,7 @@ ModifierTypeInfo modifierType_Wave = {
| eModifierTypeFlag_SupportsEditmode,
/* copyData */ copyData,
/* deformVerts */ deformVerts,
+ /* deformMatrices */ 0,
/* deformVertsEM */ deformVertsEM,
/* deformMatricesEM */ 0,
/* applyModifier */ 0,
@@ -455,6 +468,7 @@ ModifierTypeInfo modifierType_Wave = {
/* isDisabled */ 0,
/* updateDepgraph */ updateDepgraph,
/* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ 0,
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ foreachIDLink,
};
diff --git a/source/blender/modifiers/intern/Makefile b/source/blender/modifiers/intern/Makefile
deleted file mode 100644
index 94ea068a1bc..00000000000
--- a/source/blender/modifiers/intern/Makefile
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# $Id$
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-#
-#
-
-LIBNAME = modifiers
-DIR = $(OCGDIR)/blender/$(LIBNAME)
-
-include nan_compile.mk
-
-CFLAGS += $(LEVEL_1_C_WARNINGS)
-
-CPPFLAGS += -I..
-
-CPPFLAGS += -I../../makesdna
-CPPFLAGS += -I../../makesrna
-CPPFLAGS += -I../../blenlib
-CPPFLAGS += -I../../blenkernel
-CPPFLAGS += -I../../blenkernel/intern
-CPPFLAGS += -I../../render/extern/include
-
-CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
-
-CPPFLAGS += -I$(NAN_DECIMATION)/include
-CPPFLAGS += -I$(NAN_ELBEEM)/include
-CPPFLAGS += -I$(NAN_OPENNL)/include
-CPPFLAGS += -I$(NAN_BSP)/include
-# CPPFLAGS += -I$(NAN_SMOKE)/include
-
-