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)