add a 3d shape-key effect command (initial version) - annna - Annna the nice friendly bot.
(HTM) git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
(DIR) commit 1a4411fb8d73e77aa3a4cc06504275cfe5fb9343
(DIR) parent 3524a992d47d9aa4016c82fd2bb5a7a85e86b9dc
(HTM) Author: Josuah Demangeon <me@josuah.net>
Date: Sun, 31 Jul 2022 14:31:45 +0200
add a 3d shape-key effect command (initial version)
Signed-off-by: Annna Robert-Houdin <annna@bitreich.org>
Diffstat:
M annna-message-common | 5 +++++
A blender-effect | 30 ++++++++++++++++++++++++++++++
A modules/blender/.gitignore | 1 +
A modules/blender/effect.py | 42 +++++++++++++++++++++++++++++++
4 files changed, 78 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/annna-message-common b/annna-message-common
@@ -924,6 +924,11 @@ case "${text}" in
} &
exit 0
;;
+"${botname}, please 3d "*)
+ args=$(echo ${text} | cut -d' ' -f 4-)
+ outfile=$(blender-effect $args)
+ annna-say -s "${server}" -c "${channel}" "${user}, gopher://bitreich.org/I/memecache/3d/${outfile}"
+ ;;
"${botname}, please simulate "*" simulator"*)
q="${text#* please simulate }"
q="${q% simulator*}"
(DIR) diff --git a/blender-effect b/blender-effect
@@ -0,0 +1,30 @@
+#!/bin/sh
+# https://docs.blender.org/manual/en/latest/advanced/command_line/render.html
+
+if [ "$#" -lt 2 ]
+then
+ printf 'usage: %s effect-name model-name [param=value]\n' "${0##*/}" >&2
+ exit 1
+fi
+
+export EFFECT="$1"
+export NAME="$2"
+shift 2
+
+BLENDER=blender
+BLEND_DIR="$(dirname "$0")/modules/blender"
+IMAGE_DIR=/bitreich/gopher/memecache/3d
+
+# turn "key1=value key2=value key3=value" into variables used by blender-effect.py
+for x in "$@"
+do
+ export "var_$1"
+done
+
+${BLENDER} --background \
+ "${BLEND_DIR}/${NAME}.blend" \
+ --python "${BLEND_DIR}/effect.py" \
+ --render-output "${IMAGE_DIR}/${NAME}." \
+ --render-frame \
+ 1 >&2 \
+&& echo "${NAME}.0001.png"
(DIR) diff --git a/modules/blender/.gitignore b/modules/blender/.gitignore
@@ -0,0 +1 @@
+*.blend
(DIR) diff --git a/modules/blender/effect.py b/modules/blender/effect.py
@@ -0,0 +1,42 @@
+# https://docs.blender.org/api/current/index.html
+#
+# 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.
+
+import bpy
+import os
+
+# all transformations will be done on the active object (orange in the GUI)
+obj = bpy.context.active_object
+
+def effect_translate(x=0, y=0, z=0):
+ bpy.ops.transform.translate(value=(x, y, z))
+
+def effect_shape_key(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 = {}
+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)