| 1 | 
greg | 
1.1 | 
#!/bin/csh -f | 
| 2 | 
greg | 
2.3 | 
# RCSid: $Id: genpine.csh,v 2.2 2003/02/22 02:07:23 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 | 
  | 
  | 
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 |