| 1 |
#!/bin/csh -f
|
| 2 |
# RCSid: $Id$
|
| 3 |
#
|
| 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 |
set tree=/usr/tmp/t$$
|
| 58 |
set oldtree=/usr/tmp/ot$$
|
| 59 |
set thisrad=.035
|
| 60 |
cat << _EOF_ > $tree
|
| 61 |
|
| 62 |
void colorpict bark_pat
|
| 63 |
9 red green blue pinebark.pic cyl.cal cyl_match_u cyl_match_v -s $thisrad
|
| 64 |
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 |
echo void colorpict bark_pat 9 red green blue pinebark.pic \
|
| 103 |
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
|