diff options
Diffstat (limited to 'source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c')
-rw-r--r-- | source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c index 88ba6b6285d..e766615101a 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c @@ -7,19 +7,21 @@ #include <stdio.h> -#include "BLI_utildefines.h" - +#include "BLI_blenlib.h" #include "BLI_math_vector.h" +#include "BLI_utildefines.h" #include "DNA_gpencil_modifier_types.h" #include "DNA_gpencil_types.h" #include "DNA_material_types.h" #include "DNA_meshdata_types.h" #include "DNA_object_types.h" +#include "DNA_scene_types.h" #include "BKE_deform.h" #include "BKE_gpencil_modifier.h" #include "BKE_material.h" +#include "BKE_scene.h" #include "MOD_gpencil_modifiertypes.h" #include "MOD_gpencil_util.h" @@ -168,3 +170,29 @@ float get_modifier_point_weight(MDeformVert *dvert, bool inverse, int def_nr) return weight; } + +void generic_bake_deform_stroke( + Depsgraph *depsgraph, GpencilModifierData *md, Object *ob, const bool retime, gpBakeCb bake_cb) +{ + Scene *scene = DEG_get_evaluated_scene(depsgraph); + bGPdata *gpd = ob->data; + int oldframe = (int)DEG_get_ctime(depsgraph); + + LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { + LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) { + if (retime) { + CFRA = gpf->framenum; + BKE_scene_graph_update_for_newframe(depsgraph); + } + LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { + bake_cb(md, depsgraph, ob, gpl, gpf, gps); + } + } + } + + /* Return frame state and DB to original state. */ + if (retime) { + CFRA = oldframe; + BKE_scene_graph_update_for_newframe(depsgraph); + } +} |