Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_softbody.c
| Show All 29 Lines | |||||
| /** \file blender/modifiers/intern/MOD_softbody.c | /** \file blender/modifiers/intern/MOD_softbody.c | ||||
| * \ingroup modifiers | * \ingroup modifiers | ||||
| */ | */ | ||||
| #include <stdio.h> | #include <stdio.h> | ||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "DNA_object_force.h" | |||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BKE_cdderivedmesh.h" | #include "BKE_cdderivedmesh.h" | ||||
| #include "BKE_particle.h" | #include "BKE_particle.h" | ||||
| #include "BKE_softbody.h" | #include "BKE_softbody.h" | ||||
| #include "depsgraph_private.h" | |||||
| #include "DEG_depsgraph_build.h" | |||||
| #include "MOD_modifiertypes.h" | #include "MOD_modifiertypes.h" | ||||
| static void deformVerts(ModifierData *md, Object *ob, | static void deformVerts(ModifierData *md, Object *ob, | ||||
| DerivedMesh *UNUSED(derivedData), | DerivedMesh *UNUSED(derivedData), | ||||
| float (*vertexCos)[3], | float (*vertexCos)[3], | ||||
| int numVerts, | int numVerts, | ||||
| ModifierApplyFlag UNUSED(flag)) | ModifierApplyFlag UNUSED(flag)) | ||||
| { | { | ||||
| sbObjectStep(md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts); | sbObjectStep(md->scene, ob, (float)md->scene->r.cfra, vertexCos, numVerts); | ||||
| } | } | ||||
| static bool dependsOnTime(ModifierData *UNUSED(md)) | static bool dependsOnTime(ModifierData *UNUSED(md)) | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| static void updateDepgraph(ModifierData *UNUSED(md), DagForest *forest, | |||||
| struct Main *UNUSED(bmain), | |||||
| Scene *scene, Object *ob, DagNode *obNode) | |||||
| { | |||||
| if (ob->soft) { | |||||
| /* Actual code uses ccd_build_deflector_hash */ | |||||
| dag_add_collision_relations(forest, scene, ob, obNode, ob->soft->collision_group, ob->lay, eModifierType_Collision, NULL, false, "Softbody Collision"); | |||||
| dag_add_forcefield_relations(forest, scene, ob, obNode, ob->soft->effector_weights, true, 0, "Softbody Field"); | |||||
| } | |||||
| } | |||||
| static void updateDepsgraph(ModifierData *UNUSED(md), | |||||
| struct Main *UNUSED(bmain), | |||||
| struct Scene *scene, | |||||
| Object *ob, | |||||
| struct DepsNodeHandle *node) | |||||
| { | |||||
| if (ob->soft) { | |||||
| /* Actual code uses ccd_build_deflector_hash */ | |||||
| DEG_add_collision_relations(node, scene, ob, ob->soft->collision_group, ob->lay, eModifierType_Collision, NULL, false, "Softbody Collision"); | |||||
| DEG_add_forcefield_relations(node, scene, ob, ob->soft->effector_weights, true, 0, "Softbody Field"); | |||||
| } | |||||
| } | |||||
| ModifierTypeInfo modifierType_Softbody = { | ModifierTypeInfo modifierType_Softbody = { | ||||
| /* name */ "Softbody", | /* name */ "Softbody", | ||||
| /* structName */ "SoftbodyModifierData", | /* structName */ "SoftbodyModifierData", | ||||
| /* structSize */ sizeof(SoftbodyModifierData), | /* structSize */ sizeof(SoftbodyModifierData), | ||||
| /* type */ eModifierTypeType_OnlyDeform, | /* type */ eModifierTypeType_OnlyDeform, | ||||
| /* flags */ eModifierTypeFlag_AcceptsCVs | | /* flags */ eModifierTypeFlag_AcceptsCVs | | ||||
| eModifierTypeFlag_AcceptsLattice | | eModifierTypeFlag_AcceptsLattice | | ||||
| eModifierTypeFlag_RequiresOriginalData | | eModifierTypeFlag_RequiresOriginalData | | ||||
| eModifierTypeFlag_Single, | eModifierTypeFlag_Single, | ||||
| /* copyData */ NULL, | /* copyData */ NULL, | ||||
| /* deformVerts */ deformVerts, | /* deformVerts */ deformVerts, | ||||
| /* deformMatrices */ NULL, | /* deformMatrices */ NULL, | ||||
| /* deformVertsEM */ NULL, | /* deformVertsEM */ NULL, | ||||
| /* deformMatricesEM */ NULL, | /* deformMatricesEM */ NULL, | ||||
| /* applyModifier */ NULL, | /* applyModifier */ NULL, | ||||
| /* applyModifierEM */ NULL, | /* applyModifierEM */ NULL, | ||||
| /* initData */ NULL, | /* initData */ NULL, | ||||
| /* requiredDataMask */ NULL, | /* requiredDataMask */ NULL, | ||||
| /* freeData */ NULL, | /* freeData */ NULL, | ||||
| /* isDisabled */ NULL, | /* isDisabled */ NULL, | ||||
| /* updateDepgraph */ NULL, | /* updateDepgraph */ updateDepgraph, | ||||
| /* updateDepsgraph */ NULL, | /* updateDepsgraph */ updateDepsgraph, | ||||
| /* dependsOnTime */ dependsOnTime, | /* dependsOnTime */ dependsOnTime, | ||||
| /* dependsOnNormals */ NULL, | /* dependsOnNormals */ NULL, | ||||
| /* foreachObjectLink */ NULL, | /* foreachObjectLink */ NULL, | ||||
| /* foreachIDLink */ NULL, | /* foreachIDLink */ NULL, | ||||
| /* foreachTexLink */ NULL, | /* foreachTexLink */ NULL, | ||||
| }; | }; | ||||