| 1 |
greg |
1.1 |
#!/bin/csh -f
|
| 2 |
greg |
2.4 |
# RCSid: $Id: genpine.csh,v 2.3 2005/02/16 05:40:11 greg Exp $
|
| 3 |
greg |
1.1 |
#
|
| 4 |
|
|
# Generate a tree
|
| 5 |
|
|
# Pine version 2
|
| 6 |
|
|
#
|
| 7 |
|
|
# First send header and parse arguments
|
| 8 |
|
|
#
|
| 9 |
|
|
onintr done
|
| 10 |
|
|
echo \# $0 $*
|
| 11 |
|
|
set nleaves=150
|
| 12 |
|
|
set nlevels=4
|
| 13 |
|
|
set aspect=1.2
|
| 14 |
|
|
unset needles
|
| 15 |
|
|
while ($#argv > 0)
|
| 16 |
|
|
switch ($argv[1])
|
| 17 |
|
|
case -r:
|
| 18 |
|
|
shift argv
|
| 19 |
|
|
set nlevels=$argv[1]
|
| 20 |
|
|
breaksw
|
| 21 |
|
|
case -n:
|
| 22 |
|
|
shift argv
|
| 23 |
|
|
set nleaves=$argv[1]
|
| 24 |
|
|
breaksw
|
| 25 |
|
|
case -o:
|
| 26 |
|
|
shift argv
|
| 27 |
|
|
set needles=$argv[1]
|
| 28 |
|
|
breaksw
|
| 29 |
|
|
case -a:
|
| 30 |
|
|
shift argv
|
| 31 |
|
|
set aspect=$argv[1]
|
| 32 |
|
|
breaksw
|
| 33 |
|
|
default:
|
| 34 |
|
|
echo bad option $argv[1]
|
| 35 |
|
|
exit 1
|
| 36 |
|
|
endsw
|
| 37 |
|
|
shift argv
|
| 38 |
|
|
end
|
| 39 |
|
|
#
|
| 40 |
|
|
# Send materials
|
| 41 |
|
|
#
|
| 42 |
|
|
cat << _EOF_
|
| 43 |
|
|
|
| 44 |
|
|
void plastic bark_mat
|
| 45 |
|
|
0
|
| 46 |
|
|
0
|
| 47 |
|
|
5 .6 .5 .45 0 0
|
| 48 |
|
|
|
| 49 |
|
|
void plastic leaf_mat
|
| 50 |
|
|
0
|
| 51 |
|
|
0
|
| 52 |
|
|
5 .11 .36 .025 0 0
|
| 53 |
|
|
_EOF_
|
| 54 |
|
|
#
|
| 55 |
|
|
# Next start seedling
|
| 56 |
|
|
#
|
| 57 |
greg |
2.3 |
set tree=/tmp/t$$
|
| 58 |
|
|
set oldtree=/tmp/ot$$
|
| 59 |
greg |
1.1 |
set thisrad=.035
|
| 60 |
|
|
cat << _EOF_ > $tree
|
| 61 |
|
|
|
| 62 |
|
|
void colorpict bark_pat
|
| 63 |
greg |
2.4 |
9 red green blue pinebark.hdr cyl.cal cyl_match_u cyl_match_v -s $thisrad
|
| 64 |
greg |
1.1 |
0
|
| 65 |
|
|
2 1.5225225 1
|
| 66 |
|
|
|
| 67 |
|
|
bark_pat alias my_bark_mat bark_mat
|
| 68 |
|
|
|
| 69 |
|
|
my_bark_mat cone top
|
| 70 |
|
|
0
|
| 71 |
|
|
0
|
| 72 |
|
|
8
|
| 73 |
|
|
0 0 0
|
| 74 |
|
|
0 0 1
|
| 75 |
|
|
$thisrad .02
|
| 76 |
|
|
|
| 77 |
|
|
my_bark_mat sphere tip
|
| 78 |
|
|
0
|
| 79 |
|
|
0
|
| 80 |
|
|
4 0 0 1 .02
|
| 81 |
|
|
_EOF_
|
| 82 |
|
|
if ( ! $?needles ) set needles=n.$nleaves.oct
|
| 83 |
|
|
if ( ! -f $needles ) then
|
| 84 |
|
|
oconv -f "\!cnt $nleaves | rcalc -e nl=$nleaves -o needle.fmt" > $needles
|
| 85 |
|
|
endif
|
| 86 |
|
|
echo leaf_mat instance needles 1 $needles 0 0 >> $tree
|
| 87 |
|
|
#
|
| 88 |
|
|
# Now grow tree:
|
| 89 |
|
|
#
|
| 90 |
|
|
# 1) Save oldtree
|
| 91 |
|
|
# 2) Move tree up and extend trunk
|
| 92 |
|
|
# 3) Duplicate oldtree at branch positions
|
| 93 |
|
|
# 4) Repeat
|
| 94 |
|
|
#
|
| 95 |
|
|
@ i=0
|
| 96 |
|
|
while ($i < $nlevels)
|
| 97 |
|
|
mv -f $tree $oldtree
|
| 98 |
|
|
set lastrad=$thisrad
|
| 99 |
|
|
set move=`ev "(2*$aspect)^($i+1)"`
|
| 100 |
|
|
set thisrad=`ev "$lastrad+$move*.015"`
|
| 101 |
|
|
xform -ry `ev "25/($i+1)"` -t 0 0 $move $oldtree > $tree
|
| 102 |
greg |
2.4 |
echo void colorpict bark_pat 9 red green blue pinebark.hdr \
|
| 103 |
greg |
1.1 |
cyl.cal cyl_match_u cyl_match_v -s $thisrad >> $tree
|
| 104 |
|
|
echo 0 2 1.5225225 1 bark_pat alias my_bark_mat bark_mat >> $tree
|
| 105 |
|
|
echo my_bark_mat cone level$i 0 0 8 0 0 0 0 0 \
|
| 106 |
|
|
$move $thisrad $lastrad >> $tree
|
| 107 |
|
|
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"`)
|
| 108 |
|
|
xform -n b1 -s 1.1 -rz $spin[2] -ry -80 -rz $spin[1] -rz 5 -t 0 0 \
|
| 109 |
|
|
`ev "$move*.42"` $oldtree >> $tree
|
| 110 |
|
|
xform -n b2 -s 1.1 -rz $spin[3] -ry -78 -rz $spin[1] -rz 128 -t 0 0 \
|
| 111 |
|
|
`ev "$move*.44"` $oldtree >> $tree
|
| 112 |
|
|
xform -n b3 -s 1.1 -rz $spin[4] -ry -75 -rz $spin[1] -rz 255 -t 0 0 \
|
| 113 |
|
|
`ev "$move*.40"` $oldtree >> $tree
|
| 114 |
|
|
xform -n b4 -rz $spin[5] -ry -80 -rz $spin[1] -rz 58 -t 0 0 \
|
| 115 |
|
|
`ev "$move*.92"` $oldtree >> $tree
|
| 116 |
|
|
xform -n b5 -rz $spin[6] -ry -78 -rz $spin[1] -rz 181 -t 0 0 \
|
| 117 |
|
|
`ev "$move*.84"` $oldtree >> $tree
|
| 118 |
|
|
xform -n b6 -rz $spin[7] -ry -75 -rz $spin[1] -rz 297 -t 0 0 \
|
| 119 |
|
|
`ev "$move*.88"` $oldtree >> $tree
|
| 120 |
|
|
@ i++
|
| 121 |
|
|
end
|
| 122 |
|
|
#
|
| 123 |
|
|
# Send final tree
|
| 124 |
|
|
#
|
| 125 |
|
|
cat $tree
|
| 126 |
|
|
done:
|
| 127 |
|
|
rm -f $tree $oldtree
|