Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_dynamicpaint.c
| Show First 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | static DerivedMesh *applyModifier(ModifierData *md, Object *ob, | ||||
| /* dont apply dynamic paint on orco dm stack */ | /* dont apply dynamic paint on orco dm stack */ | ||||
| if (!(flag & MOD_APPLY_ORCO)) { | if (!(flag & MOD_APPLY_ORCO)) { | ||||
| return dynamicPaint_Modifier_do(pmd, md->scene, ob, dm); | return dynamicPaint_Modifier_do(pmd, md->scene, ob, dm); | ||||
| } | } | ||||
| return dm; | return dm; | ||||
| } | } | ||||
| static bool is_brush_cb(Object *UNUSED(ob), ModifierData *pmd) | |||||
| { | |||||
| return ((DynamicPaintModifierData*)pmd)->brush != NULL; | |||||
| } | |||||
| static void updateDepgraph(ModifierData *md, DagForest *forest, | static void updateDepgraph(ModifierData *md, DagForest *forest, | ||||
| struct Main *UNUSED(bmain), | struct Main *UNUSED(bmain), | ||||
| struct Scene *scene, | struct Scene *scene, | ||||
| Object *ob, | Object *ob, | ||||
| DagNode *obNode) | DagNode *obNode) | ||||
| { | { | ||||
| DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md; | DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md; | ||||
| /* add relation from canvases to all brush objects */ | /* add relation from canvases to all brush objects */ | ||||
| if (pmd && pmd->canvas) { | if (pmd && pmd->canvas) { | ||||
| Base *base = scene->base.first; | for (DynamicPaintSurface *surface = pmd->canvas->surfaces.first; surface; surface = surface->next) { | ||||
| if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) { | |||||
| for (; base; base = base->next) { | dag_add_forcefield_relations(forest, scene, ob, obNode, surface->effector_weights, true, 0, "Dynamic Paint Field"); | ||||
| DynamicPaintModifierData *pmd2 = | |||||
| (DynamicPaintModifierData *)modifiers_findByType(base->object, eModifierType_DynamicPaint); | |||||
| if (pmd2 && pmd2->brush && ob != base->object) { | |||||
| DagNode *brushNode = dag_get_node(forest, base->object); | |||||
| dag_add_relation(forest, brushNode, obNode, DAG_RL_DATA_DATA | DAG_RL_OB_DATA, "Dynamic Paint Brush"); | |||||
| } | } | ||||
| /* Actual code uses custom loop over group/scene without layer checks in dynamicPaint_doStep */ | |||||
| dag_add_collision_relations(forest, scene, ob, obNode, surface->brush_group, -1, eModifierType_DynamicPaint, is_brush_cb, false, "Dynamic Paint Brush"); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static void updateDepsgraph(ModifierData *md, | static void updateDepsgraph(ModifierData *md, | ||||
| struct Main *UNUSED(bmain), | struct Main *UNUSED(bmain), | ||||
| struct Scene *scene, | struct Scene *scene, | ||||
| Object *ob, | Object *ob, | ||||
| struct DepsNodeHandle *node) | struct DepsNodeHandle *node) | ||||
| { | { | ||||
| DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; | DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; | ||||
| /* Add relation from canvases to all brush objects. */ | /* Add relation from canvases to all brush objects. */ | ||||
| if (pmd->canvas != NULL) { | if (pmd->canvas != NULL) { | ||||
| Base *base = scene->base.first; | for (DynamicPaintSurface *surface = pmd->canvas->surfaces.first; surface; surface = surface->next) { | ||||
| for (; base; base = base->next) { | if (surface->effect & MOD_DPAINT_EFFECT_DO_DRIP) { | ||||
| DynamicPaintModifierData *pmd2 = | DEG_add_forcefield_relations(node, scene, ob, surface->effector_weights, true, 0, "Dynamic Paint Field"); | ||||
| (DynamicPaintModifierData *)modifiers_findByType(base->object, eModifierType_DynamicPaint); | |||||
| if (pmd2 && pmd2->brush && ob != base->object) { | |||||
| DEG_add_object_relation(node, base->object, DEG_OB_COMP_TRANSFORM, "Dynamic Paint Brush"); | |||||
| } | } | ||||
| /* Actual code uses custom loop over group/scene without layer checks in dynamicPaint_doStep */ | |||||
| DEG_add_collision_relations(node, scene, ob, surface->brush_group, -1, eModifierType_DynamicPaint, is_brush_cb, false, "Dynamic Paint Brush"); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static bool dependsOnTime(ModifierData *UNUSED(md)) | static bool dependsOnTime(ModifierData *UNUSED(md)) | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 58 Lines • Show Last 20 Lines | |||||