povray/unix/scripts/allanim.sh
2013-11-06 13:07:19 -05:00

216 lines
6.6 KiB
Bash
Executable file

#!/bin/sh
# ==============================================================================
# POV-Ray 3.7
# allanim.sh - render all POV-Ray sample animations
# ==============================================================================
# written November 2003 - January 2004 by Christoph Hormann
# This file is part of POV-Ray and subject to the POV-Ray licence
# see POVLEGAL.DOC for details.
# ------------------------------------------------------------------------------
# calling conventions:
#
# allanim.sh [log] [-d scene_directory] [-o output_directory] [-h html_file]
#
# output_directory: if specified all images are written to this directory
# if not specified the images are written into the scene
# file directories, if these are not writable they are
# written in the current directory.
# log: log all text output of POV-Ray to a file (log.txt)
# scene_directory: if specified the sample scene in this directory are rendered,
# otherwise the scene directory is determined form the main
# povray ini file (usually /usr/local/share/povray-3.7/scenes).
# html_file: if specified a HTML file with links to the rendered
# animations is written.
# ==============================================================================
# test mode
#SCENE_DIR=.
VERSION=3.7
VER_DIR=povray-$VERSION
DEFAULT_DIR=/usr/local
SYSCONFDIR=$DEFAULT_DIR/etc
install_dir()
{
if [ -z "$POVINI" ] ; then
test -f "$SYSCONFDIR/povray.ini" && POVINI="$SYSCONFDIR/povray.ini"
test -f "$HOME/.povrayrc" && POVINI="$HOME/.povrayrc"
test -f "$SYSCONFDIR/povray/$VERSION/povray.ini" && POVINI="$SYSCONFDIR/povray/$VERSION/povray.ini"
test -f "$HOME/.povray/$VERSION/povray.ini" && POVINI="$HOME/.povray/$VERSION/povray.ini"
fi
if [ ! -z "$POVINI" ] ; then
# this is not a completely failsafe method but it should work in most cases
INSTALL_DIR=`grep -E -i "^library_path=.*share/$VER_DIR" "$POVINI" | head -n 1 | sed "s?[^=]*=\"*??;s?/share/$VER_DIR.*??"`
echo "$INSTALL_DIR"
fi
}
OPTIONS="$1 $2 $3 $4 $5 $6 $7"
case "$OPTIONS" in
*log* | *LOG* | *Log* )
DATE=`date`
LOG_FILE="log.txt"
echo "log file for POV-Ray $VERSION sample scene render $DATE" > "$LOG_FILE"
;;
esac
test "$1" = "-d" && SCENE_DIR="$2"
test "$2" = "-d" && SCENE_DIR="$3"
test "$3" = "-d" && SCENE_DIR="$4"
test "$4" = "-d" && SCENE_DIR="$5"
test "$5" = "-d" && SCENE_DIR="$6"
test "$6" = "-d" && SCENE_DIR="$7"
if [ -z "$SCENE_DIR" ] ; then
INSTALL_DIR="`install_dir`"
if [ -z "$INSTALL_DIR" ] ; then
echo "------------------------------------------------------"
echo " the sample scene render script could not determine"
echo " the location where POV-Ray is installed. Make sure"
echo " POV-Ray $VERSION has been correctly installed on this"
echo " computer. If you continue the script will try to"
echo " the scenes from the current directory."
echo ""
read -p "Press CTRL-C to abort or any other key to continue " -n 1
echo "------------------------------------------------------"
SCENE_DIR=.
else
SCENE_DIR="$INSTALL_DIR/share/$VER_DIR/scenes"
fi
fi
if [ ! -d "$SCENE_DIR" ] ; then
echo "------------------------------------------------------"
echo " Your POV-Ray installation seems to be defective"
echo " so this script does not work."
echo " Try reinstalling POV-Ray."
echo "------------------------------------------------------"
read
exit
fi
test "$1" = "-o" && OUTPUT_DIR="$2"
test "$2" = "-o" && OUTPUT_DIR="$3"
test "$3" = "-o" && OUTPUT_DIR="$4"
test "$4" = "-o" && OUTPUT_DIR="$5"
test "$5" = "-o" && OUTPUT_DIR="$6"
test "$6" = "-o" && OUTPUT_DIR="$7"
if [ -z "$OUTPUT_DIR" ] ; then
if [ ! -w "$SCENE_DIR" ] ; then
OUTPUT_DIR=.
fi
fi
if [ ! -d "$OUTPUT_DIR" ] ; then
mkdir -p "$OUTPUT_DIR"
fi
SCRIPT_DIR=`dirname "$0"`
FILE_LIST=`find "$SCENE_DIR" -path "*animations*" -name "*.pov" | sort`
if [ -z "$LOG_FILE" ] ; then
echo "$FILE_LIST" | xargs -n 1 "$SCRIPT_DIR/render_anim.sh" "$OUTPUT_DIR"
else
echo "$FILE_LIST" | xargs -n 1 "$SCRIPT_DIR/render_anim.sh" "$OUTPUT_DIR" 2>&1 | tee -a "$LOG_FILE"
fi
# -- HTML file --
HTML_FILE=
test "$1" = "-h" && HTML_FILE="$2"
test "$2" = "-h" && HTML_FILE="$3"
test "$3" = "-h" && HTML_FILE="$4"
test "$4" = "-h" && HTML_FILE="$5"
test "$5" = "-h" && HTML_FILE="$6"
test "$6" = "-h" && HTML_FILE="$7"
if [ ! -z "$HTML_FILE" ] ; then
CONVERT=`which convert`
FILE_LIST2=`echo "$FILE_LIST" | sort | xargs`
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>
<head>
<title>POV-Ray $VERSION sample scenes - animations</title>
<style type=\"text/css\">
<!--
body
{
font-family: Verdana, Arial, Helvetica, sans-serif ;
text-align: justify ;
background-color: #ffffff ;
}
h1 { background-color: #fff0e8 ; border-color: #f0e0c0 ; color: #2040c0 }
h2 { background-color: #ffe8d0 ; border-color: #f0d0c0 ; color: #2040c0 }
h3 { background-color: #ffe4c0 ; border-color: #f0d0a0 ; color: #2040c0 }
h4 { background-color: #ffdcc0 ; border-color: #f0d0b0 ; color: #2040c0 }
h5 { background-color: #ffdaca ; border-color: #f0ccb0 ; color: #000000 }
.small { font-size:8pt; }
table { font-size:8pt; }
td { font-size:8pt; background-color: #f0f0ff ; }
th { background-color: #ffcc99 ; }
-->
</style>
</head>
<body>
<h2>POV-Ray $VERSION sample scenes - animations</h2>
<p><em>written `date` by POV-Ray $VERSION sample animations render script (allanim.sh)</em></p>
<hr>
<h3>scenes from $SCENE_DIR:</h3>
<table>
<tr>
<th>Scene file</th>
<th>Render</th>
</tr>" > "$HTML_FILE"
for POV_FILE in $FILE_LIST2 ; do
POV_NAME=`echo "$POV_FILE" | sed "s?$SCENE_DIR/??g"`
FILE_BASE=`basename $POV_FILE .pov`
echo " <tr>
<td><a href=\"file:${POV_FILE}\">${POV_NAME}</a></td>" >> "$HTML_FILE"
if [ -f "$OUTPUT_DIR/$FILE_BASE.mpg" ] ; then
echo " <td><a href=\"file:$OUTPUT_DIR/$FILE_BASE.mpg\">$FILE_BASE.mpg</a></td>" >> "$HTML_FILE"
else
PNG_LIST=`find "$OUTPUT_DIR" -regex "${OUTPUT_DIR}/${FILE_BASE}[0123456789]+.png" | sort | xargs`
PNG_LINKS=
for PNG_FILE in $PNG_LIST ; do
PNG_BASE=`basename $PNG_FILE`
PNG_LINKS="$PNG_LINKS <a href=\"file:$PNG_FILE\">${PNG_BASE}</a>"
done
if [ -z "$PNG_LINKS" ] ; then
echo " <td>--</td>" >> "$HTML_FILE"
else
echo " <td>$PNG_LINKS</td>" >> "$HTML_FILE"
fi
fi
echo " </tr>" >> "$HTML_FILE"
done
echo "</table>
</body>
</html>" >> "$HTML_FILE"
fi
test -f "bounce.txt" && rm -f "bounce.txt"
test -f "lifedata.inc" && rm -f "lifedata.inc"