orig/genpine.csh
changeset 0 0aa115157c9c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/orig/genpine.csh	Sat Apr 09 17:55:16 2011 +0100
@@ -0,0 +1,127 @@
+#!/bin/csh -f
+# RCSid: $Id: genpine.csh,v 2.4 2011/01/24 04:28:06 greg Exp $
+#
+# Generate a tree
+# Pine version 2
+#
+# First send header and parse arguments
+#
+onintr done
+echo \# $0 $*
+set nleaves=150
+set nlevels=4
+set aspect=1.2
+unset needles
+while ($#argv > 0)
+	switch ($argv[1])
+	case -r:
+		shift argv
+		set nlevels=$argv[1]
+		breaksw
+	case -n:
+		shift argv
+		set nleaves=$argv[1]
+		breaksw
+	case -o:
+		shift argv
+		set needles=$argv[1]
+		breaksw
+	case -a:
+		shift argv
+		set aspect=$argv[1]
+		breaksw
+	default:
+		echo bad option $argv[1]
+		exit 1
+	endsw
+	shift argv
+end
+#
+#  Send materials
+#
+cat << _EOF_
+
+void plastic bark_mat
+0
+0
+5 .6 .5 .45 0 0
+
+void plastic leaf_mat
+0
+0
+5 .11 .36 .025 0 0
+_EOF_
+#
+# Next start seedling
+#
+set tree=/tmp/t$$
+set oldtree=/tmp/ot$$
+set thisrad=.035
+cat << _EOF_ > $tree
+
+void colorpict bark_pat
+9 red green blue pinebark.hdr cyl.cal cyl_match_u cyl_match_v -s $thisrad
+0
+2 1.5225225 1
+
+bark_pat alias my_bark_mat bark_mat
+
+my_bark_mat cone top
+0
+0
+8
+	0	0	0
+	0	0	1
+	$thisrad	.02
+
+my_bark_mat sphere tip
+0
+0
+4	0	0	1	.02
+_EOF_
+if ( ! $?needles ) set needles=n.$nleaves.oct
+if ( ! -f $needles ) then
+oconv -f "\!cnt $nleaves | rcalc -e nl=$nleaves -o needle.fmt" > $needles
+endif
+echo leaf_mat instance needles 1 $needles 0 0 >> $tree
+#
+# Now grow tree:
+#
+#	1) Save oldtree
+#	2) Move tree up and extend trunk
+#	3) Duplicate oldtree at branch positions
+#	4) Repeat
+#
+@ i=0
+while ($i < $nlevels)
+	mv -f $tree $oldtree
+	set lastrad=$thisrad
+	set move=`ev "(2*$aspect)^($i+1)"`
+	set thisrad=`ev "$lastrad+$move*.015"`
+	xform -ry `ev "25/($i+1)"` -t 0 0 $move $oldtree > $tree
+	echo void colorpict bark_pat 9 red green blue pinebark.hdr \
+			cyl.cal cyl_match_u cyl_match_v -s $thisrad >> $tree
+	echo 0 2 1.5225225 1 bark_pat alias my_bark_mat bark_mat >> $tree
+	echo my_bark_mat cone level$i 0 0 8 0 0 0 0 0 \
+			$move $thisrad $lastrad >> $tree
+	set spin=(`ev "rand($i)*360" "rand($i+$nlevels)*360" "rand($i+2*$nlevels)*360" "rand($i+3*$nlevels)*360" "rand($i+4*$nlevels)*360" "rand($i+5*$nlevels)*360" "rand($i+6*$nlevels)*360"`)
+	xform -n b1 -s 1.1 -rz $spin[2] -ry -80 -rz $spin[1] -rz 5 -t 0 0 \
+		`ev "$move*.42"` $oldtree >> $tree
+	xform -n b2 -s 1.1 -rz $spin[3] -ry -78 -rz $spin[1] -rz 128 -t 0 0 \
+		`ev "$move*.44"` $oldtree >> $tree
+	xform -n b3 -s 1.1 -rz $spin[4] -ry -75 -rz $spin[1] -rz 255 -t 0 0 \
+		`ev "$move*.40"` $oldtree >> $tree
+	xform -n b4 -rz $spin[5] -ry -80 -rz $spin[1] -rz 58 -t 0 0 \
+		`ev "$move*.92"` $oldtree >> $tree
+	xform -n b5 -rz $spin[6] -ry -78 -rz $spin[1] -rz 181 -t 0 0 \
+		`ev "$move*.84"` $oldtree >> $tree
+	xform -n b6 -rz $spin[7] -ry -75 -rz $spin[1] -rz 297 -t 0 0 \
+		`ev "$move*.88"` $oldtree >> $tree
+	@ i++
+end
+#
+# Send final tree
+#
+cat $tree
+done:
+rm -f $tree $oldtree