pre-bemis
This commit is contained in:
91
rpi-case/.claude/skills/openscad/tools/render-with-params.sh
Executable file
91
rpi-case/.claude/skills/openscad/tools/render-with-params.sh
Executable file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
# Render OpenSCAD with parameters from a JSON file
|
||||
# Usage: render-with-params.sh input.scad params.json output.stl|output.png
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
source "$SCRIPT_DIR/common.sh"
|
||||
|
||||
check_openscad
|
||||
|
||||
if [ $# -lt 3 ]; then
|
||||
echo "Usage: $0 input.scad params.json output.[stl|png]"
|
||||
echo ""
|
||||
echo "params.json format:"
|
||||
echo ' {"width": 60, "height": 40, "include_lid": true}'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
INPUT="$1"
|
||||
PARAMS_FILE="$2"
|
||||
OUTPUT="$3"
|
||||
|
||||
if [ ! -f "$INPUT" ]; then
|
||||
echo "Error: Input file not found: $INPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$PARAMS_FILE" ]; then
|
||||
echo "Error: Params file not found: $PARAMS_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build -D arguments from JSON
|
||||
DEFINES=()
|
||||
while IFS= read -r line; do
|
||||
# Parse each key-value pair
|
||||
key=$(echo "$line" | cut -d'=' -f1)
|
||||
value=$(echo "$line" | cut -d'=' -f2-)
|
||||
|
||||
if [ -n "$key" ]; then
|
||||
DEFINES+=("-D" "$key=$value")
|
||||
fi
|
||||
done < <(
|
||||
# Use python or jq to parse JSON to key=value lines
|
||||
if command -v python3 &> /dev/null; then
|
||||
python3 -c "
|
||||
import json
|
||||
with open('$PARAMS_FILE') as f:
|
||||
params = json.load(f)
|
||||
for k, v in params.items():
|
||||
if isinstance(v, bool):
|
||||
print(f'{k}={str(v).lower()}')
|
||||
elif isinstance(v, str):
|
||||
print(f'{k}=\"{v}\"')
|
||||
else:
|
||||
print(f'{k}={v}')
|
||||
"
|
||||
elif command -v jq &> /dev/null; then
|
||||
jq -r 'to_entries | .[] | "\(.key)=\(.value)"' "$PARAMS_FILE"
|
||||
else
|
||||
echo "Error: Requires python3 or jq to parse JSON"
|
||||
exit 1
|
||||
fi
|
||||
)
|
||||
|
||||
echo "Rendering with parameters from: $PARAMS_FILE"
|
||||
echo "Parameters: ${DEFINES[*]}"
|
||||
|
||||
# Determine output type and set appropriate options
|
||||
EXT="${OUTPUT##*.}"
|
||||
case "$EXT" in
|
||||
stl|STL)
|
||||
$OPENSCAD "${DEFINES[@]}" -o "$OUTPUT" "$INPUT"
|
||||
;;
|
||||
png|PNG)
|
||||
$OPENSCAD "${DEFINES[@]}" \
|
||||
--camera="0,0,0,55,0,25,0" \
|
||||
--imgsize="800,600" \
|
||||
--colorscheme="Tomorrow Night" \
|
||||
--autocenter --viewall \
|
||||
-o "$OUTPUT" "$INPUT"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported output format: $EXT"
|
||||
echo "Supported: stl, png"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Output saved: $OUTPUT"
|
||||
Reference in New Issue
Block a user