URI: 
       Make it easier to write new functions for blender - annna - Annna the nice friendly bot.
  HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
       ---
   DIR commit 75a586ed745299e3ea0b24116aa4c45aa19e4a24
   DIR parent cce8587a0f1e93efe09b617a44406ee1e47b6a39
  HTML Author: Annna Robert-Houdin <annna@bitreich.org>
       Date:   Sun, 31 Jul 2022 18:46:42 +0200
       
       Make it easier to write new functions for blender
       
       Diffstat:
         M blender-effect                      |       4 ++--
         M modules/blender/.gitignore          |       1 +
         M modules/blender/effect.py           |      38 +++++++++++++++++++------------
       
       3 files changed, 26 insertions(+), 17 deletions(-)
       ---
   DIR diff --git a/blender-effect b/blender-effect
       @@ -26,6 +26,6 @@ ${BLENDER} --background \
                "${BLEND_DIR}/${NAME}.blend" \
                --python "${BLEND_DIR}/effect.py" \
                --render-output "${IMAGE_DIR}/${NAME}." \
       -        --render-frame \
       -        1 >&2 \
       +        --render-frame 1 \
       +        >&2 \
        && echo "${NAME}.0001.png"
   DIR diff --git a/modules/blender/.gitignore b/modules/blender/.gitignore
       @@ -1 +1,2 @@
        *.blend
       +*.blend[0-9]
   DIR diff --git a/modules/blender/effect.py b/modules/blender/effect.py
       @@ -3,7 +3,7 @@
        # This is to be be called from blender itself (--python), and does not
        # need 'bpy' to be installed from pip. It will be executed after blender
        # is initialised and before the rendering begins.
       -
       +#
        # The camera can be changed in the blender file before hand, with a nice
        # default. The default camera will be used. The object original author
        # did probably do it already.
       @@ -11,32 +11,40 @@
        import bpy
        import os
        
       -# all transformations will be done on the active object (orange in the GUI)
       +def effect(fn):
       +    """
       +    add the function to a list of effects for calling an
       +    effect from ${EFFECT} environment variable
       +    """
       +    effect_list[fn.__name__] = fn
       +    def inner(kwargs):
       +        print(f"running effect {fn.name}({value})")
       +        return fn
       +    return inner
       +
       +effect_list = {}
        obj = bpy.context.active_object
       +vars = {}
        
       -def effect_translate(x=0, y=0, z=0):
       +@effect
       +def translate(x=0, y=0, z=0):
       +    """
       +    move an object on x, y, z axis
       +    """
            bpy.ops.transform.translate(value=(x, y, z))
        
       -def effect_shape_key(value=0):
       +@effect
       +def reshape(value=0):
            """
            Shape keys permits to adjust proportions of an object,
            the active shape key is going to be adjusted.
            """
       -    print(f"running effect shape_key with value={value}")
       -
            if obj.active_shape_key.value == None:
                raise Exception("there must be a shape key added in the blend file first, you can use the GUI")
       -
            obj.active_shape_key.value = value
        
       -# the below is used because we only can communicate with the shell script
       -# through environment variables
       -
       -# grab all ${var_...} and turn it into python parameters
       -vars = {}
       +# out of environment variables, call $EFFECT($var_...)
        for k, v in os.environ.items():
            if k.startswith("var_"):
                vars[k[4:]] = float(v)
       -
       -# call function depending on ${EFFECT} variable, and dispatch vars arguments
       -locals()["effect_" + os.environ["EFFECT"]](**vars)
       +effect_list[os.environ["EFFECT"]](**vars)