1 |
greg |
1.1 |
#!/bin/csh -f |
2 |
|
|
# SCCSid "$Id$ LBL" |
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 |