add a 3d shape-key effect command (initial version) - 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 1a4411fb8d73e77aa3a4cc06504275cfe5fb9343 DIR parent 3524a992d47d9aa4016c82fd2bb5a7a85e86b9dc HTML 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)