# HG changeset patch # User Axel Jacobs # Date 1302368116 -3600 # Node ID 0aa115157c9c1ede83174089c78323298c33894e Added original CSH script from HEAD-20110409. diff -r 000000000000 -r 0aa115157c9c orig/anim.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/anim.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,18 @@ +#!/bin/csh + +set tempfile=/usr/tmp/pict.$$ +set destfile=~/ray/spool/anim/model +set sunrise=6 +set sunset=18 +set nframes=12 +set i=0 +while ($i < $nframes) + oconv -i model.dark.oct "\!gensky 6 17 `ev $sunrise+\($sunset-$sunrise\)\*$i/$nframes` | xform -rz -90 -rx -90" skywindow \ + | rpict -vp 8 36 -27 -vd -.56 -.23 .79 -vu 0 1 0 -vh 39.9 -vv 27.5 \ + -x 300 -y 203 -ps 1 -ab 1 -ad 32 -ar 64 -ds .5 \ + -t 3600 -e model.day.err \ + | pfilt -1 -x 300 -y 203 -e 1.5 > $tempfile + ra_pr $tempfile $destfile.$i + rm $tempfile + @ i++ +end diff -r 000000000000 -r 0aa115157c9c orig/anim2.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/anim2.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,16 @@ +#!/bin/csh + +set tempfile=/usr/tmp/pict.$$ +set destdir=/usr2/greg/ras/anim/model2 +set nframes=$1 +mkdir $destdir +set i=0 +while ($i < $nframes) + set view=(`ev $i/$nframes\*6.28 | rcalc -f anim2.cal`) + rpict -vp $view[1-3] -vd $view[4-6] -vu 0 1 0 -vh 38 -vv 30 \ + -x 512 -y 400 -t 3600 -e anim2.err model.oct \ + | pfilt -1 -x 512 -y 400 -e -2 > $tempfile + ra_pr $tempfile $destdir/$i + rm $tempfile + @ i++ +end diff -r 000000000000 -r 0aa115157c9c orig/colorcal.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/colorcal.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,38 @@ +#!/bin/csh -f +# RCSid: $Id: colorcal.csh,v 1.1 2003/02/22 02:07:21 greg Exp $ +# +# Compute CIE chromaticities from spectral reflectance data +# +if ( $#argv < 1 ) goto userr +set cal = . +if ( $argv[1] == "-i" ) then + if ( $#argv < 3 ) goto userr + shift argv + set illum=$argv[1] + shift argv + foreach r ( $argv[*] ) + tabfunc -i rf < $r > /tmp/rf$$.cal + rcalc -f $cal/cieresp.cal -f /tmp/rf$$.cal \ + -e 'r=rf($1);ty=$2*triy($1)' \ + -e '$1=ty;$2=$2*r*trix($1);$3=r*ty' \ + -e '$4=$2*r*triz($1)' \ + -e 'cond=if($1-359,831-$1,-1)' \ + $illum | total -m >> /tmp/rc$$.dat + end + rm -f /tmp/rf$$.cal +else + foreach r ( $argv[*] ) + rcalc -f $cal/cieresp.cal -e 'ty=triy($1);$1=ty' \ + -e '$2=$2*trix($1);$3=$2*ty;$4=$2*triz($1)' \ + -e 'cond=if($1-359,831-$1,-1)' $r \ + | total -m >> /tmp/rc$$.dat + end +endif +rcalc -e 'X=$2/$1;Y=$3/$1;Z=$4/$1' \ + -e 'x=X/(X+Y+Z);y=Y/(X+Y+Z);u=4*X/(X+15*Y+3*Z);v=9*Y/(X+15*Y+3*Z)' \ + -o $cal/color.fmt /tmp/rc$$.dat +rm -f /tmp/rc$$.dat +exit 0 +userr: +echo "Usage: $0 [-i illum.dat] refl.dat .." +exit 1 diff -r 000000000000 -r 0aa115157c9c orig/compamb.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/compamb.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,47 @@ +#!/bin/csh -f +# RCSid: $Id: compamb.csh,v 3.7 2008/08/25 04:50:32 greg Exp $ +# +# Compute best ambient value for a scene and append to rad input file +# +while ( $#argv > 1 ) + switch ( $argv[1] ) + case -e: + set doexpos + breaksw + case -c: + set docolor + breaksw + default: + goto userr + endsw + shift argv +end +userr: +if ( $#argv != 1 ) then + echo Usage: $0 [-e][-c] rad_input_file + exit 1 +endif +onintr quit +set td=`mktemp -d /tmp/ca.XXXXXX` +set tf=$td/compamb +set oct=`rad -w -s -e -v 0 $argv[1] QUA=High AMB=$tf.amb OPT=$tf.opt | sed -n 's/^OCTREE= //p'` +rad -n -s -V $argv[1] \ + | rpict @$tf.opt -av 0 0 0 -aw 16 -dv- -S 1 -x 16 -y 16 -ps 1 $oct \ + | ra_rgbe - '\!pvalue -h -H -d' > $tf.dat +echo \# Rad input file modified by $0 `date` >> $argv[1] +if ( $?doexpos ) then + (echo -n 'EXPOSURE= '; \ + total -u $tf.dat | rcalc -e '$1=2/(.265*$1+.670*$2+.065*$3)') \ + >> $argv[1] +endif +lookamb -h -d $tf.amb | rcalc -e '$1=$10;$2=$11;$3=$12' >> $tf.dat +set lavg=`rcalc -e '$1=lum;lum=.265*$1+.670*$2+.065*$3;cond=lum-1e-5' $tf.dat | total -m -p` +if ( $?docolor ) then + set cavg=(`total -m $tf.dat`) + set av=(`rcalc -n -e "r=$cavg[1];g=$cavg[2];b=$cavg[3];sf=$lavg/(.265*r+.670*g+.065*b)" -e '$1=sf*r;$2=sf*g;$3=sf*b'`) +else + set av=($lavg $lavg $lavg) +endif +echo "render= -av $av" >> $argv[1] +quit: +exec rm -r $td diff -r 000000000000 -r 0aa115157c9c orig/dayfact.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/dayfact.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,166 @@ +#!/bin/csh -f +# RCSid: $Id: dayfact.csh,v 2.9 2008/11/10 19:08:19 greg Exp $ +# +# Interactive script to calculate daylight factors +# +set nofile="none" +set illumpic=$nofile +set octree=$nofile +set dfpict=$nofile +set ilpict=$nofile +set dspict=$nofile +set nodaysav=1 +set fcopts=($*) +set designlvl=500 +set wporig=(0 0 0) +set wpsize=(1 1) +set rtargs=(-ab 1 -ad 256 -as 128 -aa .15 -av .3 .3 .3) +set maxres=128 +set td=`mktemp -d /tmp/df.XXXXXX` + +alias readvar 'echo -n Enter \!:1 "[$\!:1]: ";set ans="$<";if("$ans" != "")set \!:1="$ans"' + +cat <<_EOF_ + DAYLIGHT FACTOR CALCULATION + +This script calculates daylight factors, illuminance levels, and/or +energy savings due to daylight on a rectangular workplane and produces +a contour plot from the result. The input is a Radiance scene description +(and octree) and the output is one or more color Radiance pictures. + +_EOF_ +echo "Have you already calculated an illuminance picture using dayfact?" +readvar illumpic +if ( $illumpic != $nofile ) then + if ( ! -r $illumpic ) then + echo "Cannot read $illumpic" + exit 1 + endif + set title=$illumpic:r + set gotillumpic + goto getgenskyf +endif + +readvar octree +if ( $octree == $nofile || ! -f $octree ) then + echo "You must first create an octree with" + echo "oconv before running this script." + exit 1 +endif +set title="$octree:r" +echo -n "Is the z-axis your zenith direction? " +if ( "$<" !~ [yY]* ) then + echo "I'm sorry, you cannot use this script" + exit 1 +endif +echo "What is the origin (smallest x y z coordinates) of the workplane?" +readvar wporig +set wporig=($wporig) +echo "What is the x and y size (width and length) of the workplane?" +readvar wpsize +set wpsize=($wpsize) +set wpres=(`rcalc -n -e '$1=if(l,'"floor($maxres*$wpsize[1]/$wpsize[2]),$maxres);"'$2=if(l,'"$maxres,floor($maxres*$wpsize[2]/$wpsize[1]));l=$wpsize[2]-$wpsize[1]"`) +set rtargs=($rtargs -ar `getinfo -d<$octree|rcalc -e '$1=floor(16*$4/'"($wpsize[1]+$wpsize[2]))"`) +echo "What calculation options do you want to give to rtrace?" +echo "(It is very important to set the -a* options correctly.)" +readvar rtargs +echo "Do you want to save the illuminance picture for later runs?" +readvar illumpic +############ +getgenskyf: +set genskyf=$nofile +echo "In what scene file is the gensky command located?" +readvar genskyf +if ( $genskyf == $nofile ) then + echo "You will not be able to compute daylight factors" + echo "or energy savings since there is no gensky file." +else + xform -e $genskyf > $td/gsf + grep '^# gensky ' $td/gsf + if ( $status ) then + echo "The file $genskyf does not contain a gensky command\!" + rm -f $td/gsf + goto getgenskyf + endif + set title=$title\ `sed -n 's/^# gensky *\([0-9][0-9]* *[0-9][0-9]* *[0-9][0-9.]*\).*$/\1/p' $td/gsf` + set extamb=`sed -n 's/^# Ground ambient level: //p' $td/gsf` + grep -s '^# gensky .* -c' $td/gsf + set nodaysav=$status + rm -f $td/gsf + if ( $nodaysav ) then + echo "The gensky command was not done for an overcast sky" + echo "(-c option), so energy savings cannot be calculated." + echo -n "Continue anyway? " + if ( "$<" =~ [nN]* ) then + exit 0 + endif + endif +endif +echo "Illuminance contour picture if you want one" +readvar ilpict +if ( $?extamb ) then + echo "Daylight factor contour picture if you want one" + readvar dfpict +endif +if ( ! $nodaysav ) then + echo "Energy savings contour picture if you want one" + readvar dspict + if ( $dspict != $nofile ) then + echo "Workplane design level (lux)" + readvar designlvl + endif +endif +if ( $ilpict == $nofile && $dfpict == $nofile && $dspict == $nofile ) then + echo "Since you don't want any output, I guess we're done." + exit 0 +endif +echo "Title for output picture" +readvar title +set sctemp=$td/sc.csh +cat <<'_EOF_' > $sctemp +if ( $illumpic != $nofile ) then + set iltemp="" +else + set iltemp=$td/il.hdr + set illumpic=$iltemp +endif +set tltemp=$td/tl.hdr +set dstemp=$td/ds.hdr +set temp1=$td/tfa +echo "Your dayfact job is finished." +echo "Please check for error messages below." +echo "" +set echo +if ( ! $?gotillumpic ) then + cnt $wpres[2] $wpres[1] \ + | rcalc -e '$1=($2+.5)/'"$wpres[1]*$wpsize[1]+$wporig[1]" \ + -e '$2=(1-($1+.5)/'"$wpres[2])*$wpsize[2]+$wporig[2]" \ + -e '$3='"$wporig[3]" -e '$4=0;$5=0;$6=1' \ + | rtrace $rtargs -h+ -I+ -ov -fac -x $wpres[1] -y $wpres[2] $octree \ + > $temp1 + pfilt -h 20 -n 0 -x 300 -y 300 -p 1 -r 1 $temp1 > $illumpic +endif +set maxval=`getinfo < $illumpic | rcalc -i 'EXPOSURE=${e}' -e '$1=3/e'` +if ("$maxval" == "") set maxval=3 +psign -h 42 " $title " | pfilt -1 -x /2 -y /2 > $tltemp +'_EOF_' +if ( $ilpict != $nofile ) then + echo 'falsecolor -cb -l Lux -s "$maxval*179" \\ + $fcopts -m 179 -ip $illumpic \\ + | pcompos -a 1 - $tltemp > $ilpict' >> $sctemp +endif +if ( $dfpict != $nofile ) then + echo 'falsecolor -cb -l DF -s 16 \\ + $fcopts -m "100/PI/$extamb" -ip $illumpic \\ + | pcompos -a 1 - $tltemp > $dfpict' >> $sctemp +endif +if ( $dspict != $nofile ) then + echo 'pcomb -e "lo=1-$designlvl/20000*3.1416*$extamb/li(1)" \\ + -o $illumpic | falsecolor -cb -l "%Save" -s 100 \\ + $fcopts -m 100 -p $illumpic \\ + | pcompos -a 1 - $tltemp > $dspict' >> $sctemp +endif +echo 'rm -r $td' >> $sctemp +(source $sctemp) |& mail `whoami` & +echo "Your job is started in the background." +echo "You will be notified by mail when it is done." diff -r 000000000000 -r 0aa115157c9c orig/debugcal.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/debugcal.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,33 @@ +#!/bin/csh -f +# RCSid: $Id: debugcal.csh,v 2.6 2003/02/22 02:07:30 greg Exp $ +# +# Script to debug cal files for Radiance +# +# Takes octree and rcalc options as arguments. +# One of the rcalc options should be -f calfile. +# Note that the real arguments A1, A2, etc must also be given. +# Input is a ray origin and direction, such as that produced by ximage. +# +if ( $#argv < 2 ) then + echo "Usage: $0 octree [rcalc options]" + exit 1 +endif +if ( ! $?RAYPATH ) then + set RAYPATH=.:/usr/local/lib/ray +endif +set initfile= +foreach d (`echo $RAYPATH | sed 's/:/ /g'`) + if ( -r $d/rayinit.cal ) then + set initfile="-f $d/rayinit.cal" + break + endif +end + +rtrace -h- -x 1 -odNplL $1 | rcalc -u -e 'Dx=$1;Dy=$2;Dz=$3' \ + -e 'Nx=$4;Ny=$5;Nz=$6;Px=$7;Py=$8;Pz=$9' \ + -e 'T=$10;Ts=$11' -e 'S:1;Tx:0;Ty:0;Tz:0' \ + -e 'Ix:1;Iy:0;Iz:0;Jx:0;Jy:1;Jz:0;Kx:0;Ky:0;Kz:1' \ + -e 'Rdot=-Dx*Nx-Dy*Ny-Dz*Nz' -e 'RdotP=Rdot' \ + -e 'NxP=Nx;NyP=Ny;NzP=Nz' -e 'CrP=A1;CgP=A2;CbP=A3' \ + -e 'DxA:0;DyA:0;DzA:0' \ + $initfile $argv[2-]:q diff -r 000000000000 -r 0aa115157c9c orig/falsecolor.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/falsecolor.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,227 @@ +#!/bin/csh -fe +# RCSid: $Id: falsecolor.csh,v 2.19 2008/11/10 19:08:19 greg Exp $ +# +# Create false color image with legend +# +# Added user-definable legend 2004/01/20 Rob Guglielmetti + +onintr quit +set td=`mktemp -d /tmp/fc.XXXXXX` +set mult=179 +set label=Nits +set scale=1000 +set decades=0 +set redv='def_red(v)' +set grnv='def_grn(v)' +set bluv='def_blu(v)' +set ndivs=8 +set picture='-' +set cpict= +set loff=0 +set legwidth=100 +set legheight=200 +while ($#argv > 0) + switch ($argv[1]) + case -lw: + shift argv + set legwidth="$argv[1]" + breaksw + case -lh: + shift argv + set legheight="$argv[1]" + breaksw + case -m: + shift argv + set mult="$argv[1]" + breaksw + case -s: + shift argv + set scale="$argv[1]" + if ("$scale" =~ [aA]*) set needfile + breaksw + case -l: + shift argv + set label="$argv[1]" + breaksw + case -log: + shift argv + set decades=$argv[1] + breaksw + case -r: + shift argv + set redv="$argv[1]" + breaksw + case -g: + shift argv + set grnv="$argv[1]" + breaksw + case -b: + shift argv + set bluv="$argv[1]" + breaksw + case -spec: + set redv='1.6*v-.6' + set grnv='if(v-.375,1.6-1.6*v,8/3*v)' + set bluv='1-8/3*v' + breaksw + case -i: + shift argv + set picture="$argv[1]" + breaksw + case -p: + shift argv + set cpict="$argv[1]" + breaksw + case -ip: + case -pi: + shift argv + set picture="$argv[1]" + set cpict="$argv[1]" + breaksw + case -cl: + set docont=a + set loff=12 + breaksw + case -cb: + set docont=b + set loff=13 + breaksw + case -e: + set doextrem + set needfile + breaksw + case -n: + shift argv + set ndivs="$argv[1]" + breaksw + default: + echo bad option "'$argv[1]'" + exit 1 + endsw + shift argv +end +if ($?needfile && "$picture" == '-') then + cat > $td/picture + set picture=$td/picture +endif +if ("$scale" =~ [aA]*) then + set LogLmax=`phisto $picture | tail -2 | sed -n '1s/ [0-9]*$//p'` + set scale=`ev "$mult/179*10^$LogLmax"` +endif +cat > $td/pc0.cal <<_EOF_ +PI : 3.14159265358979323846 ; +scale : $scale ; +mult : $mult ; +ndivs : $ndivs ; + +or(a,b) : if(a,a,b); +EPS : 1e-7; +neq(a,b) : if(a-b-EPS,1,b-a-EPS); +btwn(a,x,b) : if(a-x,-1,b-x); +clip(x) : if(x-1,1,if(x,x,0)); +frac(x) : x - floor(x); +boundary(a,b) : neq(floor(ndivs*a+.5),floor(ndivs*b+.5)); + +interp_arr2(i,x,f):(i+1-x)*f(i)+(x-i)*f(i+1); +interp_arr(x,f):if(x-1,if(f(0)-x,interp_arr2(floor(x),x,f),f(f(0))),f(1)); +def_redp(i):select(i,0.18848,0.05468174, +0.00103547,8.311144e-08,7.449763e-06,0.0004390987,0.001367254, +0.003076,0.01376382,0.06170773,0.1739422,0.2881156,0.3299725, +0.3552663,0.372552,0.3921184,0.4363976,0.6102754,0.7757267, +0.9087369,1,1,0.9863); +def_red(x):interp_arr(x/0.0454545+1,def_redp); +def_grnp(i):select(i,0.0009766,2.35501e-05, +0.0008966244,0.0264977,0.1256843,0.2865799,0.4247083,0.4739468, +0.4402732,0.3671876,0.2629843,0.1725325,0.1206819,0.07316644, +0.03761026,0.01612362,0.004773749,6.830967e-06,0.00803605, +0.1008085,0.3106831,0.6447838,0.9707); +def_grn(x):interp_arr(x/0.0454545+1,def_grnp); +def_blup(i):select(i,0.2666,0.3638662,0.4770437, +0.5131397,0.5363797,0.5193677,0.4085123,0.1702815,0.05314236, +0.05194055,0.08564082,0.09881395,0.08324373,0.06072902, +0.0391076,0.02315354,0.01284458,0.005184709,0.001691774, +2.432735e-05,1.212949e-05,0.006659406,0.02539); +def_blu(x):interp_arr(x/0.0454545+1,def_blup); + +isconta = if(btwn(0,v,1),or(boundary(vleft,vright),boundary(vabove,vbelow)),-1); +iscontb = if(btwn(0,v,1),btwn(.4,frac(ndivs*v),.6),-1); + +ra = 0; +ga = 0; +ba = 0; + +in = 1; + +ro = if(in,clip($redv),ra); +go = if(in,clip($grnv),ga); +bo = if(in,clip($bluv),ba); +_EOF_ +cat > $td/pc1.cal <<_EOF_ +norm : mult/scale/le(1); + +v = map(li(1)*norm); + +vleft = map(li(1,-1,0)*norm); +vright = map(li(1,1,0)*norm); +vabove = map(li(1,0,1)*norm); +vbelow = map(li(1,0,-1)*norm); + +map(x) = x; + +ra = ri(nfiles); +ga = gi(nfiles); +ba = bi(nfiles); +_EOF_ +set pc0args=(-f $td/pc0.cal) +set pc1args=(-f $td/pc1.cal) +if ($?docont) then + set pc0args=($pc0args -e "in=iscont$docont") +endif +if ("$cpict" == "") then + set pc1args=($pc1args -e 'ra=0;ga=0;ba=0') +else if ("$cpict" == "$picture") then + set cpict= +endif +if ("$decades" != "0") then + set pc1args=($pc1args -e "map(x)=if(x-10^-$decades,log10(x)/$decades+1,0)") + set imap="imap(y)=10^((y-1)*$decades)" +else + set imap="imap(y)=y" +endif +if ( $legwidth > 20 && $legheight > 40 ) then +pcomb $pc0args -e 'v=(y+.5)/yres;vleft=v;vright=v' \ + -e 'vbelow=(y-.5)/yres;vabove=(y+1.5)/yres' \ + -x $legwidth -y $legheight > $td/scol.hdr +( echo "$label"; cnt $ndivs \ + | rcalc -e '$1='"($scale)*imap(($ndivs-.5-"'$1'")/$ndivs)" \ + -e "$imap" | sed -e 's/\(\.[0-9][0-9][0-9]\)[0-9]*/\1/' ) \ + | psign -s -.15 -cf 1 1 1 -cb 0 0 0 \ + -h `ev "floor($legheight/$ndivs+.5)"` > $td/slab.hdr +else + set legwidth=0 + set legheight=0 + (echo "" ; echo "-Y 1 +X 1" ; echo "aaa" ) > $td/scol.hdr + cp $td/scol.hdr $td/slab.hdr +endif +if ( $?doextrem ) then + pextrem -o $picture > $td/extrema + set minpos=`sed 2d $td/extrema | rcalc -e '$2=$2;$1=$1+'"$legwidth"` + set minval=`rcalc -e '$1=($3*.27+$4*.67+$5*.06)*'"$mult" $td/extrema | sed -e 2d -e 's/\(\.[0-9][0-9][0-9]\)[0-9]*/\1/'` + set maxpos=`sed 1d $td/extrema | rcalc -e '$2=$2;$1=$1+'"$legwidth"` + set maxval=`rcalc -e '$1=($3*.27+$4*.67+$5*.06)*'"$mult" $td/extrema | sed -e 1d -e 's/\(\.[0-9][0-9][0-9]\)[0-9]*/\1/'` + psign -s -.15 -a 2 -h 16 $minval > $td/minv.hdr + psign -s -.15 -a 2 -h 16 $maxval > $td/maxv.hdr + pcomb $pc0args $pc1args $picture $cpict \ + | pcompos $td/scol.hdr 0 0 \ + +t .1 "\!pcomb -e 'lo=1-gi(1)' $td/slab.hdr" \ + `ev 2 $loff-1` -t .5 $td/slab.hdr 0 $loff \ + - $legwidth 0 $td/minv.hdr $minpos $td/maxv.hdr $maxpos +else + pcomb $pc0args $pc1args $picture $cpict \ + | pcompos $td/scol.hdr 0 0 \ + +t .1 "\!pcomb -e 'lo=1-gi(1)' $td/slab.hdr" \ + `ev 2 $loff-1` -t .5 $td/slab.hdr 0 $loff \ + - $legwidth 0 +endif +quit: +rm -rf $td diff -r 000000000000 -r 0aa115157c9c orig/fieldcomb.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/fieldcomb.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,81 @@ +#!/bin/csh -f +# RCSid $Id: fieldcomb.csh,v 2.7 2008/11/10 19:08:19 greg Exp $ +# +# Combine alternate lines in full frames for field rendering +# +# Expects numbered frames on command line, as given by ranimate +# +# If an odd number of frames is provided, the spare frame at the +# end is linked to $spare_name for the next run +# +# Written by Greg Ward for Iebele Abel in August 2005 +# +set spare_name=spare_fieldcomb_frame.hdr +set odd_first=0 +while ($#argv > 1) + switch ($argv[1]) + case -r*: + set remove_orig + breaksw + case -o*: + set odd_first=1 + breaksw + case -e*: + set odd_first=0 + breaksw + case -f*: + shift argv + set outfile="$argv[1]" + breaksw + default: + if ("$argv[1]" !~ -*) break + echo "Unknown option: $argv[1]" + exit 1 + endsw + shift argv +end +if ($#argv < 2) then + echo "Usage: $0 [-e|-o][-r] [-f combined.hdr] field1.hdr field2.hdr .." + exit 1 +endif +if ($?outfile && $#argv > 2) then + echo "Cannot use -f option with more than two input files" + exit 1 +endif +set f1=$argv[1]:q +set ext=$f1:e +set basenm="`echo $f1:q | sed 's/[0-9]*\.'$ext'//'`" +set curfi=`echo $f1:q | sed 's/^[^1-9]*\(.[0-9]*\)\.'$ext'$/\1/'` +set fields=($argv[*]:q) +if (-r $spare_name) then + set fields=($spare_name $fields:q) + @ curfi-- +endif +@ curfr = $curfi / 2 +set curfi=1 +while ($curfi < $#fields) + @ nextfi = $curfi + 1 + if ($curfr < 10) then + set fid=000$curfr + else if ($curfr < 100) then + set fid=00$curfr + else if ($curfr < 1000) then + set fid=0$curfr + else + set fid=$curfr + endif + set outf="${basenm}C$fid.$ext" + if ($?outfile) then + set outf=$outfile:q + endif + pcomb -e 'ro=ri(fld); go=gi(fld); bo=bi(fld)' \ + -e 'yd=yres-1-y; odd=.5*yd-floor(.5*yd)-.25' \ + -e "fld=if(odd,2-$odd_first,1+$odd_first)" \ + $fields[$curfi]:q $fields[$nextfi]:q \ + > $outf:q + if ($?remove_orig) rm $fields[$curfi]:q $fields[$nextfi]:q + @ curfr++ + @ curfi = $nextfi + 1 +end +rm -f $spare_name +if ($curfi == $#fields) ln "${basenm}$curfi.$ext" $spare_name diff -r 000000000000 -r 0aa115157c9c orig/genambpos.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/genambpos.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,100 @@ +#!/bin/csh -f +# RCSid $Id: genambpos.csh,v 3.2 2004/05/17 16:35:14 greg Exp $ + +# Mark ambient locations +# +# John Mardaljevic +# Institute of Energy and Sustainable Development +# De Montfort University +# The Gateway +# Leicester +# LE1 9BH, UK +# +44 (0) 116 257 7972 +# +44 (0) 116 257 7981 (fax) +# +# jm@dmu.ac.uk +# http://www.iesd.dmu.ac.uk/~jm + + + +set ambdat=none +set radius=0.05 + +alias readvar 'echo -n Enter \!:1 "[$\!:1]: ";set ans="$<";if("$ans" != "")set \!:1="$ans"' + +cat <<_EOF_ + + CREATE SCENE DESCRIPTION MARKERS FOR + AMBIENT SAMPLING LOCATIONS + +This script puts coloured markers (spheres) at points where hemispherical +sampling was initiated. The locations and levels are taken from the binary +ambient file. The levels are colour coded - + + Level 0 = red + Level 1 = green + Level 2 = blue + Level 3 = yellow + Level 4 = cyan + Level 5 = magenta + Level 6 = pink + +To view the locations, include the file "amb_pos.rad" when re-creating +the octree. + +_EOF_ + +rm -f amb_pos.rad + +echo "Input ambient file" +readvar ambdat + +echo "Input marker sphere radius" +readvar radius + +getinfo $ambdat +lookamb -d -h $ambdat > af$$.tmp + +set red=(1 0 0 1 0 1 1) +set grn=(0 1 0 1 1 0 0.5) +set blu=(0 0 1 0 1 1 0.5) + +foreach j (1 2 3 4 5 6 7) + +@ i = $j - 1 + +rcalc -e 'cond=eq($7,'"$i"');eq(a,b)=if(a-b+1e-7,b-a+1e-7,-1);$1=$1;$2=$2;$3=$3' af$$.tmp > amb_pos_lev$i + +set empt=`wc -l < amb_pos_lev$i` + +if ($empt !~ 0) then + +echo "$empt ambient locations for level $i" + +cat > sph_lev$i.fmt << _EOF_ + +mat_lev$i sphere sph_lev$i.\${recno} +0 +0 +4 \${ x1 } \${ y1 } \${ z1 } $radius +_EOF_ + +cat >> amb_pos.rad << _EOF_ +void plastic mat_lev$i +0 +0 +5 $red[$j] $grn[$j] $blu[$j] 0 0 + +!rcalc -e 'x1=\$1;y1=\$2;z1=\$3' -o sph_lev$i.fmt amb_pos_lev$i + +_EOF_ + +else + +rm amb_pos_lev$i + +endif + +end + +rm af$$.tmp diff -r 000000000000 -r 0aa115157c9c orig/genbackg.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/genbackg.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,157 @@ +#!/bin/csh -f +# RCSid: $Id: genbackg.csh,v 2.2 2008/08/25 04:50:32 greg Exp $ +# +# Generate height field to surround a mesh with an irregular border +# +# 4/16/2002 Greg Ward +# +if ( $#argv < 3 ) goto userr +# Get arguments +set mat = $1 +set nam = $2 +set mesh = $3 +# Get options +set smooth="" +set i = 4 +while ( $i <= $#argv ) + switch ($argv[$i]) + case -c: + @ i++ ; set a=$i + @ i++ ; set b=$i + @ i++ ; set c=$i + set c00=($argv[$a] $argv[$b] $argv[$c]) + @ i++ ; set a=$i + @ i++ ; set b=$i + @ i++ ; set c=$i + set c01=($argv[$a] $argv[$b] $argv[$c]) + @ i++ ; set a=$i + @ i++ ; set b=$i + @ i++ ; set c=$i + set c11=($argv[$a] $argv[$b] $argv[$c]) + @ i++ ; set a=$i + @ i++ ; set b=$i + @ i++ ; set c=$i + set c10=($argv[$a] $argv[$b] $argv[$c]) + unset a b c + breaksw + case -r: + @ i++ + set step = $argv[$i] + breaksw + case -b: + @ i++ + set bord = $argv[$i] + breaksw + case -s: + set smooth="-s" + breaksw + default: + goto userr + endsw + @ i++ +end +# Get corner points +set lim=(`getbbox -h $mesh`) +if (! $?bord ) then + set bord=`ev "($lim[2]-$lim[1]+$lim[4]-$lim[3])/20"` +endif +if (! $?c00 ) then + set c00=(`ev "$lim[1]-$bord" "$lim[3]-$bord" "($lim[5]+$lim[6])/2"`) + set c01=(`ev "$lim[2]+$bord" "$lim[3]-$bord" "($lim[5]+$lim[6])/2"`) + set c10=(`ev "$lim[1]-$bord" "$lim[4]+$bord" "($lim[5]+$lim[6])/2"`) + set c11=(`ev "$lim[2]+$bord" "$lim[4]+$bord" "($lim[5]+$lim[6])/2"`) +endif +# Get mesh resolution +if (! $?step ) then + set step=`ev "sqrt(($c11[1]-$c00[1])*($c11[1]-$c00[1])+($c11[2]-$c00[2])*($c11[2]-$c00[2]))/70"` +endif +set res=(`ev "ceil(sqrt(($c01[1]-$c00[1])*($c01[1]-$c00[1])+($c01[2]-$c00[2])*($c01[2]-$c00[2]))/$step)" "ceil(sqrt(($c10[1]-$c00[1])*($c10[1]-$c00[1])+($c10[2]-$c00[2])*($c10[2]-$c00[2]))/$step)"`) +set edgef=`mktemp /tmp/edgerad.XXXXXX` +cat > $edgef << _EOF_ +void sphere c00 +0 0 4 +$c00 .001 +void sphere c01 +0 0 4 +$c01 .001 +void sphere c10 +0 0 4 +$c10 .001 +void sphere c11 +0 0 4 +$c11 .001 +void cylinder ex0 +0 0 7 +$c00 $c10 .001 +void cylinder ex1 +0 0 7 +$c01 $c11 .001 +void cylinder ey0 +0 0 7 +$c00 $c01 .001 +void cylinder ey1 +0 0 7 +$c10 $c11 .001 +_EOF_ +set meshcal=`mkdir /tmp/meshcal.XXXXXX` +cat > $meshcal << _EOF_ +lerp(x,y0,y1):(1-x)*y0+x*y1; +and(a,b):if(a,b,-1); +or(a,b):if(a,1,b); +not(a):if(a,-1,1); +max(a,b):if(a-b,a,b); +min(a,b):if(a-b,b,a); +EPS:1e-7; +XR:min(32,floor($res[1]/2)); +YR:8; +eq(a,b):and(a-b+EPS,b-a+EPS); +sumfun2x(f,y,x0,x1):if(x1-x0+EPS,f(x0,y)+sumfun2x(f,y,x0+1,x1),0); +sumfun2(f,x0,x1,y0,y1):if(y1-y0+EPS, + sumfun2x(f,y0,x0,x1)+sumfun2(f,x0,x1,y0+1,y1), 0); +xpos(xf,yf)=lerp(xf,lerp(yf,$c00[1],$c10[1]),lerp(yf,$c01[1],$c11[1])); +ypos(xf,yf)=lerp(xf,lerp(yf,$c00[2],$c10[2]),lerp(yf,$c01[2],$c11[2])); +onedge=or(or(eq(x,0),eq(x,xmax-1)),or(eq(y,0),eq(y,ymax-1))); +z0:$lim[5]-$bord; +height(xo,yo)=z0+gi(1,xo,yo); +maxwt(xo,yo):if(and(eq(xo,0),eq(yo,0)),100,1/(xo*xo+yo*yo)); +wt(xo,yo)=if(height(xo,yo)-1e9, 0, maxwt(xo,yo)); +wtv(xo,yo)=wt(xo,yo)*height(xo,yo); +wts=sumfun2(wt,-XR,XR,-YR,YR); +sum=sumfun2(wtv,-XR,XR,-YR,YR); +inmesh=and(not(onedge),eq(sumfun2(wt,-1,1,-1,1),sumfun2(maxwt,-1,1,-1,1))); +lo=if(inmesh,1e10,if(wts-EPS,sum/wts,($lim[5]+$lim[6])/2)); +_EOF_ +# Generate height image +set meshoct=`/tmp/meshoct.XXXXXXX` +xform -m void $mesh | oconv - $edgef > $meshoct +set meshpic=`mktemp /tmp/meshpic.XXXXXX` +cnt $res[2] $res[1] \ + | rcalc -e 'sp=$2/'"($res[1]-1)" -e 'tp=1-$1/'"($res[2]-1)" \ + -f $meshcal -e "xp=xpos(sp,tp);yp=ypos(sp,tp)" \ + -e '$1=xp;$2=yp;$3=z0;$4=0;$5=0;$6=1' \ + | rtrace -w -faf -oL -x $res[1] -y $res[2] $meshoct \ + | pvalue -r -b -df > $meshpic +rm $edgef $meshoct +# Output mesh surround +cat << _EOF_ +# $0 $argv[*] +# Corner points: +# $c00 +# $c01 +# $c11 +# $c10 +_EOF_ +pflip -v $meshpic \ + | pcomb -f $meshcal - \ + | pvalue -h -H -pG -d \ + | gensurf $mat $nam 'xpos(s,t)' 'ypos(s,t)' - \ + `ev $res[1]-1 $res[2]-1` \ + -e 'valid(xf,yf)=1e9-Z`SYS(xf,yf)' \ + -f $meshcal $smooth +rm $meshcal $meshpic +# All done -- exit +exit 0 +# Usage error message +userr: +echo Usage: $0 "mat name mesh_file [-c corners][-b bord_width][-r step_size][-s]" +exit 1 diff -r 000000000000 -r 0aa115157c9c orig/genpine.csh --- /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 diff -r 000000000000 -r 0aa115157c9c orig/genwindow.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/genwindow.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,244 @@ +#!/bin/csh -f +# RCSid: $Id: genwindow.csh,v 2.2 2003/02/22 02:07:23 greg Exp $ +# +# Generate source description for window with venetian blinds. +# +# 1/11/88 Greg Ward +# +# Usage: genwindow shellfile +# +# Takes as input the following shell variables from file $1: +# +# worient Window orientation (degrees from south) +# wwidth Window width +# wheight Window height +# wtrans Window transmission +# bdepth Blind depth +# bspac Blind vertical spacing +# gap Gap between blinds and window +# brcurv Blind curvature radius (negative upward, zero none) +# bangle Blind inclination (degrees from horizontal, up and out) +# material Blind material type (metal or plastic) +# ucolor Blind up side color ("red green blue") +# uspec Blind up side specularity (0 to 1) +# urough Blind up side roughness (0 to .2) +# dcolor Blind down side color (opt) +# dspec Blind down side specularity (opt) +# drough Blind down side roughness (opt) +# lat Site latitude (degrees) +# long Site longitude (degrees) +# mer Site standard meridian (degrees) +# hour Hour (standard 24hr time) +# day Day (of month) +# month Month (of year) +# grefl Ground plane reflectance +# sky Sky conditions (sunny, clear, cloudy) +# nsources Number of sources to divide window +# +# Creates the following output files: +# +# stdout Window description for Radiance +# $1.d$$ Window output distribution +# + +if ( $#argv != 1 ) then + echo Usage: $0 input + exit 1 +endif + +# Set input and output files +set input = $1 +set distrib = $1.d$$ +set tmpdir = /tmp +set descrip = $tmpdir/gw$$.des +set distoct = $tmpdir/gw$$.oct +set skydesc = $tmpdir/gw$$.sky +set remove = ( $distoct $skydesc $descrip ) +set removerr = ( $remove $distrib ) +onintr error + +# Set default values +set worient = 0. +set wtrans = ( .96 .96 .96 ) +set bdepth = 0.025 +set bspac = 0.0155 +set gap = 0. +set brcurv = 0. +set bangle = 0. +set material = plastic +set ucolor = ( 0.5 0.5 0.5 ) +set uspec = 0. +set urough = 0.05 +set lat = 37.8 +set long = 122 +set mer = 120 +set hour = 12 +set day = 21 +set month = 10 +set grefl = .2 +set sky = sunny +set nsources = 6 + +# Get input +source $input +if ( $status ) goto error + +# Create window +cat > $descrip <<_EOF_ + +void glass clear_glass +0 +0 +3 $wtrans + +clear_glass polygon window +0 +0 +12 + 0 0 0 + 0 0 $wheight + $wwidth 0 $wheight + $wwidth 0 0 + +void $material blind_upmat +0 +0 +5 $ucolor $uspec $urough +_EOF_ +if ( $status ) goto error + +# Blinds +genblinds blind_upmat blind_up $bdepth $wwidth $wheight \ + `ev "ceil($wheight/$bspac)"` $bangle -r $brcurv \ + | xform -t $gap -$wwidth 1e-4 -rz 90 >> $descrip +if ( $status ) goto error +if ( $?dcolor ) then + cat >> $descrip <<_EOF_ + + void $material blind_dnmat + 0 + 0 + 5 $dcolor $dspec $drough +_EOF_ + genblinds blind_dnmat blind_down $bdepth $wwidth $wheight \ + `ev "ceil($wheight/$bspac)"` $bangle -r $brcurv \ + | xform -t $gap -$wwidth 0 -rz 90 >> $descrip + if ( $status ) goto error +endif + +# Make sky +switch ($sky) +case sun*: + set skysw = +s + breaksw +case clear: + set skysw = -s + breaksw +case cloud*: + set skysw = -c + breaksw +endsw +dosky: +gensky $month $day $hour $skysw -a $lat -o $long -m $mer -g $grefl \ + | xform -rz `ev "-($worient)"` > $skydesc +if ( $skysw == +s ) then + if ( `sed -n 13p $skydesc | rcalc -e '$1=if($3,-1,1)'` < 0 ) then + set skysw = -s + goto dosky + endif +endif +cat >> $skydesc <<_EOF_ + +skyfunc glow skyglow +0 +0 +4 1 1 1 0 + +skyglow source sky +0 +0 +4 0 -1 0 180 +_EOF_ + +# Make distribution +oconv $skydesc $descrip > $distoct +if ( $status ) goto error +echo 2 5 85 9 0 340 18 > $distrib +makedist -h -d -x1 0 1 0 -x2 0 0 1 -x3 1 0 0 -alpha 5-85:10 -beta 0-340:20 \ + -tw $bspac -th $bspac -td `ev "2*($bdepth+$gap)"` \ + -tc `ev "$wwidth/2" "$bdepth+$gap" "$wheight/2"` \ + -ab 2 -aa .1 -ad 64 -as 64 \ + -x 16 -y 16 $distoct >> $distrib +if ( $status ) goto error + +set wsgrid = (`ev "floor(sqrt($nsources*$wwidth/$wheight)+.5)" "floor(sqrt($nsources*$wheight/$wwidth)+.5)"`) +@ nsources = $wsgrid[1] * $wsgrid[2] +# Print header +cat <<_EOF_ +# +# Window with venetian blinds +# Created from $input `date` +# +# Window orientation (degrees from south): $worient +# Window height: $wheight +# Window width: $wwidth +# Window transmission: $wtrans +# Blind depth: $bdepth +# Blind spacing: $bspac +# Gap to window: $gap +# Blind curvature radius: $brcurv +# Blind inclination (degrees altitude): $bangle +# Blind material: $material +# Up side color: $ucolor +# Up side specularity: $uspec +# Up side roughness: $urough +_EOF_ +if ( $?dcolor ) then + cat <<_EOF_ +# Down side color: $dcolor +# Down side specularity: $dspec +# Down side roughness: $drough +_EOF_ +else + echo \#\ Down side same as up +endif +cat <<_EOF_ +# Latitude (degrees): $lat +# Longitude (degrees): $long +# Standard Meridian (degrees): $mer +# Month Day Hour: $month $day $hour +# Ground plane reflectance: $grefl +# Sky condition: $sky +# Number of window sources: $nsources +# +_EOF_ + +# Send sources +xform -e -rz $worient <<_EOF_ + +void brightdata wdistrib +10 noop $distrib source.cal src_theta src_phi -rx 90 -ry -90 -mx +0 +0 + +wdistrib illum willum +0 +0 +3 1 1 1 + +!gensurf willum wsource "$wwidth*t" $bdepth "$wheight*s" $wsgrid[2] $wsgrid[1] +_EOF_ +if ( $status ) goto error + +# Send window +xform -rz $worient $descrip +if ( $status ) goto error + +# All done, print and exit +rm -f $remove +exit 0 + +# Error exit +error: + rm -f $removerr + exit 1 diff -r 000000000000 -r 0aa115157c9c orig/glare.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/glare.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,219 @@ +#!/bin/csh -f +# RCSid: $Id: glare.csh,v 2.4 2003/02/22 02:07:30 greg Exp $ +# +# Interactive program for calculating glare values +# +set fgargs=(-v) +set nofile="none" +set octree=$nofile +set picture=$nofile +set glarefile=$nofile +if ($#argv >= 1) then + set glarefile=$argv[1] + if ($#argv >= 2) then + set picture=$argv[2] + if ($#argv >= 3) then + set octree=$argv[3] + endif + endif +endif +set rtargs= +set view= +set threshold=300 +set maxangle=0 +set stepangle=10 + +set gndxfile="glr$$.ndx" +set plotfile="glr$$.plt" +set tempfiles=($gndxfile $plotfile) + +alias readvar 'echo -n Enter \!:1 "[$\!:1]: ";set ans="$<";if("$ans" != "")set \!:1="$ans"' + +onintr quit + +cat <<_EOF_ +This script provides a convenient interface to the glare calculation +and analysis programs. It works on a single output file from findglare, +which you must either create here or have created already before. +_EOF_ +while ( $glarefile == $nofile ) + echo "" + echo "Please specify a glare file, or use ^C to exit." + readvar glarefile +end +if ( ! -f $glarefile ) then + echo "" + echo -n "The glare file '$glarefile' doesn't exist -- shall we create it? " + if ("$<" =~ [nN]*) exit 0 + cat <<_EOF_ + +A glare file can be created from a wide-angle Radiance picture (preferably +a fisheye view), an octree, or both. Computing glare source locations +from a finished image is faster, but using an octree is more reliable +since all of the scene information is there. Whenever it is possible, +you should use both a picture and an octree to compute the glare file. + +You must also have a viewpoint and direction for the glare calculation. +If the viewpoint is not the same as the picture, an error will result. +If no view is specified, the view parameters are taken from the picture, +so the view specification is optional unless you are starting from an +octree. + +_EOF_ + if ( $picture == $nofile ) then + readvar picture + endif + if ( $octree == $nofile ) then + readvar octree + endif + readvar view + if ( $picture == $nofile && $octree == $nofile ) then + echo "You must specify a picture or an octree" + exit 1 + endif + if ( $picture == $nofile && "$view" == "" ) then + echo "You must give a view if there is no picture" + exit 1 + endif + if ( $picture != $nofile ) then + if ( ! -r $picture ) then + echo "Cannot read $picture" + exit 1 + endif + set fgargs=($fgargs -p $picture) + if ( "$view" != "" ) then + set view=(-vf $picture $view) + endif + endif + set fgargs=($fgargs $view) + if ( $octree != $nofile ) then + if ( ! -r $octree ) then + echo "Cannot read $octree" + exit 1 + endif + cat <<_EOF_ + +With an octree, you should give the same options for -av, -ab and +so forth as are used to render the scene. Please enter them below. + +_EOF_ + if ($picture != $nofile) then + echo "These are the parameters from the picture:" + getinfo $picture + endif + readvar rtargs + set fgargs=($fgargs $rtargs $octree) + endif + echo "" + echo -n "Do you expect glare sources in the scene to be small? " + if ("$<" =~ [yY]) then + echo -n "Very small? " + if ("$<" =~ [yY]) then + set fgargs=(-r 400 $fgargs) + else + set fgargs=(-r 250 $fgargs) + endif + echo -n "Are these sources relatively bright? " + if ("$<" =~ [nN]*) then + set fgargs=(-c $fgargs) + endif + endif + cat <<_EOF_ + +Glare sources are determined by a threshold level. Any part of the +view that is above this threshold is considered to be part of a glare +source. If you do not choose a threshold value, it will be set auto- +matically to 7 times the average field luminance (in candelas/sq.meter). + +_EOF_ + echo -n "Do you wish to set the glare threshold manually? " + if ("$<" =~ [yY]) then + readvar threshold + set fgargs=(-t $threshold $fgargs) + endif + cat <<_EOF_ + +It is often desirable to know how glare changes as a function of +viewing direction. If you like, you can compute glare for up +to 180 degrees to the left and right of the view center. Enter +the maximum angle that you would like to compute below. + +_EOF_ + readvar maxangle + if ( $maxangle >= $stepangle ) then + set fgargs=(-ga $stepangle-$maxangle\:$stepangle $fgargs) + endif + echo "" + echo "Starting calculation..." + echo findglare $fgargs + findglare $fgargs > $glarefile + if ($status) then + echo "Uh-oh. Something went wrong with findglare\!" + rm $glarefile + exit 1 + endif +endif +if ($?DISPLAY && $picture != $nofile) then + echo "" + echo "Displaying glare sources in '$picture'..." + xglaresrc $picture $glarefile +endif +set ndxnam=("Guth Visual Comfort Probability" "Guth Disability Glare Ratio" "CIE Glare Index" "BRS Glare Index" "Unified Glare Rating" "Daylight Glare Index") +set ndxcom=("glarendx -t guth_vcp" "glarendx -t guth_dgr" "glarendx -t cie_cgi" "glarendx -t brs_gi" "glarendx -t ugr" "glarendx -t dgi") +set bcdlvl=(50 124 18.5 18.5 18.5 21.7) +while ( 1 ) + echo "" + echo " 0. Quit" + set i=1 + while ($i <= $#ndxnam) + echo " $i. $ndxnam[$i]" + @ i++ + end + echo "" + set choice=0 + readvar choice + if ($choice < 1 || $choice > $#ndxcom) goto quit + $ndxcom[$choice] $glarefile > $gndxfile + echo "" + echo $ndxnam[$choice] + echo "Angle Value" + getinfo - < $gndxfile + echo "" + set save_file=$nofile + readvar save_file + if ($save_file != $nofile) then + cp -i $gndxfile $save_file + endif + if ( `getinfo - < $gndxfile | wc -l` > 4 ) then + echo "" + echo -n "Do you want to plot this data? " + if ( "$<" =~ [yY]* ) then + set subtitle="$view" + if ($picture != $nofile) then + set subtitle="$picture $subtitle" + else if ($octree != $nofile) then + set subtitle="$subtitle $octree" + endif + if ( "$subtitle" == "" ) then + set subtitle="`getinfo < $glarefile | grep findglare`" + endif + cat <<_EOF_ > $plotfile +include=line.plt +include=polar.plt +title="$ndxnam[$choice]" +subtitle="$subtitle" +Bdata= + 0 $bcdlvl[$choice] + 360 $bcdlvl[$choice] +; +Blabel="BCD level" +Adata= +_EOF_ + getinfo - < $gndxfile >> $plotfile + igraph $plotfile + endif + endif +end +quit: +rm -f $tempfiles +exit 0 diff -r 000000000000 -r 0aa115157c9c orig/glaze.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/glaze.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,441 @@ +#!/bin/csh -f +# RCSid: $Id: glaze.csh,v 2.8 2009/11/05 19:00:50 greg Exp $ +# +# Complex glazing model (goes with glaze1.cal and glaze2.cal) +# +# Oct. 2002 Greg Ward +# Aug. 2004 GW (added -f option to read glazings from file) +# Funding for this development generously provided by Visarc, Inc. +# (http://www.visarc.com) +# +# Nov. 2009 Jack de Valpine - Visarc, Inc. +# -f option now clears the internal demo database and accepts +# a clear glass definition as the first entry +# in the database file +# + +################################################################# +# +# The general assumption is that one surface is uncoated, and +# reflectances and transmittances are computed from this fact. +# If the user tries to enter two coated surfaces on the same +# pane, the script complains and exits. +# +# Supported surface types (clear glass prepended below): +# +set sn_arr=("VE1-2M low-E coating" "PVB laminated" "V-175 white frit" "V-933 warm gray frit") +# Glass-side hemispherical reflectances for each surface type: +set rg_r_arr=(0.065 .11 0.33 0.15) +set rg_g_arr=(0.058 .11 0.33 0.15) +set rg_b_arr=(0.067 .11 0.33 0.15) +# Coating-side hemispherical reflectance for each surface type: +set rc_r_arr=(0.042 .11 0.59 0.21) +set rc_g_arr=(0.049 .11 0.59 0.21) +set rc_b_arr=(0.043 .11 0.59 0.21) +# Hemispherical (normal) transmittance for each surface type: +set tn_r_arr=(0.756 0.63 0.21 0.09) +set tn_g_arr=(0.808 0.63 0.21 0.09) +set tn_b_arr=(0.744 0.63 0.21 0.09) +# Boolean whether coatings can have partial coverage: +set part_arr=(0 0 1 1) + +set gfiles=() +while ($#argv > 0) + set header="Surface Tr Tg Tb Rcr Rcg Rcb Rgr Rgg Rgb Part" + if ($#argv < 2 || "$argv[1]" != '-f') then + echo "Usage: $0 [-f glazing.dat ..]" + exit 1 + endif + shift argv + # Clear internal default database + set sn_arr=() + set rg_r_arr=() ; set rg_g_arr=() ; set rg_b_arr=() + set rc_r_arr=() ; set rc_g_arr=() ; set rc_b_arr=() + set tn_r_arr=() ; set tn_g_arr=() ; set tn_b_arr=() + set part_arr=() + set gf="$argv[1]" + shift argv + set gfiles=($gfiles:q $gf:q) + if ("`sed -n 1p $gf:q`" != "$header") then + echo "Bad header in $gf -- Expected: $header" + exit 1 + endif + echo "Adding glazing types from file $gf :" + set nl=`wc -l < $gf:q` + @ i=2 + while ($i <= $nl) + set ln=(`sed -n ${i}p $gf:q`) + if ($#ln != 11) then + echo "Expected 11 words in line: $ln" + exit 1 + endif + echo $ln[1] + set sn_arr=($sn_arr:q $ln[1]) + set tn_r_arr=($tn_r_arr $ln[2]) + set tn_g_arr=($tn_g_arr $ln[3]) + set tn_b_arr=($tn_b_arr $ln[4]) + set rc_r_arr=($rc_r_arr $ln[5]) + set rc_g_arr=($rc_g_arr $ln[6]) + set rc_b_arr=($rc_b_arr $ln[7]) + set rg_r_arr=($rg_r_arr $ln[8]) + set rg_g_arr=($rg_g_arr $ln[9]) + set rg_b_arr=($rg_b_arr $ln[10]) + set part_arr=($part_arr $ln[11]) + @ i++ + end +end +if (! $#gfiles) then + unset gfiles + echo "###" + echo "### NOTE: Using internal demo database!" + echo "###" + echo +endif +# +# Make sure we have a clear glazing definition +# +if (`rcalc -n -e 'ad(a,b)=if(a-b,a-b,b-a);$1=if('"ad($rg_r_arr[1],$rc_r_arr[1])+ad($rg_g_arr[1],$rc_g_arr[1])+ad($rg_b_arr[1],$rc_b_arr[1])-.005,1,0)"`) then + set sn_arr=("clear glass" $sn_arr:q) + set rg_r_arr=(0.074 $rg_r_arr) + set rg_g_arr=(0.077 $rg_g_arr) + set rg_b_arr=(0.079 $rg_b_arr) + set rc_r_arr=(0.074 $rc_r_arr) + set rc_g_arr=(0.077 $rc_g_arr) + set rc_b_arr=(0.079 $rc_b_arr) + set tn_r_arr=(0.862 $tn_r_arr) + set tn_g_arr=(0.890 $tn_g_arr) + set tn_b_arr=(0.886 $tn_b_arr) + set part_arr=(0 $part_arr) +endif + +################################################################# +# +# Get user input +# +echo -n "Enter the number of panes in the system: " +set np="$<" +if ($np != 1 && $np != 2) then + echo "Must be 1 or 2 pane system" + exit 1 +endif +echo "" +echo "Window normal faces interior" +echo "" +if ($np == 1) then +echo " | |" +echo " | |" +echo " | |" +echo " | |-->" +echo " | |" +echo " | |" +echo " | |" +echo " s1 s2" +else +echo " | | | |" +echo " | | | |" +echo " | | | |" +echo " | | | |-->" +echo " | | | |" +echo " | | | |" +echo " | | | |" +echo " s1 s2 s3 s4" +endif +echo "" +echo "Supported surface types are:" +set i=1 +while ($i <= $#sn_arr) + echo " " $i - $sn_arr[$i] + @ i++ +end +echo "" +echo -n "What is the type of s1? " +set s1t="$<" +echo -n "What is the type of s2? " +set s2t="$<" +if ($s1t != 1 && $s2t != 1) then + echo "One surface of each pane must be $sn_arr[1]" + exit 1 +endif +if ($part_arr[$s1t]) then + echo -n "Enter fraction coverage for s1 (0-1): " + set s1c="$<" +endif +if ($part_arr[$s2t]) then + echo -n "Enter fraction coverage for s2 (0-1): " + set s2c="$<" +endif +if ($np == 2) then +echo -n "What is the type of s3? " +set s3t="$<" +echo -n "What is the type of s4? " +set s4t="$<" +if ($s3t != 1 && $s4t != 1) then + echo "One surface of each pane must be $sn_arr[1]" + exit 1 +endif +if ($part_arr[$s3t]) then + echo -n "Enter fraction coverage for s3 (0-1): " + set s3c="$<" +endif +if ($part_arr[$s4t]) then + echo -n "Enter fraction coverage for s4 (0-1): " + set s4c="$<" +endif +endif + +################################################################# +# +# Begin material comments +# +echo "" +echo "############################################" +echo "# Glazing produced by Radiance glaze script" +echo '# $Revision: 2.8 $' +if ($?gfiles) then + echo "# Loaded: $gfiles:q" + echo -n "# " ; date +endif +echo "# Material surface normal points to interior" +echo "# Number of panes in system: $np" + +if ($np == 2) goto glaze2 +################################################################# +# +# Compute single glazing +# +set sc=1 +echo "# Exterior surface s1 type: $sn_arr[$s1t]" +if ($?s1c) then + echo "# s1 coating coverage: $s1c" + set sc=$s1c +endif +echo "# Interior surface s2 type: $sn_arr[$s2t]" +if ($?s2c) then + echo "# s2 coating coverage: $s2c" + set sc=$s2c +endif +if ($s1t != 1) then + set ct=$s1t + echo -n "# Exterior normal hemispherical reflectance: " + ev ".265*($sc*$rc_r_arr[$ct]+(1-$sc)*$rc_r_arr[1])+.670*($sc*$rc_g_arr[$ct]+(1-$sc)*$rc_g_arr[1])+.065*($sc*$rc_b_arr[$ct]+(1-$sc)*$rc_b_arr[1])" + echo -n "# Interior normal hemispherical reflectance: " + ev ".265*($sc*$rg_r_arr[$ct]+(1-$sc)*$rg_r_arr[1])+.670*($sc*$rg_g_arr[$ct]+(1-$sc)*$rg_g_arr[1])+.065*($sc*$rg_b_arr[$ct]+(1-$sc)*$rg_b_arr[1])" +else + set ct=$s2t + echo -n "# Exterior normal hemispherical reflectance: " + ev ".265*($sc*$rg_r_arr[$ct]+(1-$sc)*$rg_r_arr[1])+.670*($sc*$rg_g_arr[$ct]+(1-$sc)*$rg_g_arr[1])+.065*($sc*$rg_b_arr[$ct]+(1-$sc)*$rg_b_arr[1])" + echo -n "# Interior normal hemispherical reflectance: " + ev ".265*($sc*$rc_r_arr[$ct]+(1-$sc)*$rc_r_arr[1])+.670*($sc*$rc_g_arr[$ct]+(1-$sc)*$rc_g_arr[1])+.065*($sc*$rc_b_arr[$ct]+(1-$sc)*$rc_b_arr[1])" +endif +echo -n "# Normal hemispherical transmittance: " +ev ".265*($sc*$tn_r_arr[$ct]+(1-$sc)*$tn_r_arr[1])+.670*($sc*$tn_g_arr[$ct]+(1-$sc)*$tn_g_arr[1])+.065*($sc*$tn_b_arr[$ct]+(1-$sc)*$tn_b_arr[1])" +echo "#" +echo "void BRTDfunc glaze1_unnamed" +if ($part_arr[$s1t] || $part_arr[$s2t]) then +### Frit glazing +echo "10" +echo " sr_frit_r sr_frit_g sr_frit_b" +echo " st_frit_r st_frit_g st_frit_b" +echo " 0 0 0" +echo " glaze1.cal" +echo "0" +echo "11" +if ($s2t == 1) then + ev "$s1c*($rg_r_arr[$s1t]-$rg_r_arr[1])" \ + "$s1c*($rg_g_arr[$s1t]-$rg_g_arr[1])" \ + "$s1c*($rg_b_arr[$s1t]-$rg_b_arr[1])" + ev "$s1c*$rc_r_arr[$s1t]" "$s1c*$rc_g_arr[$s1t]" "$s1c*$rc_b_arr[$s1t]" + ev "$s1c*$tn_r_arr[$s1t]" "$s1c*$tn_g_arr[$s1t]" "$s1c*$tn_b_arr[$s1t]" + echo " 1 $s1c" +else + ev "$s2c*$rc_r_arr[$s2t]" "$s2c*$rc_g_arr[$s2t]" "$s2c*$rc_b_arr[$s2t]" + ev "$s2c*($rg_r_arr[$s2t]-$rg_r_arr[1])" \ + "$s2c*($rg_g_arr[$s2t]-$rg_g_arr[1])" \ + "$s2c*($rg_b_arr[$s2t]-$rg_b_arr[1])" + ev "$s2c*$tn_r_arr[$s2t]" "$s2c*$tn_g_arr[$s2t]" "$s2c*$tn_b_arr[$s2t]" + echo " -1 $s2c" +endif +else +### Low-E glazing +echo "10" +echo " sr_clear_r sr_clear_g sr_clear_b" +echo " st_clear_r st_clear_g st_clear_b" +echo " 0 0 0" +echo " glaze1.cal" +echo "0" +echo "19" +echo " 0 0 0" +echo " 0 0 0" +echo " 0 0 0" +if ($s2t == 1) then + echo " 1" + set st=$s1t +else + echo " -1" + set st=$s2t +endif +echo " $rg_r_arr[$st] $rg_g_arr[$st] $rg_b_arr[$st]" +echo " $rc_r_arr[$st] $rc_g_arr[$st] $rc_b_arr[$st]" +echo " $tn_r_arr[$st] $tn_g_arr[$st] $tn_b_arr[$st]" +endif +echo "" +exit 0 + +glaze2: +################################################################# +# +# Compute double glazing +# +if ($s2t != 1) then + set s2r_rgb=($rc_r_arr[$s2t] $rc_g_arr[$s2t] $rc_b_arr[$s2t]) + set s1r_rgb=($rg_r_arr[$s2t] $rg_g_arr[$s2t] $rg_b_arr[$s2t]) + set s12t_rgb=($tn_r_arr[$s2t] $tn_g_arr[$s2t] $tn_b_arr[$s2t]) +else + set s2r_rgb=($rg_r_arr[$s1t] $rg_g_arr[$s1t] $rg_b_arr[$s1t]) + set s1r_rgb=($rc_r_arr[$s1t] $rc_g_arr[$s1t] $rc_b_arr[$s1t]) + set s12t_rgb=($tn_r_arr[$s1t] $tn_g_arr[$s1t] $tn_b_arr[$s1t]) +endif +if ($s4t != 1) then + set s4r_rgb=($rc_r_arr[$s4t] $rc_g_arr[$s4t] $rc_b_arr[$s4t]) + set s3r_rgb=($rg_r_arr[$s4t] $rg_g_arr[$s4t] $rg_b_arr[$s4t]) + set s34t_rgb=($tn_r_arr[$s4t] $tn_g_arr[$s4t] $tn_b_arr[$s4t]) +else + set s4r_rgb=($rg_r_arr[$s3t] $rg_g_arr[$s3t] $rg_b_arr[$s3t]) + set s3r_rgb=($rc_r_arr[$s3t] $rc_g_arr[$s3t] $rc_b_arr[$s3t]) + set s34t_rgb=($tn_r_arr[$s3t] $tn_g_arr[$s3t] $tn_b_arr[$s3t]) +endif +set s12c=1 +echo "# Exterior surface s1 type: $sn_arr[$s1t]" +if ($?s1c) then + echo "# s1 coating coverage: $s1c" + set s12c=$s1c +endif +echo "# Inner surface s2 type: $sn_arr[$s2t]" +if ($?s2c) then + echo "# s2 coating coverage: $s2c" + set s12c=$s2c +endif +set s34c=1 +echo "# Inner surface s3 type: $sn_arr[$s3t]" +if ($?s3c) then + echo "# s3 coating coverage: $s3c" + set s34c=$s3c +endif +echo "# Interior surface s4 type: $sn_arr[$s4t]" +if ($?s4c) then + echo "# s4 coating coverage: $s4c" + set s34c=$s4c +endif +# Approximate reflectance and transmittance for comment using gray values +set rglass=`ev ".265*$rg_r_arr[1]+.670*$rg_g_arr[1]+.065*$rg_b_arr[1]"` +set tglass=`ev ".265*$tn_r_arr[1]+.670*$tn_g_arr[1]+.065*$tn_b_arr[1]"` +set s1r_gry=`ev "$s12c*(.265*$s1r_rgb[1]+.670*$s1r_rgb[2]+.065*$s1r_rgb[3])+(1-$s12c)*$rglass"` +set s2r_gry=`ev "$s12c*(.265*$s2r_rgb[1]+.670*$s2r_rgb[2]+.065*$s2r_rgb[3])+(1-$s12c)*$rglass"` +set s12t_gry=`ev "$s12c*(.265*$s12t_rgb[1]+.670*$s12t_rgb[2]+.065*$s12t_rgb[3])+(1-$s12c)*$tglass"` +set s3r_gry=`ev "$s34c*(.265*$s3r_rgb[1]+.670*$s3r_rgb[2]+.065*$s3r_rgb[3])+(1-$s34c)*$rglass"` +set s4r_gry=`ev "$s34c*(.265*$s4r_rgb[1]+.670*$s4r_rgb[2]+.065*$s4r_rgb[3])+(1-$s34c)*$rglass"` +set s34t_gry=`ev "$s34c*(.265*$s34t_rgb[1]+.670*$s34t_rgb[2]+.065*$s34t_rgb[3])+(1-$s34c)*$tglass"` +echo -n "# Exterior normal hemispherical reflectance: " +ev "$s1r_gry + $s12t_gry^2*$s3r_gry" +echo -n "# Interior normal hemispherical reflectance: " +ev "$s4r_gry + $s34t_gry^2*$s2r_gry" +echo -n "# Normal hemispherical transmittance: " +ev "$s12t_gry*$s34t_gry" +echo "#" +echo "void BRTDfunc glaze2_unnamed" + +if ($part_arr[$s3t] || $part_arr[$s4t]) then +### Front pane has frit +if ($part_arr[$s1t] || $part_arr[$s2t]) then + echo "Only one pane can have frit" + exit 1 +endif +if ($?s3c) then + set sc=$s3c + set s3g=`ev "1-$s3c"` +else + set s3c=0 + set s3g=1 +endif +if ($?s4c) then + set sc=$s4c + set s4g=`ev "1-$s4c"` +else + set s4c=0 + set s4g=1 +endif +echo "10" +echo "if(Rdot,cr($s4g*rclr,$s3g*$s4g*tclr,fr($s2r_rgb[1])),cr(fr($s1r_rgb[1]),ft($s12t_rgb[1]),$s3g*rclr))" +echo "if(Rdot,cr($s4g*rclr,$s3g*$s4g*tclr,fr($s2r_rgb[2])),cr(fr($s1r_rgb[2]),ft($s12t_rgb[2]),$s3g*rclr))" +echo "if(Rdot,cr($s4g*rclr,$s3g*$s4g*tclr,fr($s2r_rgb[3])),cr(fr($s1r_rgb[3]),ft($s12t_rgb[3]),$s3g*rclr))" +echo "$s3g*$s4g*ft($s12t_rgb[1])*tclr" +echo "$s3g*$s4g*ft($s12t_rgb[2])*tclr" +echo "$s3g*$s4g*ft($s12t_rgb[3])*tclr" +echo " 0 0 0" +echo " glaze2.cal" +echo "0" +echo "9" +ev "$sc*$s4r_rgb[1]-$s3c*$rg_r_arr[1]" \ + "$sc*$s4r_rgb[2]-$s3c*$rg_g_arr[1]" \ + "$sc*$s4r_rgb[3]-$s3c*$rg_b_arr[1]" +ev "$s12t_rgb[1]^2*($sc*$s3r_rgb[1]-$s4c*$rg_r_arr[1])" \ + "$s12t_rgb[2]^2*($sc*$s3r_rgb[2]-$s4c*$rg_g_arr[1])" \ + "$s12t_rgb[3]^2*($sc*$s3r_rgb[3]-$s4c*$rg_b_arr[1])" +ev "$sc*$s12t_rgb[1]*$s34t_rgb[1]" \ + "$sc*$s12t_rgb[2]*$s34t_rgb[2]" \ + "$sc*$s12t_rgb[3]*$s34t_rgb[3]" +else if ($part_arr[$s1t] || $part_arr[$s2t]) then +### Back pane has frit +if ($?s1c) then + set sc=$s1c + set s1g=`ev "1-$s1c"` +else + set s1c=0 + set s1g=1 +endif +if ($?s2c) then + set sc=$s2c + set s2g=`ev "1-$s2c"` +else + set s2c=0 + set s2g=1 +endif +echo "10" +echo "if(Rdot,cr(fr($s4r_rgb[1]),ft($s34t_rgb[1]),$s2g*rclr),cr($s1g*rclr,$s1g*$s2g*tclr,fr($s3r_rgb[1])))" +echo "if(Rdot,cr(fr($s4r_rgb[2]),ft($s34t_rgb[2]),$s2g*rclr),cr($s1g*rclr,$s1g*$s2g*tclr,fr($s3r_rgb[2])))" +echo "if(Rdot,cr(fr($s4r_rgb[3]),ft($s34t_rgb[3]),$s2g*rclr),cr($s1g*rclr,$s1g*$s2g*tclr,fr($s3r_rgb[3])))" +echo "$s1g*$s2g*ft($s34t_rgb[1])*tclr" +echo "$s1g*$s2g*ft($s34t_rgb[2])*tclr" +echo "$s1g*$s2g*ft($s34t_rgb[3])*tclr" +echo " 0 0 0" +echo " glaze2.cal" +echo "0" +echo "9" +ev "$s34t_rgb[1]^2*($sc*$s2r_rgb[1]-$s1c*$rg_r_arr[1])" \ + "$s34t_rgb[2]^2*($sc*$s2r_rgb[2]-$s1c*$rg_g_arr[1])" \ + "$s34t_rgb[3]^2*($sc*$s2r_rgb[3]-$s1c*$rg_b_arr[1])" +ev "$sc*$s1r_rgb[1]-$s2c*$rg_r_arr[1]" \ + "$sc*$s1r_rgb[2]-$s2c*$rg_g_arr[1]" \ + "$sc*$s1r_rgb[3]-$s2c*$rg_b_arr[1]" +ev "$sc*$s34t_rgb[1]*$s12t_rgb[1]" \ + "$sc*$s34t_rgb[2]*$s12t_rgb[2]" \ + "$sc*$s34t_rgb[3]*$s12t_rgb[3]" +else +### Low-E and regular glazing only +echo "10" +echo "if(Rdot,cr(fr($s4r_rgb[1]),ft($s34t_rgb[1]),fr($s2r_rgb[1])),cr(fr($s1r_rgb[1]),ft($s12t_rgb[1]),fr($s3r_rgb[1])))" +echo "if(Rdot,cr(fr($s4r_rgb[2]),ft($s34t_rgb[2]),fr($s2r_rgb[2])),cr(fr($s1r_rgb[2]),ft($s12t_rgb[2]),fr($s3r_rgb[2])))" +echo "if(Rdot,cr(fr($s4r_rgb[3]),ft($s34t_rgb[3]),fr($s2r_rgb[3])),cr(fr($s1r_rgb[3]),ft($s12t_rgb[3]),fr($s3r_rgb[3])))" +echo "ft($s34t_rgb[1])*ft($s12t_rgb[1])" +echo "ft($s34t_rgb[2])*ft($s12t_rgb[2])" +echo "ft($s34t_rgb[3])*ft($s12t_rgb[3])" +echo " 0 0 0" +echo " glaze2.cal" +echo "0" +echo "9" +echo " 0 0 0" +echo " 0 0 0" +echo " 0 0 0" +endif +echo "" +exit 0 diff -r 000000000000 -r 0aa115157c9c orig/help2roff.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/help2roff.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,14 @@ +#!/bin/csh -f +# RCSid: $Id: help2roff.csh,v 3.1 2003/02/22 02:07:30 greg Exp $ +# Convert Tcl/Tk help file (used by gethelp.tcl) to troff/nroff format +# for printing. +# + +cat << _EOF_ +.ds RH "$1:r help +.TL +`head -1 $1` +.LP +_EOF_ +exec sed -e 1d \ +-e 's/^\.\([a-zA-Z][a-zA-Z0-9]*\)\.\([a-zA-Z][a-zA-Z0-9]*\)$/.B "\1 \2"/' $1 diff -r 000000000000 -r 0aa115157c9c orig/illumcal.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/illumcal.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,21 @@ +#!/bin/csh -f +# RCSid: $Id: illumcal.csh,v 1.2 2006/04/05 06:22:29 greg Exp $ +# +# Compute color characteristics of light sources +# +# Each input file should contain evenly-spaced pairs of wavelength (nm) and +# power values (watts/nm), one per line. +# +if ( $#argv < 1 ) then + echo Usage: $0 illum.dat .. + exit 1 +endif +set cal = . +foreach illum ($*) +set spc=(`sed -e 1d -e 's/^[ ]*\([1-9][.0-9]*\)[ ].*$/\1/' -e 3q $illum`) +rcalc -f $cal/cieresp.cal -f $cal/stdrefl.cal -e "intvl=abs($spc[2]-$spc[1])" \ + -f $cal/conv1.cal $illum | total >> /tmp/il$$.dat +end +rcalc -f $cal/conv2.cal -f $cal/cct.cal -f $cal/cri.cal \ + -o $cal/illum.fmt /tmp/il$$.dat +rm -f /tmp/il$$.dat diff -r 000000000000 -r 0aa115157c9c orig/ivpict.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/ivpict.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,12 @@ +#!/bin/csh -f +# RCSid: $Id: ivpict.csh,v 2.3 2008/11/10 19:08:19 greg Exp $ +# +# Render requested Instant View +# +if ( $#argv < 1 ) then + echo Usage: $0 directory '[options]' + exit 1 +endif +set dir=$argv[1] +set opt="$argv[2-]" +exec pinterp $opt $dir/pvw_{x,X,y,Y,z,Z}l.{hdr,z} diff -r 000000000000 -r 0aa115157c9c orig/ivprep.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/ivprep.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,22 @@ +#!/bin/csh -fe +# RCSid: $Id: ivprep.csh,v 2.2 2003/02/22 02:07:30 greg Exp $ +# +# Prepare Instant View directory +# +if ( $#argv != 1 && $#argv != 2 ) then + echo Usage: $0 radfile '[directory]' + exit 1 +endif +set radfile=$1 +if ( $#argv == 2 ) then + set dir=$2 +else + set dir=$radfile:r.ivd +endif +if ( ! -d $dir ) then + mkdir $dir +endif +foreach vw ( xl Xl yl Yl zl Zl ) + rad -w -v $vw $radfile PIC=$dir/pvw QUA=L RES=768 \ + "render=-z $dir/pvw_$vw.z -pj 0" +end diff -r 000000000000 -r 0aa115157c9c orig/makeall.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/makeall.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,240 @@ +#!/bin/csh -f +# RCSid $Id: makeall,v 1.25 2010/11/29 17:22:44 greg Exp $ +# +# Make all the Radiance programs +# +if ( $#argv < 1 ) then + echo "Usage: makeall install [clean] [make options]" + echo " or: makeall clean" + echo " or: makeall library" + exit 1 +endif +if ( "$1" == library ) then + source installib + cp -f src/*/*.{cal,tab,hex} $ldir + echo "" + echo "Set the environment variable RAYPATH=.:$ldir" + echo 'For C-shell users, put the following into ~/.cshrc' + echo " setenv RAYPATH .:$ldir" + echo 'For Bourne shell users, put the following into $HOME/.profile' + echo " RAYPATH=.:$ldir" + echo " export RAYPATH" + echo "" + exit 0 +endif +set srcdirs=( common rt meta cv gen ot px hd util cal ) +if ( "$1" == install ) then + cat << _EOF_ + + `cat src/rt/VERSION` INSTALLATION + +This script rebuilds all of the Radiance programs and installs +them on your system. You should read the file README before running +this script. You can type ^C (followed by return) at any time to abort. + +You must first answer the following questions. + +_EOF_ +if ( ! $?EDITOR ) then + echo -n "What is your preferred editor [vi]? " + set ans="$<" + if ( "$ans" != "" ) then + setenv EDITOR "$ans" + else + setenv EDITOR vi + endif +endif +again1: +echo -n "Where do you want the executables [/usr/local/bin]? " +set idir=$< +(echo $idir) >/dev/null +if ( $status ) then + goto again1 +endif +set idir=$idir +if ( "$idir" == "" ) then + set idir=/usr/local/bin +else if ( "$idir" !~ /* ) then + echo "Directory must be relative to root, please reenter" + goto again1 +endif +if ( ! -d $idir ) then + mkdir $idir + if ( $status ) then + echo "Cannot create directory, please reenter" + goto again1 + endif +endif +if ( ! -d $idir/dev ) then + mkdir $idir/dev + if ( $status ) then + echo "Cannot create subdirectory, please reenter" + goto again1 + endif +endif +set inpath=0 +foreach i ( $path ) + if ( "$i" == "$idir" ) then + set inpath=1 + break + endif +end +set rmake=$idir/rmake +if ( "`ls -tL $rmake $0 |& head -1`" == $rmake ) then + goto gotrmake +endif +set newrmake +more src/common/copyright.h +echo -n "Do you understand and accept the terms of this agreement [n]? " +set ans="$<" +if ( "$ans" !~ [yY]* ) exit +set special= +set arch= +set opt= +set mach= +set compat= +set extras= +set esuffix= +cat << _EOF_ + +Please select your system type from the following list: + + 1) Sun Solaris + 2) Linux + 3) MacOS X + 4) FreeBSD + 5) Cygwin + 6) Other + +_EOF_ +echo -n "Choice? " +set arch="$<" +switch ("$arch") +case 1: # SPARC Station + set arch=sun + set mach="-I/usr/openwin/include -L/usr/openwin/lib -DNOSTEREO" + set opt="-O" + set compat="strcmp.o timegm.o" + breaksw +case 2: # Linux + set mach="-Dlinux -D_FILE_OFFSET_BITS=64 -L/usr/X11R6/lib -I/usr/include/X11 -DNOSTEREO" + set opt="-O2" + set arch=IBMPC + set compat="erf.o" + set extras=CC=gcc + breaksw +case 3: # MacOS X + set mach="-DBSD -DNOSTEREO -Dfreebsd -I/usr/X11R6/include -L/usr/X11R6/lib" + set opt="-O2" + set arch=Intel + set extras="CC=cc CONFIGURE_ARCH=i386" + set special="ogl" + breaksw +case 4: # FreeBSD + set mach="-DBSD -DNOSTEREO -Dfreebsd -I/usr/X11R6/include -L/usr/X11R6/lib" + set opt="-O" + set compat="erf.o" + set extras='CC=cc MLIB="-lcompat -lm"' + set arch=IBMPC + breaksw +case 5: # Cygwin + set mach="-Dfreebsd -L/usr/lib -L/usr/X11R6/lib -I/usr/include/X11 -I/usr/X11R6/include -DNOSTEREO" + set opt="-O2" + set arch=IBMPC + set compat="erf.o" + set extras="CC=gcc" + set special="ogl" + set esuffix=".exe" + breaksw +case 6: # Other + set opt="-O" + set compat="erf.o strcmp.o" + echo -n "Are you using the GNU C compiler [n]? " + if ( "$<" =~ [yY]* ) then + set extras="CC=gcc" + else + set compat="$compat timegm.o" + endif + set arch=other + breaksw +default: + echo "Illegal choice\!" + echo "Installation aborted." + exit 1 + breaksw +endsw +source installib +sed 's/[ ]*$//' > $rmake << _EOF_ +#!/bin/sh +exec make "SPECIAL=$special" \ + "OPT=$opt" \ + "MACH=$mach" \ + ARCH=$arch "COMPAT=$compat" \ + INSTDIR=$idir \ + LIBDIR=$ldir \ + ESUFFIX=$esuffix \ + $extras "\$@" -f Rmakefile +_EOF_ +chmod 755 $rmake +chmod 644 src/*/Rmakefile src/rt/devtable.c +gotrmake: +echo "Current rmake command is:" +cat $rmake +echo -n "Do you want to change it? " +set ans="$<" +if ( "$ans" =~ [yY]* ) then + cp $rmake /tmp/rmake$$ + $EDITOR $rmake + if ( `cat $rmake /tmp/rmake$$ | grep OPT= | uniq | wc -l` == 2 ) set newrmake + rm -f /tmp/rmake$$ +endif +if ( ! -d src/lib ) then + mkdir src/lib +endif +if ( $?newrmake ) then + echo 'New rmake command -- running "makeall clean"...' + csh -f $0 clean +endif +cd src +echo "Making programs..." +set errs=0 +foreach i ( $srcdirs ) + pushd $i + echo "In directory $i..." + $rmake -k $* + @ errs += $status + popd +end +if ( $errs ) then + echo "There were some errors." +else + echo "Done." +endif +cd .. +if (! $inpath ) then + echo "" + echo "Add $idir to the beginning of your execution path:" + echo 'For C-shell users, put the following into ~/.cshrc' + echo " set path=( $idir "'$path )' + echo 'For Bourne shell users, put the following into $HOME/.profile' + echo " PATH=$idir"':$PATH' + echo " export PATH" +endif +else +cd src +foreach i ( $srcdirs ) + pushd $i + echo "In directory $i..." + make -f Rmakefile $* + popd +end +cd .. +foreach i ( $* ) + if ( "$i" == clean ) then + echo "Removing library archives..." + rm -f src/lib/*.{a,o,la} + endif +end +echo "Done." +endif +exit 0 diff -r 000000000000 -r 0aa115157c9c orig/markpath.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/markpath.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,43 @@ +#!/bin/csh -f +# RCSid: $Id: markpath.csh,v 2.2 2004/01/01 19:44:07 greg Exp $ +# +# Put right trianglar markers down a path at the given intervals. +# Use with replmarks to place regular-sized objects along a path. +# Shorter (y-side) of triangles is always horizontal (perp. to z). +# +# Input is an ordered list of 3-D points defining the path. +# We interpolate the path and align our markers with it. +# Triangles are sized and aligned so tip of one meets butt of next +# +if ($#argv < 2) then + echo "Usage: $0 3d.pts spacing [markmat]" + exit 1 +endif +set pts=$1 +set step=$2 +set mat=mark +if ($#argv > 2) set mat=$3 +set npts=`wc -l < $pts` +(head -1 $pts ; cat $pts) | rlam - $pts \ + | rcalc -e '$1=d($1,$2,$3,$4,$5,$6)' -e "cond=$npts+.5-recno" \ + -e 's(x):x*x;d(x0,y0,z0,x1,y1,z1):sqrt(s(x1-x0)+s(y1-y0)+s(z1-z0))' \ + | total -1 -r > /tmp/run$$.dat +rlam /tmp/run$$.dat $pts | tabfunc -i xp yp zp > /tmp/path$$.cal +set tmax=`tail -1 /tmp/run$$.dat` +set nsteps=`ev "floor($tmax/$step)"` +echo $mat > /tmp/tri$$.fmt +cat >> /tmp/tri$$.fmt << '_EOF_' +polygon marker.${recno} +0 +0 +9 + ${ x0 } ${ y0 } ${ z0 } + ${ x1 } ${ y1 } ${ z1 } + ${ x2 } ${ y2 } ${ z2 } + +'_EOF_' +cnt $nsteps | rcalc -o /tmp/tri$$.fmt -f /tmp/path$$.cal -e st=$step \ + -e 't=$1*st;x0=xp(t);y0=yp(t);z0=zp(t)' \ + -e 'x1=xp(t+st);y1=yp(t+st);z1=zp(t+st)' \ + -e 'x2=x0+.5*(y0-y1);y2=y0+.5*(x1-x0);z2=z0' +rm /tmp/run$$.dat /tmp/path$$.cal /tmp/tri$$.fmt diff -r 000000000000 -r 0aa115157c9c orig/mkhtmlman.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/mkhtmlman.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,20 @@ +#!/bin/csh -fe +# RCSid $Id: mkhtmlman.csh,v 1.1 2005/10/26 23:56:21 greg Exp $ +# +# Build man pages in HTML for Radiance website +# +cd man +mkdir man_html +foreach sect (1 3 5) +cd man$sect +foreach mpage (*.$sect) + nroff -man $mpage \ + | man2html -title "Radiance $mpage:r program" -nodepage \ + -cgiurl '$title.$section.html' \ + > ../man_html/$mpage.html +end +cd .. +end +tar czf ../man_html.tar.gz man_html +echo "Pages in man_html.tar.gz" +exec rm -r man_html diff -r 000000000000 -r 0aa115157c9c orig/normpat.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/normpat.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,147 @@ +#!/bin/csh -f +# RCSid: $Id: normpat.csh,v 2.7 2008/08/25 04:50:32 greg Exp $ +# +# Normalize a pattern for tiling (-b option blends edges) by removing +# lowest frequencies from image (-f option) and reducing to +# standard size (-r option) +# +set ha=$0 +set ha=$ha:t +set pf="pfilt -e 2" +while ($#argv > 0) + switch ($argv[1]) + case -r: + shift argv + set pf="$pf -x $argv[1] -y $argv[1] -p 1 -r .67" + breaksw + case -f: + set ha="$ha -f" + set dofsub + breaksw + case -b: + set ha="$ha -b" + set blend + breaksw + case -v: + set verb + breaksw + case -*: + echo bad option $argv[1] + exit 1 + default: + goto dofiles + endsw + shift argv +end +dofiles: +onintr quit +set td=`mktemp -d /tmp/np.XXXXXX` +goto skipthis +cat > $td/coef.fmt << '_EOF_' + rm:${ $25 }; gm:${ $26 }; bm:${ $27 }; + rcx:${ $1 }; gcx:${ $9 }; bcx:${ $17 }; + rcy:${ $2 }; gcy:${ $10 }; bcy:${ $18 }; + rsx:${ $3 }; gsx:${ $11 }; bsx:${ $19 }; + rsy:${ $4 }; gsy:${ $12 }; bsy:${ $20 }; +rcxcy:${ $5 }; gcxcy:${ $13 }; bcxcy:${ $21 }; +rcxsy:${ $6 }; gcxsy:${ $14 }; bcxsy:${ $22 }; +rsxcy:${ $7 }; gsxcy:${ $15 }; bsxcy:${ $23 }; +rsxsy:${ $8 }; gsxsy:${ $16 }; bsxsy:${ $24 }; +'_EOF_' +cat > $td/coef.cal << '_EOF_' +$1=$3*2*cx; $2=$3*2*cy; $3=$3*2*sx; $4=$3*2*sy; +$5=$3*4*cx*cy; $6=$3*4*cx*sy; $7=$3*4*sx*cy; $8=$3*4*sx*sy; +$9=$4*2*cx; $10=$4*2*cy; $11=$4*2*sx; $12=$4*2*sy; +$13=$4*4*cx*cy; $14=$4*4*cx*sy; $15=$4*4*sx*cy; $16=$4*4*sx*sy; +$17=$5*2*cx; $18=$5*2*cy; $19=$5*2*sx; $20=$5*2*sy; +$21=$5*4*cx*cy; $22=$5*4*cx*sy; $23=$5*4*sx*cy; $24=$5*4*sx*sy; +$25=$3; $26=$4; $27=$5; +cx=cos(wx); cy=cos(wy); +sx=sin(wx); sy=sin(wy); +wx=2*PI/xres*($1+.5); wy=2*PI/yres*($2+.5); +'_EOF_' +cat > $td/fsub.cal << '_EOF_' +PI:3.14159265358979323846; +ro=ri(1)*rm/(rm+rcx*cx+rcy*cy+rsx*sx+rsy*sy + +rcxcy*cx*cy+rcxsy*cx*sy+rsxcy*sx*cy+rsxsy*sx*sy); +go=gi(1)*gm/(gm+gcx*cx+gcy*cy+gsx*sx+gsy*sy + +gcxcy*cx*cy+gcxsy*cx*sy+gsxcy*sx*cy+gsxsy*sx*sy); +bo=bi(1)*bm/(bm+bcx*cx+bcy*cy+bsx*sx+bsy*sy + +bcxcy*cx*cy+bcxsy*cx*sy+bsxcy*sx*cy+bsxsy*sx*sy); +cx=cos(wx); cy=cos(wy); +sx=sin(wx); sy=sin(wy); +wx=2*PI/xres*(x+.5); wy=2*PI/yres*(y+.5); +'_EOF_' +skipthis: +foreach f ($*) + if ( $?verb ) then + echo $f\: + echo adjusting exposure/size... + endif + $pf $f > $td/pf + getinfo < $td/pf > $f + ed - $f << _EOF_ +i +$ha +. +w +q +_EOF_ + set resolu=`getinfo -d < $td/pf | sed 's/-Y \([1-9][0-9]*\) +X \([1-9][0-9]*\)/\2 \1/'` + if ( ! $?dofsub ) then + mv $td/pf $td/hf + goto donefsub + endif + # if ( $?verb ) then + # echo computing Fourier coefficients... + # endif + # pfilt -1 -x 32 -y 32 $td/pf | pvalue -h \ + # | rcalc -e 'xres:32;yres:32' -f $td/coef.cal \ + # | total -m | rcalc -o $td/coef.fmt \ + # > $td/coef + if ( $?verb ) then + # cat $td/coef + echo removing low frequencies... + endif + pgblur -r `ev "sqrt($resolu[1]*$resolu[2])/8"` $td/pf > $td/lf + pcomb -e 's=1/li(2);ro=s*ri(1);go=s*gi(1);bo=s*bi(1)' \ + $td/pf $td/lf > $td/hf + # pcomb -f $td/coef -f $td/fsub.cal $td/pf > $td/hf + donefsub: + if ( $?blend ) then + if ( $?verb ) then + echo blending edges... + endif + @ mar= $resolu[1] - 3 + @ les= $resolu[1] - 1 + pcompos -x 1 $td/hf 0 0 | pfilt -1 -x 3 > $td/left + pcompos $td/hf -$les 0 | pfilt -1 -x 3 > $td/right + pcomb -e 'ro=f(ri);go=f(gi);bo=f(bi)' \ + -e 'f(p)=(3-x)/7*p(1)+(4+x)/7*p(2)' \ + $td/right $td/left > $td/left.patch + pcomb -e 'ro=f(ri);go=f(gi);bo=f(bi)' \ + -e 'f(p)=(1+x)/7*p(1)+(6-x)/7*p(2)' \ + $td/left $td/right > $td/right.patch + pcompos $td/hf 0 0 $td/left.patch 0 0 $td/right.patch $mar 0 \ + > $td/hflr + @ mar= $resolu[2] - 3 + @ les= $resolu[2] - 1 + pcompos -y 1 $td/hflr 0 0 | pfilt -1 -y 3 > $td/bottom + pcompos $td/hflr 0 -$les | pfilt -1 -y 3 > $td/top + pcomb -e 'ro=f(ri);go=f(gi);bo=f(bi)' \ + -e 'f(p)=(3-y)/7*p(1)+(4+y)/7*p(2)' \ + $td/top $td/bottom > $td/bottom.patch + pcomb -e 'ro=f(ri);go=f(gi);bo=f(bi)' \ + -e 'f(p)=(1+y)/7*p(1)+(6-y)/7*p(2)' \ + $td/bottom $td/top > $td/top.patch + pcompos $td/hflr 0 0 $td/bottom.patch 0 0 $td/top.patch 0 $mar \ + | getinfo - >> $f + else + getinfo - < $td/hf >> $f + endif + if ( $?verb ) then + echo $f done. + endif +end +quit: +rm -rf $td diff -r 000000000000 -r 0aa115157c9c orig/objline.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/objline.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,40 @@ +#!/bin/csh -f +# RCSid: $Id: objline.csh,v 2.6 2008/11/30 19:56:02 greg Exp $ +# Create four standard views of scene and present as line drawings +# +set oblqxf="-rz 45 -ry 45" +onintr quit +set d=`mktemp -d /tmp/ol.XXXXXX` +if ($#argv) then + set origf="" + set oblqf="" + foreach f ($argv) + set fn="$f:t" + set fn="$fn:r" + xform $f:q > $d/$fn:q.orig + rad2mgf $d/$fn:q.orig > $d/$fn:q.orig.mgf + set origf=($origf:q $fn:q.orig.mgf) + echo i $fn:q.orig.mgf $oblqxf > $d/$fn:q.oblq.mgf + set oblqf=($oblqf:q $fn:q.oblq.mgf) + end +else + set origf=stdin.orig.mgf + set oblqf=stdin.oblq.mgf + xform > $d/stdin.orig + rad2mgf $d/stdin.orig > $d/stdin.orig.mgf + echo i stdin.orig.mgf $oblqxf > $d/stdin.oblq.mgf +endif +cd $d +set rce='xm=($1+$2)/2;ym=($3+$4)/2;zm=($5+$6)/2;\ +max(a,b):if(a-b,a,b);r=max(max($2-$1,$4-$3),$6-$5)*.52;\ +$1=xm-r;$2=xm+r;$3=ym-r;$4=ym+r;$5=zm-r;$6=zm+r' +set origdim=`getbbox -h *.orig | rcalc -e $rce:q` +set oblqdim=`xform $oblqxf *.orig | getbbox -h | rcalc -e $rce:q` +mgf2meta -t .005 x $origdim $origf > x.mta +mgf2meta -t .005 y $origdim $origf > y.mta +mgf2meta -t .005 z $origdim $origf > z.mta +mgf2meta -t .005 x $oblqdim $oblqf > o.mta +plot4 {x,y,z,o}.mta +quit: +cd +exec rm -rf $d diff -r 000000000000 -r 0aa115157c9c orig/objpict.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/objpict.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,76 @@ +#!/bin/csh -f +# RCSid: $Id: objpict.csh,v 2.7 2009/07/22 17:48:07 greg Exp $ +# +# Make a nice multi-view picture of an object +# Command line arguments contain materials and object files +# +set tmpdir=/tmp/objv$$ +mkdir $tmpdir +set xres=1024 +set yres=1024 +set rpict="rpict -av .2 .2 .2 -x $xres -y $yres" +set inprad=op$$.rad +set testroom=$tmpdir/testroom.rad +set octree=$tmpdir/op.oct +onintr quit +if ( $#argv ) then + cat $* > $inprad +else + cat > $inprad +endif +cat > $testroom << '_EOF_' +void plastic wall_mat 0 0 5 .681 .543 .686 0 .2 +void light bright 0 0 3 3000 3000 3000 +bright sphere lamp0 0 0 4 4 4 -4 .1 +bright sphere lamp1 0 0 4 4 0 4 .1 +bright sphere lamp2 0 0 4 0 4 4 .1 +wall_mat polygon box.1540 0 0 12 + 5 -5 -5 + 5 -5 5 + -5 -5 5 + -5 -5 -5 +wall_mat polygon box.4620 0 0 12 + -5 -5 5 + -5 5 5 + -5 5 -5 + -5 -5 -5 +wall_mat polygon box.2310 0 0 12 + -5 5 -5 + 5 5 -5 + 5 -5 -5 + -5 -5 -5 +wall_mat polygon box.3267 0 0 12 + 5 5 -5 + -5 5 -5 + -5 5 5 + 5 5 5 +wall_mat polygon box.5137 0 0 12 + 5 -5 5 + 5 -5 -5 + 5 5 -5 + 5 5 5 +wall_mat polygon box.6457 0 0 12 + -5 5 5 + -5 -5 5 + 5 -5 5 + 5 5 5 +'_EOF_' +set dims=`getbbox -h $inprad` +set siz=`rcalc -n -e 'max(a,b):if(a-b,a,b);$1='"max($dims[2]-$dims[1],max($dims[4]-$dims[3],$dims[6]-$dims[5]))"` +set vw1="-vtl -vp 2 .5 .5 -vd -1 0 0 -vh 1 -vv 1" +set vw2="-vtl -vp .5 2 .5 -vd 0 -1 0 -vh 1 -vv 1" +set vw3="-vtl -vp .5 .5 2 -vd 0 0 -1 -vu -1 0 0 -vh 1 -vv 1" +set vw4="-vp 3 3 3 -vd -1 -1 -1 -vh 20 -vv 20" + +xform -t `ev "-($dims[1]+$dims[2])/2" "-($dims[3]+$dims[4])/2" "-($dims[5]+$dims[6])/2"` \ + -s `ev 1/$siz` -t .5 .5 .5 $inprad \ + | oconv $testroom - > $octree +pcompos "\!$rpict $vw3 $octree" 0 $yres \ + "\!$rpict $vw4 $octree" $xres $yres \ + "\!$rpict $vw1 $octree" 0 0 \ + "\!$rpict $vw2 $octree" $xres 0 \ + | pfilt -1 -r .6 -x /2 -y /2 + +quit: +rm -r $tmpdir $inprad +exit 0 diff -r 000000000000 -r 0aa115157c9c orig/objview.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/objview.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,113 @@ +#!/bin/csh -f +# RCSid: $Id: objview.csh,v 2.12 2009/01/13 22:19:25 greg Exp $ +# +# Make a nice view of an object +# Arguments are scene input files +# +set tmpdir=/tmp +set octree=$tmpdir/ov$$.oct +set lights=$tmpdir/lt$$.rad +set rif=$tmpdir/ov$$.rif +set ambf=$tmpdir/af$$.amb +set tmpfiles="$octree $lights $rif $ambf" +set raddev="x11" +set up="Z" +set vw="XYZ" +set rendopts="" +set opts="" +while ($#argv > 0) + switch ($argv[1]) + case -g*: + set usegl + breaksw + case -u: + shift argv + set up=$argv[1] + breaksw + case -s: + case -w: + set opts=($opts $argv[1]) + breaksw + case -b*: + set rendopts=($rendopts -bv) + breaksw + case -v: + shift argv + set vw="$argv[1]" + breaksw + case -N: + shift argv + set opts=($opts -N $argv[1]) + set radopt + breaksw + case -o: + shift argv + set raddev="$argv[1]" + set radopt + breaksw + case -V: + case -e: + set opts=($opts $argv[1]) + set radopt + breaksw + case -S: + set opts=($opts $argv[1]) + set glradopt + breaksw + case -*: + echo "Bad option: $argv[1]" + exit 1 + default: + break + endsw + shift argv +end +if ( $#argv == 0 ) then + echo "No input files specified" + exit 1 +endif +if ( $?usegl ) then + if ( $?radopt ) then + echo "bad option for glrad" + glrad + exit 1 + endif +else + if ( $?glradopt ) then + echo "bad option for rad" + rad + exit 1 + endif +endif + +onintr quit + +cat > $lights <<_EOF_ +void glow dim 0 0 4 .1 .1 .15 0 +dim source background 0 0 4 0 0 1 360 +void light bright 0 0 3 1000 1000 1000 +bright source sun1 0 0 4 1 .2 1 5 +bright source sun2 0 0 4 .3 1 1 5 +bright source sun3 0 0 4 -1 -.7 1 5 +_EOF_ + +cat > $rif <<_EOF_ +scene= $argv[*]:q $lights +EXPOSURE= .5 +UP= $up +view= $vw +OCTREE= $octree +oconv= -f +AMBF= $ambf +render= $rendopts +_EOF_ + +if ( $?usegl ) then + glrad $opts $rif +else + rad -o $raddev $opts $rif +endif + +quit: +rm -f $tmpfiles +exit 0 diff -r 000000000000 -r 0aa115157c9c orig/optics2rad.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/optics2rad.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,97 @@ +#!/bin/csh -f +# RCSid $Id: optics2rad.csh,v 2.3 2008/08/25 04:50:31 greg Exp $ +# +# Convert Optics 5 output to correct Radiance input +# +if ($#argv < 1) then + echo "Usage: $0 optics.mat .." + exit 1 +endif +set optf=`mktemp /tmp/optfmt.XXXXXXX` +cat > $optf << '_EOF_' +void glass $(name)_glass +0 +0 +3 ${Rtn} ${Gtn} ${Btn} + +void BRTDfunc $(name)_front +10 + ${fRrho} ${fGrho} ${fBrho} + ${Rtau} ${Gtau} ${Btau} + 0 0 0 + . +0 +9 0 0 0 0 0 0 0 0 0 + +void BRTDfunc $(name)_back +10 + ${bRrho} ${bGrho} ${bBrho} + ${Rtau} ${Gtau} ${Btau} + 0 0 0 + . +0 +9 0 0 0 0 0 0 0 0 0 +'_EOF_' + +echo "# Output generated by $0 from $*" +sed -e '/^[^#]/d' -e '/^$/d' $* + +set outf=`mktemp /tmp/outfmt.XXXXXX` +cat > $outf << '_EOF_' + +void glass $(name) +0 +0 +3 ${Rtn} ${Gtn} ${Btn} +'_EOF_' + +rcalc -l -e 'abs(x):if(x,x,-x);and(a,b):if(a,b,a);not(x):if(x,-1,1)' \ + -e 'lum(r,g,b):.265*r+.670*g+.065*b' \ + -e 'trans=lum(Rtau,Gtau,Btau)' \ + -e 'rfront=lum(fRrho,fGrho,fBrho);rback=lum(bRrho,bGrho,bBrho)' \ + -e 'cond=0.005-abs(rfront-rback)' \ + -i $optf -o $outf $* + +cat > $outf << '_EOF_' + +void BRTDfunc $(name) +10 + rR_clear rG_clear rB_clear + ${Rtau}*tR_clear ${Gtau}*tG_clear ${Btau}*tB_clear + 0 0 0 + window.cal +0 +15 0 0 0 0 0 0 0 0 0 + ${fRrho} ${fGrho} ${fBrho} + ${bRrho} ${bGrho} ${bBrho} +'_EOF_' + +rcalc -l -e 'abs(x):if(x,x,-x);and(a,b):if(a,b,a);not(x):if(x,-1,1)' \ + -e 'lum(r,g,b):.265*r+.670*g+.065*b' \ + -e 'trans=lum(Rtau,Gtau,Btau)' \ + -e 'rfront=lum(fRrho,fGrho,fBrho);rback=lum(bRrho,bGrho,bBrho)' \ + -e 'cond=and(trans-.645, not(0.005-abs(rfront-rback)))' \ + -i $optf -o $outf $* + +cat > $outf << '_EOF_' + +void BRTDfunc $(name) +10 + rR_bronze rG_bronze rB_bronze + ${Rtau}*tR_bronze ${Gtau}*tG_bronze ${Btau}*tB_bronze + 0 0 0 + window.cal +0 +15 0 0 0 0 0 0 0 0 0 + ${fRrho} ${fGrho} ${fBrho} + ${bRrho} ${bGrho} ${bBrho} +'_EOF_' + +rcalc -l -e 'abs(x):if(x,x,-x);and(a,b):if(a,b,a);not(x):if(x,-1,1)' \ + -e 'lum(r,g,b):.265*r+.670*g+.065*b' \ + -e 'trans=lum(Rtau,Gtau,Btau)' \ + -e 'rfront=lum(fRrho,fGrho,fBrho);rback=lum(bRrho,bGrho,bBrho)' \ + -e 'cond=and(not(trans-.645), not(0.005-abs(rfront-rback)))' \ + -i $optf -o $outf $* + +rm -f $optf $outf diff -r 000000000000 -r 0aa115157c9c orig/pacuity.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pacuity.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,79 @@ +#!/bin/csh -f +# RCSid: $Id: pacuity.csh,v 3.6 2008/11/10 19:08:19 greg Exp $ +# +# Adjust picture acuity according to human visual abilities +# +if ($#argv != 1) then + echo "Usage: $0 input.hdr > output.hdr" + exit 1 +endif +set td=/tmp +set tfc1=$td/ac$$.cal +set tf=($td/c{1,2,4,8,16,32}d$$.hdr $tfc1) +set ifile=$1 +onintr quit +tabfunc -i acuity > $tfc1 << EOF +# Log10 luminance vs. visual acuity in cycles/degree +-2.804 2.09 +-2.363 3.28 +-2.076 3.79 +-1.792 4.39 +-1.343 6.11 +-1.057 8.83 +-0.773 10.94 +-0.371 18.66 +-0.084 23.88 +0.2 31.05 +0.595 37.42 +0.882 37.68 +1.166 41.60 +1.558 43.16 +1.845 45.30 +2.129 47.00 +2.577 48.43 +2.864 48.32 +3.148 51.06 +3.550 51.09 +EOF +set pres=(`getinfo -d < $ifile | sed 's/^-Y \([1-9][0-9]*\) +X \([1-9][0-9]*\)$/\2 \1/'`) +set vp=`vwright V < $ifile` +set aext=(`pextrem -o $ifile | rcalc -f $tfc1 -e 'max(a,b):if(a-b,a,b);$1=acuity(log10(max(179*(.265*$3+.67*$4+.065*$5),1e-4)))'`) +( rcalc -e "$vp" -e "A:3438*sqrt(Vhn/$pres[1]*Vvn/$pres[2])" \ + -e 'f=60/A/2/$1;cond=if(1.5-$1,1,if(1-f,-1,if($1-'"$aext[2]"',-1,$1-'"$aext[1])))" \ + -o 'pfilt -1 -r 2 -x /${f} -y /${f} '"$ifile | pfilt -1 -r 1 -x $pres[1] -y $pres[2] > $td/"'c${$1}d'$$.hdr \ + | csh -f ) << EOF +1 +2 +4 +8 +16 +32 +EOF +cat >> $tfc1 << _EOF_ +max(a,b) : if(a-b, a, b); +target_acuity = acuity(log10(max(WE/le(1)*li(1),1e-4))); +findfuzzy(i) = if(target_acuity-picture_acuity(i),i,if(i-1.5,findfuzzy(i-1),1)); +fuzzy_picture = findfuzzy(nfiles-1); +clear_picture = fuzzy_picture + 1; +clarity_ex = (target_acuity-picture_acuity(fuzzy_picture)) / + (picture_acuity(clear_picture)-picture_acuity(fuzzy_picture)); +clarity = if(clarity_ex-1, 1, if(-clarity_ex, 0, clarity_ex)); +ro = clarity*ri(clear_picture) + (1-clarity)*ri(fuzzy_picture); +go = clarity*gi(clear_picture) + (1-clarity)*gi(fuzzy_picture); +bo = clarity*bi(clear_picture) + (1-clarity)*bi(fuzzy_picture); +picture_acuity(n) : select(n,1, +_EOF_ +set pf=($td/c1d$$.hdr) +foreach i (2 4 8 16 32) + if ( -f $td/c${i}d$$.hdr ) then + set pf=( $pf $td/c${i}d$$.hdr ) + echo -n "$i," >> $tfc1 + endif +end +set pf=( $pf $ifile ) +rcalc -n -e "$vp" -e "A:3879*sqrt(Vhn/$pres[1]*Vvn/$pres[2])" \ + -o '${60/A});' >> $tfc1 +getinfo < $ifile | egrep '^((VIEW|EXPOSURE|PIXASPECT|PRIMARIES|COLORCORR)=|[^ ]*(rpict|rview|pinterp) )' +pcomb -f $tfc1 $pf +quit: +rm -f $tf diff -r 000000000000 -r 0aa115157c9c orig/pbilat.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pbilat.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,56 @@ +#!/bin/csh -f +# RCSid $Id: pbilat.csh,v 1.3 2008/11/10 19:08:19 greg Exp $ +# +# Bilateral Filter (fixed parameters for now) +# +set bfrac=0.02 +set sigma=0.4 +set vmin=1e-7 +if ( $#argv != 1 ) then + goto userr +endif +set inp="$1" +set rad=`getinfo -d < $inp:q | rcalc -i '-Y ${yr} +X ${xr}' -e '$1=sqrt(xr*yr)*'$bfrac` +set extrem=`pextrem -o $inp:q | rcalc -e "vmin:$vmin" -e 'max(a,b):if(a-b,a,b);$1=max($3*.265+$4*.670+$5*.065,vmin)'` +set nseg=`ev "ceil(log10($extrem[2]/$extrem[1])/$sigma)"` +if ( $nseg > 20 ) set nseg=20 +onintr done +set tdir=`mktemp -d /tmp/blf.XXXXXX` +set gfunc="sq(x):x*x;gfunc(x):if(sq(x)-sq($sigma),0,sq(1-sq(x/$sigma)))" +set i=0 +set imglist=() +while ( $i <= $nseg ) + set intens=`ev "$extrem[1]*($extrem[2]/$extrem[1])^($i/$nseg)"` + pcomb -e $gfunc:q -e "vmin:$vmin" \ + -e 'max(a,b):if(a-b,a,b);l1=max(li(1),vmin)' \ + -e "lo=gfunc(log10(l1)-log10($intens))" \ + -o $inp > $tdir/gimg.hdr + pcomb -e 'sf=gi(2);ro=sf*ri(1);go=sf*gi(1);bo=sf*bi(1)' \ + -o $inp $tdir/gimg.hdr > $tdir/g_p.hdr + pgblur -r $rad $tdir/g_p.hdr \ + | pcomb -e 'sf=if(gi(2)-1e-6,1/gi(2),1e6)' \ + -e 'ro=sf*ri(1);go=sf*gi(1);bo=sf*bi(1)' \ + - "\!pgblur -r $rad $tdir/gimg.hdr" \ + > $tdir/gimg$i.hdr + set imglist=($imglist $tdir/gimg$i.hdr) + @ i++ +end +cat > $tdir/interp.cal << _EOF_ +{ Segmented intensity image interpolation } +max(a,b) : if(a-b, a, b); +NSEG : $nseg; +l1 = max(li(1), $vmin); +val = NSEG / log($extrem[2]/$extrem[1]) * (log(l1) - log($extrem[1])); +iv = floor(val); +ival = if(iv - (NSEG-1), NSEG-1, max(iv, 0)); +xval = val - ival; +ro = (1-xval)*ri(ival+2) + xval*ri(ival+3); +go = (1-xval)*gi(ival+2) + xval*gi(ival+3); +bo = (1-xval)*bi(ival+2) + xval*bi(ival+3); +_EOF_ +pcomb -h -f $tdir/interp.cal -o $inp:q $imglist +done: +rm -rf $tdir +exit 0 +userr: +echo Usage: $0 input.hdr diff -r 000000000000 -r 0aa115157c9c orig/pdelta.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pdelta.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,33 @@ +#!/bin/csh -f +# RCSid: $Id: pdelta.csh,v 3.3 2008/11/10 19:08:19 greg Exp $ +# +# Compute 1976 CIE Lab deltaE* between two Radiance pictures +# +if ($#argv != 2) then + echo "Usage: $0 picture1 picture2 > output.hdr" + exit 1 +endif +set cielab='sq(x):x*x;Ls(Yi):if(Yi/Yw-.01,116*(Yi/Yw)^(1/3)-16,903.3*Yi/Yw);as(Xi,Yi,Zi):500*((Xi/Xw)^(1/3)-(Yi/Yw)^(1/3));bs(Xi,Yi,Zi):200*((Yi/Yw)^(1/3)-(Zi/Zw)^(1/3));dE(X1,Y1,Z1,X2,Y2,Z2):sqrt(sq(Ls(Y1)-Ls(Y2))+sq(as(X1,Y1,Z1)-as(X2,Y2,Z2))+sq(bs(X1,Y1,Z1)-bs(X2,Y2,Z2)));' +# The following is for Radiance RGB -> XYZ +set rgb2xyz='X(R,G,B):92.03*R+57.98*G+28.99*B;Y(R,G,B):47.45*R+119.9*G+11.6*B;Z(R,G,B):4.31*R+21.99*G+152.7*B' +# The following is for sRGB -> XYZ +# set rgb2xyz='X(R,G,B):73.82*R+64.01*G+32.31*B;Y(R,G,B):38.06*R+128*G+12.92*B;Z(R,G,B):3.46*R+21.34*G+170.15*B' +set f1="$1" +set inp1='x1=ri(1);y1=gi(1);z1=bi(1)' +set f2="$2" +set inp2='x2=ri(2);y2=gi(2);z2=bi(2)' +if ( "`getinfo < $f1:q | grep '^FORMAT=32-bit_rle_xyze'`" == "" ) then + set inp1='x1=X(ri(1),gi(1),bi(1));y1=Y(ri(1),gi(1),bi(1));z1=Z(ri(1),gi(1),bi(1))' +endif +if ( "`getinfo < $f2:q | grep '^FORMAT=32-bit_rle_xyze'`" == "" ) then + set inp2='x2=X(ri(2),gi(2),bi(2));y2=Y(ri(2),gi(2),bi(2));z2=Z(ri(2),gi(2),bi(2))' +endif +set tempf=`mktemp /tmp/tf.XXXXXX` +pfilt -1 -x 128 -y 128 -p 1 $f1:q | pvalue -o -h -H -d > $tempf +set wht=(`total -u $tempf`) +set avg=`rcalc -e '$1=$2' $tempf | total -m` +rm $tempf +pcomb -e $cielab:q -e $rgb2xyz:q \ + -e "Yw:179*3*$avg; Xw:$wht[1]*Yw/$wht[2]; Zw:$wht[3]*Yw/$wht[2]" \ + -e $inp1:q -e $inp2:q -e 'lo=dE(x1,y1,z1,x2,y2,z2)' \ + -o $f1:q -o $f2:q diff -r 000000000000 -r 0aa115157c9c orig/pdfblur.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pdfblur.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,23 @@ +#!/bin/csh -f +# RCSid: $Id: pdfblur.csh,v 2.6 2005/01/18 01:37:43 greg Exp $ +# +# Generate views for depth-of-field blurring on picture +# +if ($#argv != 3) then + echo "Usage: $0 aperture nsamp viewfile" + exit 1 +endif +set a = "$1" +set n = "$2" +set vf = "$3" +cnt $n | rcalc -e `vwright i < $vf` \ +-e "M:$n/5+1;a:$a/2;N:$n;" -e 'tmax:PI*a*(M+1)' \ +-e 't=tmax/N*($1+rand($1))' \ +-e 'theta=2*M*PI/(M-1)*(M-sqrt(M*M-(M-1)/(PI*a)*t))' \ +-e 'r=a*(1-(M-1)/(2*M*M*PI)*theta)' \ +-e 'rcost=r*cos(theta);rsint=r*sin(theta)' \ +-e 'opx=ipx+rcost*ihx+rsint*ivx' \ +-e 'opy=ipy+rcost*ihy+rsint*ivy' \ +-e 'opz=ipz+rcost*ihz+rsint*ivz' \ +-e 'os=is-rcost/(id*ihn);ol=il-rsint/(id*ivn)' \ +-o 'VIEW= -vp ${opx} ${opy} ${opz} -vs ${os} -vl ${ol}' diff -r 000000000000 -r 0aa115157c9c orig/pgblur.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pgblur.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,29 @@ +#!/bin/csh -f +# RCSid $Id: pgblur.csh,v 1.2 2008/11/10 19:08:19 greg Exp $ +# +# Apply Gaussian blur without resizing image +# More efficient than straight pfilt for large blurs +# +if ( $#argv != 3 ) then + goto userr +endif +if ( "$1" != "-r" ) then + goto userr +endif +if ( "$2" !~ [1-9]* ) then + goto userr +endif +set rad = $2 +set inp = "$3" +set reduc = `ev "floor($rad/1.8)"` +if ( $reduc <= 1 ) then + exec pfilt -1 -r $rad $inp:q +endif +set filt = `ev "$rad/$reduc"` +set pr=`getinfo -d < $inp:q | sed 's/^-Y \([1-9][0-9]*\) +X \([1-9][0-9]*\)$/\2 \1/'` +pfilt -1 -x /$reduc -y /$reduc $inp:q \ + | pfilt -1 -r $filt -x $pr[1] -y $pr[2] +exit 0 +userr: +echo Usage: "$0 -r radius input.hdr" +exit 1 diff -r 000000000000 -r 0aa115157c9c orig/phisteq.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/phisteq.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,116 @@ +#!/bin/csh -f +# RCSid: $Id: phisteq.csh,v 3.4 2008/11/10 19:08:19 greg Exp $ +set Ldmin=1 # minimum display luminance +set Ldmax=100 # maximum display luminance +set nsteps=100 # number of steps in perceptual histogram +set cvratio=0.08 # fraction of pixels to ignore in envelope clipping +set td=/tmp +set tf1=$td/hist$$ +set tf1b=$td/hist$$.new +set tf2=$td/cumt$$ +set tf3=$td/histeq$$.cal +set tf4=$td/cf$$.cal +set tf=($tf1 $tf1b $tf2 $tf3 $tf4) +if ( $#argv != 1 ) then + echo "Usage: $0 input.hdr > output.hdr" + exit 1 +endif +set ifile=$1 +set ibase=$ifile:t +if ( "$ibase" =~ *.pic ) set ibase=$ibase:r +set ibase=$ibase:t +onintr quit +cat > $tf3 << _EOF_ +WE : 179; { Radiance white luminous efficacy } +Lmin : .0001; { minimum allowed luminance } +Ldmin : $Ldmin ; { minimum output luminance } +Ldmax : $Ldmax ; { maximum output luminance } +Stepsiz : 1/ $nsteps ; { brightness step size } + { Daly local amplitude nonlinearity formulae } +sq(x) : x*x; +c1 : 12.6; +b : .63; +Bl(L) : L / (L + (c1*L)^b); +Lb(B) : (c1^b*B/(1-B))^(1/(1-b)); +BLw(Lw) : Bl(Ldmin) + (Bl(Ldmax)-Bl(Ldmin))*cf(Bl(Lw)); + { first derivative functions } +Bl1(L) : (c1*L)^b*(1-b)/sq(L + (c1*L)^b); +Lb1(B) : c1^b/(1-b)/sq(1-B) * (c1^b*B/(1-B))^(b/(1-b)); + { derivative clamping function } +clamp2(L, aLw) : Lb(aLw) / L / Lb1(aLw) / (Bl(Ldmax)-Bl(Ldmin)) / Bl1(L); +clamp(L) : clamp2(L, BLw(L)); + { histogram equalization function } +lin = li(1); +Lw = WE/le(1) * lin; +Lout = Lb(BLw(Lw)); +mult = if(Lw-Lmin, (Lout-Ldmin)/(Ldmax-Ldmin)/lin, 0) ; +ro = mult * ri(1); +go = mult * gi(1); +bo = mult * bi(1); +_EOF_ +# Compute brightness histogram +pfilt -1 -p 1 -x 128 -y 128 $ifile | pvalue -o -b -d -h -H \ + | rcalc -f $tf3 -e 'Lw=WE*$1;$1=if(Lw-Lmin,Bl(Lw),-1)' \ + | histo 0 1 $nsteps | sed '/[ ]0$/d' > $tf1 +# Clamp frequency distribution +set totcount=`sed 's/^.*[ ]//' $tf1 | total` +set tst=1 +while ( $totcount > 0 ) + sed 's/^.*[ ]//' $tf1 | total -1 -r \ + | rcalc -e '$1=$1/'$totcount | rlam $tf1 - \ + | tabfunc -i 0 cf > $tf4 + if ( $tst <= 0 ) break + rcalc -f $tf4 -f $tf3 -e "T:$totcount*Stepsiz" \ + -e 'clfq=floor(T*clamp(Lb($1)))' \ + -e '$1=$1;$2=if($2-clfq,clfq,$2)' $tf1 > $tf1b + set newtot=`sed 's/^.*[ ]//' $tf1b | total` + set tst=`ev "floor((1-$cvratio)*$totcount)-$newtot"` + mv -f $tf1b $tf1 + set totcount=$newtot +end +if ( $totcount < 1 ) then + # Fits in display range nicely already -- just normalize + pfilt -1 -e `pextrem $ifile | rcalc -e 'cond=recno-1.5;$1=1/(.265*$3+.67*$4+.065*$5)'` $ifile +else + # Plot the mapping function if we are in debug mode + if ( $?DEBUG ) then + cat > ${ibase}_histo.plt << _EOF_ +include=curve.plt +title="Brightness Frequency Distribution" +subtitle= $ibase +ymin=0 +xlabel="Perceptual Brightness B(Lw)" +ylabel="Frequency Count" +Alabel="Histogram" +Alintype=0 +Blabel="Envelope" +Bsymsize=0 +Adata= +_EOF_ + (cat $tf1; echo \;; echo Bdata=) >> ${ibase}_histo.plt + rcalc -f $tf4 -f $tf3 -e "T:$totcount*Stepsiz" \ + -e '$1=$1;$2=T*clamp(Lb($1))' $tf1 \ + >> ${ibase}_histo.plt + cat > ${ibase}_brmap.plt << _EOF_ +include=line.plt +title="Brightness Mapping Function" +subtitle= $ibase +xlabel="World Luminance (log cd/m^2)" +ylabel="Display Luminance (cd/m^2)" +ymax= $Ldmax +Adata= +_EOF_ + cnt 100 | rcalc -f $tf4 -f $tf3 -e '$1=lx;$2=Lb(BLw(10^lx))' \ + -e Lmin:Lb\(`sed -n '1s/[ ].*$//p' $tf1`\) \ + -e Lmax:Lb\(`sed -n '$s/[ ].*$//p' $tf1`\) \ + -e 'lx=$1/99*(log10(Lmax)-log10(Lmin))+log10(Lmin)' \ + >> ${ibase}_brmap.plt + if ( $?DISPLAY ) then + bgraph ${ibase}_histo.plt ${ibase}_brmap.plt | x11meta & + endif + endif + # Map our picture + pcomb -f $tf4 -f $tf3 $ifile +endif +quit: +rm -f $tf diff -r 000000000000 -r 0aa115157c9c orig/phisto.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/phisto.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,24 @@ +#!/bin/csh -f +# RCSid: $Id: phisto.csh,v 3.5 2008/08/25 04:50:32 greg Exp $ +# +# Compute foveal histogram for picture set +# +set tf=`mktemp /tmp/phdat.XXXXX` +onintr quit +if ( $#argv == 0 ) then + pfilt -1 -x 128 -y 128 -p 1 \ + | pvalue -o -h -H -d -b > $tf +else + rm -f $tf + foreach i ( $* ) + pfilt -1 -x 128 -y 128 -p 1 $i \ + | pvalue -o -h -H -d -b >> $tf + if ( $status ) exit 1 + end +endif +set Lmin=`total -l $tf | rcalc -e 'L=$1*179;$1=if(L-1e-7,log10(L)-.01,-7)'` +set Lmax=`total -u $tf | rcalc -e '$1=log10($1*179)+.01'` +rcalc -e 'L=$1*179;cond=L-1e-7;$1=log10(L)' $tf \ + | histo $Lmin $Lmax 100 +quit: +rm -f $tf diff -r 000000000000 -r 0aa115157c9c orig/pmblur.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pmblur.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,20 @@ +#!/bin/csh -f +# RCSid: $Id: pmblur.csh,v 2.3 2005/01/18 03:59:41 greg Exp $ +# +# Generate views for motion blurring on picture +# +if ($#argv != 4) then + echo "Usage: $0 speed nsamp v0file v1file" + exit 1 +endif +set s = "$1" +set n = "$2" +set vc = "$3" +set vn = "$4" +cnt $n | rcalc -e `vwright C < $vc` -e `vwright N < $vn` \ +-e "t=$s/$n"'*($1+rand($1))' \ +-e 'opx=(1-t)*Cpx+t*Npx;opy=(1-t)*Cpy+t*Npy;opz=(1-t)*Cpz+t*Npz' \ +-e 'odx=(1-t)*Cdx*Cd+t*Ndx*Nd;ody=(1-t)*Cdy*Cd+t*Ndy*Nd;odz=(1-t)*Cdz*Cd+t*Ndz*Nd' \ +-e 'oux=(1-t)*Cux+t*Nux;ouy=(1-t)*Cuy+t*Nuy;ouz=(1-t)*Cuz+t*Nuz' \ +-e 'oh=(1-t)*Ch+t*Nh;ov=(1-t)*Cv+t*Nv' \ +-o 'VIEW= -vp ${opx} ${opy} ${opz} -vd ${odx} ${ody} ${odz} -vu ${oux} ${ouy} ${ouz} -vh ${oh} -vv ${ov}' diff -r 000000000000 -r 0aa115157c9c orig/pmdblur.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pmdblur.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,37 @@ +#!/bin/csh -f +# RCSid $Id: pmdblur.csh,v 3.1 2005/01/18 03:59:41 greg Exp $ +# +# Generate views for motion and depth blurring on picture +# +if ($#argv != 5) then + echo "Usage: $0 speed aperture nsamp v0file v1file" + exit 1 +endif +set s = "$1" +set a = "$2" +set n = "$3" +set vc = "$4" +set vn = "$5" +if (`ev "if($s-.01,0,1)"`) then + pdfblur $a $n $vc + exit +endif +if (`ev "if($a,0,1)"`) then + pmblur $s $n $vc $vn + exit +endif +cnt $n | rcalc -e `vwright C < $vc` -e `vwright N < $vn` \ +-e "t=$s/$n"'*($1+rand($1))' \ +-e "r=$a/2"'*sqrt(rand(182+7*$1));theta=2*PI*rand(-10-$1)' \ +-e 'rcost=r*cos(theta);rsint=r*sin(theta)' \ +-e 'opx= (1-t)*(Cpx+rcost*Chx+rsint*Cvx) + t*(Npx+rcost*Nhx+rsint*Nvx)' \ +-e 'opy= (1-t)*(Cpy+rcost*Chy+rsint*Cvy) + t*(Npy+rcost*Nhy+rsint*Nvy)' \ +-e 'opz= (1-t)*(Cpz+rcost*Chz+rsint*Cvz) + t*(Npz+rcost*Nhz+rsint*Nvz)' \ +-e 'odx= (1-t)*Cdx*Cd + t*Ndx*Nd' \ +-e 'ody= (1-t)*Cdy*Cd + t*Ndy*Nd' \ +-e 'odz= (1-t)*Cdz*Cd + t*Ndz*Nd' \ +-e 'oux=(1-t)*Cux+t*Nux;ouy=(1-t)*Cuy+t*Nuy;ouz=(1-t)*Cuz+t*Nuz' \ +-e 'oh=(1-t)*Ch+t*Nh;ov=(1-t)*Cv+t*Nv' \ +-e 'os= (1-t)*(Cs-rcost/(Cd*Chn)) + t*(Ns-rcost/(Nd*Nhn))' \ +-e 'ol= (1-t)*(Cl-rsint/(Cd*Cvn)) + t*(Nl-rsint/(Nd*Nvn))' \ +-o 'VIEW= -vp ${opx} ${opy} ${opz} -vd ${odx} ${ody} ${odz} -vu ${oux} ${ouy} ${ouz} -vh ${oh} -vv ${ov} -vs ${os} -vl ${ol}' diff -r 000000000000 -r 0aa115157c9c orig/psquish.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/psquish.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,197 @@ +#!/bin/csh -f +# RCSid: $Id: psquish.csh,v 3.5 2008/11/10 19:08:19 greg Exp $ +set Lmin=.0001 # minimum visible world luminance +set Ldmin=1 # minimum display luminance +set Ldmax=100 # maximum display luminance +set nsteps=100 # number of steps in perceptual histogram +set cvratio=0.05 # fraction of pixels to ignore in envelope clipping +set td=/tmp +set tf0=$td/tf$$ +set tf1=$td/hist$$ +set tf1b=$td/hist$$.diff +set tf2=$td/cumt$$ +set tf3=$td/histeq$$.cal +set tf4=$td/cf$$.cal +set tf=($tf0 $tf1 $tf1b $tf2 $tf3 $tf4) +if ( "$argv[1]" == "-a" ) then + set adaptive + shift argv +endif +if ( $#argv != 1 ) then + echo "Usage: $0 [-a] input.hdr > output.hdr" + exit 1 +endif +set ifile=$1 +set ibase=$ifile:t +if ( "$ibase" =~ *.hdr ) set ibase=$ibase:r +set ibase=$ibase:t +onintr quit +pextrem -o $ifile > $tf0 +set Lmin=`rcalc -e 'L=179*(.265*$3+.67*$4+.065*$5)' -e 'cond=1.5-recno;$1=if('L-$Lmin,L,$Lmin')' $tf0` +set Lmax=`rcalc -e 'L=179*(.265*$3+.67*$4+.065*$5)' -e 'cond=recno-1.5;$1=if('$Ldmax-L,$Ldmax,L')' $tf0` +cat > $tf3 << _EOF_ +min(a,b) : if(a-b, b, a); +WE : 179; { Radiance white luminous efficacy } +Lmin : $Lmin ; { minimum visible luminance } +Lmax : $Lmax ; { maximum picture luminance } +Ldmin : $Ldmin ; { minimum output luminance } +Ldmax : $Ldmax ; { maximum output luminance } +Stepsiz : (Bl(Lmax)-Bl(Lmin))/ $nsteps ; { brightness step size } + { Logarithmic brightness function } +Bl(L) : log(L); +Lb(B) : exp(B); +BLw(Lw) : Bl(Ldmin) + (Bl(Ldmax)-Bl(Ldmin))*cf(Bl(Lw)); + { first derivative functions } +Bl1(L) : 1/L; +Lb1(B) : exp(B); + { histogram equalization function } +lin = li(1); +Lw = WE/le(1) * lin; +Lout = Lb(BLw(Lw)); +mult = if(Lw-Lmin, (Lout-Ldmin)/(Ldmax-Ldmin)/lin, 0) ; +_EOF_ +if ( $?adaptive ) then + cat >> $tf3 << _EOF_ + { Ferwerda contrast sensitivity function } + { log10 of cone threshold luminance } +ltp(lLa) : if(-2.6 - lLa, -.72, if(lLa - 1.9, lLa - 1.255, + (.249*lLa + .65)^2.7 - .72)); + { log10 of rod threshold luminance } +lts(lLa) : if(-3.94 - lLa, -2.86, if(lLa - -1.44, lLa - .395, + (.405*lLa + 1.6)^2.18 - 2.86)); + { threshold is minimum of rods and cones } +ldL2(lLa) : min(ltp(lLa),lts(lLa)); +dL(La) : 10^ldL2(log10(La)); + { derivative clamping function } +clamp2(L, bLw) : dL(Lb(bLw))/dL(L)/Lb1(bLw)/(Bl(Ldmax)-Bl(Ldmin))/Bl1(L); +clamp(L) : clamp2(L, BLw(L)); + { shift direction for histogram } +shiftdir(B) : if(cf(B) - (B - Bl(Lmin))/(Bl(Ldmax) - Bl(Lmin)), 1, -1); + { Scotopic/Photopic color adjustment } +sL(r,g,b) : .062*r + .608*g + .330*b; { approx. scotopic brightness } +BotMesopic : 10^-2.25; { top of scotopic range } +TopMesopic : 10^0.75; { bottom of photopic range } +incolor = if(Lw-TopMesopic, 1, if(BotMesopic-Lw, 0, + (Lw-BotMesopic)/(TopMesopic-BotMesopic))); +slf = (1 - incolor)*sL(ri(1),gi(1),bi(1)); +ro = mult*(incolor*ri(1) + slf); +go = mult*(incolor*gi(1) + slf); +bo = mult*(incolor*bi(1) + slf); +_EOF_ +else + cat >> $tf3 << _EOF_ + { derivative clamping function } +clamp2(L, bLw) : Lb(bLw)/L/Lb1(bLw)/(Bl(Ldmax)-Bl(Ldmin))/Bl1(L); +clamp(L) : clamp2(L, BLw(L)); + { shift direction for histogram } +shiftdir(B) : -1; +ro = mult*ri(1); +go = mult*gi(1); +bo = mult*bi(1); +_EOF_ +endif +# Compute brightness histogram +pfilt -1 -p 1 -x 128 -y 128 $ifile | pvalue -o -b -d -h -H \ + | rcalc -f $tf3 -e 'Lw=WE*$1;$1=if(Lw-Lmin,Bl(Lw),-1)' \ + | histo `ev "log($Lmin)" "log($Lmax)"` $nsteps > $tf1 +# Clamp frequency distribution +set totcount=`sed 's/^.*[ ]//' $tf1 | total` +set margin=`ev "floor($totcount*$cvratio+.5)"` +while ( 1 ) + # Compute mapping function + sed 's/^.*[ ]//' $tf1 | total -1 -r \ + | rcalc -e '$1=$1/'$totcount | rlam $tf1 - \ + | tabfunc -i 0 cf > $tf4 + # Compute difference with visible envelope + rcalc -f $tf4 -f $tf3 -e "T:$totcount*Stepsiz" \ + -e 'clfq=floor(T*clamp(Lb($1))+.5)' \ + -e '$1=$2-clfq;$2=shiftdir($1)' $tf1 > $tf1b + if (`sed 's/[ ].*$//' $tf1b | total` >= 0) then + # Nothing visible? -- just normalize + pfilt -1 -e `pextrem $ifile | rcalc -e 'cond=recno-1.5;$1=1/(.265*$3+.67*$4+.065*$5)'` $ifile + goto quit + endif + # Check to see if we're close enough + if (`rcalc -e '$1=if($1,$1,0)' $tf1b | total` <= $margin) break + # Squash frequency distribution + set diffs=(`sed 's/[ ].*$//' $tf1b`) + set shftd=(`sed 's/^.*[ ]//' $tf1b`) + while ( 1 ) + set maxi=0 + set maxd=0 + set i=$nsteps + while ( $i > 0 ) + if ( $diffs[$i] > $maxd ) then + set maxd=$diffs[$i] + set maxi=$i + endif + @ i-- + end + if ( $maxd == 0 ) break + set i=0 + tryagain: + set r=$shftd[$maxi] + while ( $i == 0 ) + @ t= $maxi + $r + if ( $t < 1 || $t > $nsteps ) then + @ shftd[$maxi]= -($shftd[$maxi]) + goto tryagain + endif + if ( $diffs[$t] < 0 ) set i=$t + @ r+= $shftd[$maxi] + end + if ( $diffs[$i] <= -$diffs[$maxi] ) then + @ diffs[$i]+= $diffs[$maxi] + set diffs[$maxi]=0 + else + @ diffs[$maxi]+= $diffs[$i] + set diffs[$i]=0 + endif + end + # Mung histogram + echo $diffs | tr ' ' '\012' | rlam $tf1 - \ + | rcalc -f $tf4 -f $tf3 -e "T:$totcount*Stepsiz" \ + -e 'clfq=floor(T*clamp(Lb($1))+.5)' \ + -e '$1=$1;$2=$3+clfq' > $tf1b + mv -f $tf1b $tf1 +end +# Plot the mapping function if we are in debug mode +if ( $?DEBUG ) then + cat > ${ibase}_histo.plt << _EOF_ +include=curve.plt +title="Brightness Frequency Distribution" +subtitle= $ibase +ymin=0 +xlabel="Perceptual Brightness B(Lw)" +ylabel="Frequency Count" +Alabel="Histogram" +Alintype=0 +Blabel="Envelope" +Bsymsize=0 +Adata= +_EOF_ + (cat $tf1; echo \;; echo Bdata=) >> ${ibase}_histo.plt + rcalc -f $tf4 -f $tf3 -e "T:$totcount*Stepsiz" \ + -e '$1=$1;$2=T*clamp(Lb($1))' $tf1 \ + >> ${ibase}_histo.plt + cat > ${ibase}_brmap.plt << _EOF_ +include=line.plt +title="Brightness Mapping Function" +subtitle= $ibase +xlabel="World Luminance (log cd/m^2)" +ylabel="Display Luminance (cd/m^2)" +ymax= $Ldmax +Adata= +_EOF_ + cnt 100 | rcalc -f $tf4 -f $tf3 -e '$1=lx;$2=Lb(BLw(10^lx))' \ + -e 'lx=$1/99*(log10(Lmax)-log10(Lmin))+log10(Lmin)' \ + >> ${ibase}_brmap.plt + if ( $?DISPLAY ) then + bgraph ${ibase}_histo.plt ${ibase}_brmap.plt | x11meta & + endif +endif +# Map our picture +getinfo < $ifile | egrep '^((VIEW|PIXASPECT|PRIMARIES)=|[^ ]*(rpict|rview|pinterp) )' +pcomb -f $tf4 -f $tf3 $ifile +quit: +rm -f $tf diff -r 000000000000 -r 0aa115157c9c orig/pveil.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/pveil.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,42 @@ +#!/bin/csh -f +# RCSid: $Id: pveil.csh,v 3.4 2008/11/10 19:08:19 greg Exp $ +# +# Add veiling glare to picture +# +if ($#argv != 1) then + echo "Usage: $0 input.hdr > output.hdr" + exit 1 +endif +set ifile=$1 +set td=/tmp +set gf=$td/av$$.gs +set cf=$td/av$$.cal +set tf=($gf $cf) +onintr quit +findglare -r 400 -c -p $ifile \ + | sed -e '1,/^BEGIN glare source$/d' -e '/^END glare source$/,$d' \ + > $gf +if ( -z $gf ) then + cat $ifile + goto quit +endif +( rcalc -e '$1=recno;$2=$1;$3=$2;$4=$3;$5=$4*$5' $gf \ + | tabfunc SDx SDy SDz I ; cat ) > $cf << '_EOF_' +N : I(0); +K : 9.2; { should be 9.6e-3/PI*(180/PI)^2 == 10.03 ? } +bound(a,x,b) : if(a-x, a, if(x-b, b, x)); +Acos(x) : acos(bound(-1,x,1)); +sq(x) : x*x; +mul(ct) : if(ct-cos(.5*PI/180), K/sq(.5), K/sq(180/PI)*ct/sq(Acos(ct))); +Dx1 = Dx(1); Dy1 = Dy(1); Dz1 = Dz(1); { minor optimization } +cosa(i) = SDx(i)*Dx1 + SDy(i)*Dy1 + SDz(i)*Dz1; +sum(i) = if(i-.5, mul(cosa(i))*I(i)+sum(i-1), 0); +veil = le(1)/WE * sum(N); +ro = ri(1) + veil; +go = gi(1) + veil; +bo = bi(1) + veil; +'_EOF_' +getinfo < $ifile | egrep '^((VIEW|EXPOSURE|PIXASPECT|PRIMARIES|COLORCORR)=|[^ ]*(rpict|rview|pinterp) )' +pcomb -f $cf $ifile +quit: +rm -f $tf diff -r 000000000000 -r 0aa115157c9c orig/ra_pfm.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/ra_pfm.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,87 @@ +#!/bin/csh -f +# RCSid $Id: ra_pfm.csh,v 2.5 2006/11/17 19:14:54 greg Exp $ +# +# Convert to/from Poskanzer Float Map image format using pvalue +# +if (`uname -p` == powerpc) then + set machend=big +else + set machend=little +endif +while ($#argv > 0) + if ("$argv[1]" == "-r") then + set reverse + else if (! $?inp) then + set inp="$argv[1]" + else if (! $?out) then + set out="$argv[1]" + else + goto userr + endif + shift argv +end +if ($?reverse) then + if (! $?inp) then + goto userr + endif + set opt="" + set hl="`head -3 $inp:q`" + if ("$hl[1]" == "Pf") then + set opt=($opt -b) + else if ("$hl[1]" != "PF") then + echo "Input not a Poskanzer Float Map" + exit 1 + endif + if (`ev "if($hl[3],1,0)"`) then + set filend=big + else + set filend=little + endif + if ($filend != $machend) then + set opt=($opt -dF) + else + set opt=($opt -df) + endif + set res=($hl[2]) + if ($?out) then + tail +4 $inp:q | pvalue -r -h $opt +y $res[2] +x $res[1] > $out:q + else + tail +4 $inp:q | pvalue -r -h $opt +y $res[2] +x $res[1] + endif + exit $status +endif +if (! $?inp) then + goto userr +endif +set res=(`getinfo -d < $inp:q`) +if ($?out) then + ( echo PF ; echo $res[4] $res[2] ) > $out:q + if ($machend == little) then + echo "-1.000000" >> $out:q + else + echo "1.000000" >> $out:q + endif + if ("$res[1]" == "-Y") then + pflip -v $inp:q | pvalue -h -H -df >> $out:q + else + pvalue -h -H -df $inp:q >> $out:q + endif +else + echo PF + echo $res[4] $res[2] + if ($machend == little) then + echo "-1.000000" + else + echo "1.000000" + endif + if ("$res[1]" == "-Y") then + pflip -v $inp:q | pvalue -h -H -df + else + pvalue -h -H -df $inp:q + endif +endif +exit $status +userr: +echo "Usage: $0 input.hdr [output.pfm]" +echo " or: $0 -r input.pfm [output.hdr]" +exit 1 diff -r 000000000000 -r 0aa115157c9c orig/raddepend.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/raddepend.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,22 @@ +#!/bin/csh -f +# RCSid: $Id: raddepend.csh,v 2.8 2008/08/25 04:50:32 greg Exp $ +# +# Find scene dependencies in this directory +# +set es=1 +onintr quit +rm -f EMPTY +echo -n > EMPTY +sleep 2 +set sedf=`mktemp /tmp/sed.XXXXXX` +( ls $* | sed -e 's~/~\\/~g' -e 's@^@/^@' -e 's@$@$/d@' ; echo '/^EMPTY$/,$d' ) > $sedf +getbbox -w $* >/dev/null +set es=$status +if ( $es == 0 ) then + sync + sleep 2 + ls -tuL | sed -f $sedf | sort +endif +quit: +rm -f $sedf EMPTY +exit $es diff -r 000000000000 -r 0aa115157c9c orig/ran2tiff.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/ran2tiff.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,113 @@ +#!/bin/csh -fe +# Convert Radiance animation frames to TIFF output +# +set histosiz=200 +set pfwt=0.9 +set outdir="" +set pcopts=() +set tfopts=() +if (! $#argv) set argv=(DUMMY) +# Process options for pcond and ra_tiff +while ("$argv[1]" =~ -*) + switch ("$argv[1]") + case -W: + shift argv + set pfwt=$argv[1] + breaksw + case -H: + shift argv + set histof=$argv[1]:q + breaksw + case -D: + shift argv + if (! -d $argv[1]:q ) then + echo "Directory $argv[1] does not exist" + exit 1 + endif + set outdir=$argv[1]:q/ + breaksw + case -h*: + case -a*: + case -v*: + case -s*: + case -c*: + case -l*: + set pcopts=($pcopts $argv[1]) + breaksw + case -u: + case -d: + case -f: + set pcopts=($pcopts $argv[1-2]) + shift argv + breaksw + case -p: + shift argv + set pcopts=($pcopts -p $argv[1-6]) + shift argv; shift argv; shift argv; shift argv; shift argv + breaksw + case -z: + case -b: + case -w: + set tfopts=($tfopts $argv[1]) + breaksw + case -g: + shift argv + set tfopts=($tfopts -g $argv[1]) + breaksw + default: + echo "$0: bad option: $argv[1]" + exit 1 + endsw + shift argv +end +if ($#argv < 2) then + echo Usage: "$0 [-W prev_frame_wt][-H histo][-D dir][pcond opts][ra_tiff opts] frame1 frame2 .." + exit 1 +endif +# Get shrunken image luminances +set vald=`mktemp -d /tmp/val.XXXXXX` +foreach inp ($argv:q) + set datf="$inp:t" + set datf="$vald/$datf:r.dat" + pfilt -1 -x 128 -y 128 -p 1 $inp:q \ + | pvalue -o -h -H -b -df \ + | rcalc -if1 -e 'L=$1*179;cond=L-1e-7;$1=log10(L)' \ + > $datf:q +end +# Get Min. and Max. log values +set Lmin=`cat $vald/*.dat | total -l | rcalc -e '$1=$1-.01'` +set Lmax=`cat $vald/*.dat | total -u | rcalc -e '$1=$1+.01'` +if ($?histof) then + if (-r $histof) then + # Fix min/max and translate histogram + set Lmin=`sed -n '1p' $histof | rcalc -e 'min(a,b):if(a-b,b,a);$1=min($1,'"$Lmin)"` + set Lmax=`sed -n '$p' $histof | rcalc -e 'max(a,b):if(a-b,a,b);$1=max($1,'"$Lmax)"` + tabfunc -i hfunc < $histof > $vald/oldhist.cal + cnt $histosiz \ + | rcalc -e "L10=$Lmin+($Lmax-$Lmin)/$histosiz"'*($1+.5)' \ + -f $vald/oldhist.cal -e '$1=L10;$2=hfunc(L10)' \ + > $vald/oldhisto.dat + endif +endif +foreach inp ($argv:q) + set datf="$inp:t" + set datf="$vald/$datf:r.dat" + set outp="$inp:t" + set outp="$outdir$outp:r.tif" + endif + histo $Lmin $Lmax $histosiz < $datf > $vald/newhisto.dat + if (-f $vald/oldhisto.dat) then + rlam $vald/newhisto.dat $vald/oldhisto.dat \ + | rcalc -e '$1=$1;$2=$2+$4*'$pfwt \ + > $vald/histo.dat + else + mv $vald/{new,}histo.dat + endif + pcond $pcopts -I $inp:q < $vald/histo.dat \ + | ra_tiff $tfopts - $outp:q + mv $vald/{,old}histo.dat +end +if ($?histof) then + cp -f $vald/oldhisto.dat $histof +endif +rm -rf $vald diff -r 000000000000 -r 0aa115157c9c orig/reinhard.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/reinhard.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,12 @@ +#!/bin/csh -f +# +# Apply Reinhard's simple tone operator +# +if ($#argv != 3) then + echo Usage: $0 key input.hdr output.tif + exit 1 +endif +set lavg=`pvalue -h -H -b -d $argv[2]:q | total -p -m` +set lmax=`pextrem $argv[2]:q | sed -n '2s/^[1-9][0-9]* [1-9][0-9]* [^ ]* \([^ ]*\) .*$/\1/p'` +pcomb -e "Lavg:$lavg;Lwht:$lmax;a:$argv[1]" -f reinhard.cal $argv[2]:q \ + | ra_tiff - $argv[3]:q diff -r 000000000000 -r 0aa115157c9c orig/rlux.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/rlux.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,10 @@ +#!/bin/csh -f +# RCSid: $Id: rlux.csh,v 2.5 2003/02/22 02:07:30 greg Exp $ +# +# Compute illuminance from ray origin and direction +# +if ( $#argv < 1 ) then + echo "Usage: $0 [rtrace args] octree" + exit 1 +endif +rtrace -i+ -dv- -h- -x 1 $argv[*]:q | rcalc -e '$1=47.4*$1+120*$2+11.6*$3' -u diff -r 000000000000 -r 0aa115157c9c orig/runscript.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/runscript.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,17 @@ +#!/bin/csh -f +goto cont +oconv -i summercabin.oct -f ext1.rad > ext1sum.oct +rad -v 'cor -vf vf/corner' -w insummer.rif PIC=ext1sum OCT=ext1sum.oct EXP=-1 +rm ext1sum.oct +oconv -i summercabin.oct -f ext2.rad > ext2sum.oct +rad -v 'cor -vf vf/corner' -w insummer.rif PIC=ext2sum OCT=ext2sum.oct EXP=-1 +rm ext2sum.oct +cont: +oconv -f summer0_env.rad ext1.rad > ext1env.oct +rad -v 'cor -vf vf/corner' -w insummer.rif QUA=Hi PIC=ext1env \ + RAW=ext1raw ZF=ext1raw OCT=ext1env.oct EXP=-1 'render=-ab 1' +rm ext1env.oct +oconv -f summer0_env.rad ext2.rad > ext2env.oct +rad -v 'cor -vf vf/corner' -w insummer.rif QUA=Hi PIC=ext2env \ + RAW=ext2raw ZF=ext2raw OCT=ext2env.oct EXP=-1 'render=-ab 1' +rm ext2env.oct diff -r 000000000000 -r 0aa115157c9c orig/tradinstall.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/tradinstall.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,47 @@ +#!/bin/csh -fe +# RCSid: $Id: tradinstall.csh,v 2.7 2003/02/22 02:07:30 greg Exp $ +# Install correct version of trad for wish or wish4.0 +# +set instdir = $1 +set libdir = $2 + +set TLIBFILES = ( *[a-z].tcl *.hlp trad.icon tclIndex ) + +set TDIFFS = (`ls | sed -n 's/3\.6\.tcl$//p'`) + +set WISHCOMS = ( wish4.{3,2,1,0} wish8.0 wish ) + +foreach w ( $WISHCOMS ) + foreach d ($path) + if (-x $d/$w) then + set wishcom = $d/$w + break + endif + end + if ( $?wishcom ) break +end +if (! $?wishcom) then + echo "Cannot find wish executable in current path -- trad not installed." + exit 1 +endif +# if ( $wishcom:t == wish ) then +# set wishcom="$wishcom -f" +# set oldwish +# endif + +echo "Installing trad using $wishcom" + +sed -e "1s|/usr/local/bin/wish4\.0|$wishcom|" \ + -e "s|^set radlib .*|set radlib $libdir|" trad.wsh > $instdir/trad +chmod 755 $instdir/trad +if (! -d $libdir) then + mkdir $libdir +endif +(cd $libdir ; rm -f $TLIBFILES) +cp $TLIBFILES $libdir +if ($?oldwish) then + foreach i ($TDIFFS) + rm -f $libdir/$i.tcl + cp ${i}3.6.tcl $libdir/$i.tcl + end +endif diff -r 000000000000 -r 0aa115157c9c orig/vinfo.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/vinfo.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,39 @@ +#!/bin/csh -f +# RCSid: $Id: vinfo.csh,v 3.2 2004/11/19 23:00:49 greg Exp $ +# +# Edit information header in Radiance file +# +set plist=() +set ilist=() +foreach f ($*) + if (! -f $f:q) then + echo "${f}: no such file or directory" + continue + endif + if (! -w $f:q) then + echo "$f is read-only" + sleep 1 + continue + endif + set info="$f.info" + getinfo < $f:q > $info:q + set plist=($plist:q $f:q) + set ilist=($ilist:q $info:q) +end +vi $ilist:q +set i=1 +while ( $i <= $#plist ) + set f=$plist[$i]:q + set info=$ilist[$i]:q + if ("`tail -1 $info:q`" != "") then + echo "" >> $info:q + endif + getinfo < $f:q | cmp -s - $info:q + if ($status != 0) then + getinfo - < $f:q >> $info:q + mv $info:q $f:q + else + rm $info:q + endif + @ i++ +end diff -r 000000000000 -r 0aa115157c9c orig/vlpic.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/vlpic.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,90 @@ +#!/bin/csh -f +# RCSid: $Id: vlpic.csh,v 3.4 2008/08/25 04:50:32 greg Exp $ +# +# Compute falsecolor image of visibility level +# using the wacky formulas of Werner Adrian. +# +set age=40 # default age (years) +set tim=.2 # default time (seconds) +while ($#argv > 1) + switch ($argv[1]) + case -a: + shift argv + set age="$argv[1]" + breaksw + case -t: + shift argv + set tim="$argv[1]" + breaksw + default: + echo bad option "'$argv[1]'" + exit 1 + endsw + shift argv +end +set tc=`mktemp /tmp/vlcal.XXXXXXX` +set tp1=`mktemp /tmp/vlpic.XXXXXX` +set tp2=`mktemp /tmp/vlr2pic.XXXXXX` +set tp4=`mktemp /tmp/vlr4pic.XXXXXX` +set tp8=`mktemp /tmp/vlr8pic.XXXXXX` +set tf=($tc $tp1 $tp2 $tp4 $tp8) +set inpic=$argv[1] +onintr quit +set pr=(`getinfo -d < $inpic | sed 's/^-Y \([1-9][0-9]*\) +X \([1-9][0-9]*\)$/\2 \1/'`) +# ( vwright V < $inpic ; cat ) > $tc << _EOF_ +cat > $tc << _EOF_ +{ A : 3438 * sqrt(Vhn/xmax*Vvn/ymax); { pixel size (in minutes) } } +PI : 3.14159265358979323846; +A = 180*60/PI * sqrt(S(1)/PI); +sq(x) : x*x; +max(a,b) : if(a-b, a, b); +Lv : 0; { veiling luminance {temporarily zero} } + { find direction of maximum contrast } +xoff(d) = select(d, 1, 1, 0, -1, -1, -1, 0, 1); +yoff(d) = select(d, 0, 1, 1, 1, 0, -1, -1, -1); +cf(lf, lb) = (lf - lb)/(lb + Lv); +contrast(d) = cf(li(1,xoff(d),yoff(d)), li(1,-xoff(d),-yoff(d))); +cwin(d1, d2) = if(contrast(d1) - contrast(d2), d1, d2); +bestdir(d) = if(d-1.5, cwin(d, bestdir(d-1)), d); +maxdir = bestdir(8); +Lt = WE*li(1,xoff(maxdir),yoff(maxdir)) + Lv; +La = WE*li(1,-xoff(maxdir),-yoff(maxdir)) + Lv; +LLa = log10(La); +F = if(La-.6, log10(4.1925) + LLa*.1556 + .1684*La^.5867, + if(La-.00418, 10^(-.072 + LLa*(.3372 + LLa*.0866)), + 10^(.028 + .173*LLa))); +L = if(La-.6, .05946*La^.466, + if(La-.00418, 10^(-1.256 + .319*LLa), + 10^(-.891 + LLa*(.5275 + LLa*.0227)))); +LAt = log10(A) + .523; +AA = .36 - .0972*LAt*LAt/(LAt*(LAt - 2.513) + 2.7895); +LLat = LLa + 6; +AL = .355 - .1217*LLat*LLat/(LLat*(LLat - 10.4) + 52.28); +AZ = sqrt(AA*AA + AL*AL)/2.1; +DL1 = 2.6*sq(F/A + L); +M = if(La-.004, 10^-(10^-(if(La-.1,.125,.075)*sq(LLa+1) + .0245)), 0); +TGB = .6*La^-.1488; +FCP = 1 - M*A^-TGB/(2.4*(DL1*(AZ+2)/2)); +DL2 = DL1*(AZ + T)/T; +FA = if(Age-64, sq(Age-56.6)/116.3 + 1.43, sq(Age-19)/2160 + .99); +DL3 = DL2 * FA; +DL4 = if(La-Lt, DL3*FCP, DL3); +lo = (Lt - La)/DL4; { Output VL } +_EOF_ +pcomb -w -e "Age:$age;T:$tim" -f $tc -o $inpic > $tp1 +pfilt -1 -x /2 -y /2 $inpic \ + | pcomb -w -e "Age:$age;T:$tim" -f $tc -o - \ + | pfilt -1 -r 1 -x $pr[1] -y $pr[2] > $tp2 +pfilt -1 -x /4 -y /4 $inpic \ + | pcomb -w -e "Age:$age;T:$tim" -f $tc -o - \ + | pfilt -1 -r 1 -x $pr[1] -y $pr[2] > $tp4 +pfilt -1 -x /8 -y /8 $inpic \ + | pcomb -w -e "Age:$age;T:$tim" -f $tc -o - \ + | pfilt -1 -r 1 -x $pr[1] -y $pr[2] > $tp8 +pcomb -e 'max(a,b):if(a-b,a,b)' -e 'lo=max(gi(1),max(gi(2),max(gi(3),gi(4))))' \ + $tp1 $tp2 $tp4 $tp8 \ + | falsecolor -l VL -s 56 -m 1 -r 'if(v-1/8,1.6*8/7*(v-1/8)-.6,0)' \ + -g 'if(v-1/8,if(v-.453125,1.6-1.6*8/7*(v-1/8),8/3*8/7*(v-1/8)),0)' \ + -b 'if(v-1/8,1-8/3*8/7*(v-1/8),0)' +quit: +rm -f $tf diff -r 000000000000 -r 0aa115157c9c orig/xyzimage.csh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orig/xyzimage.csh Sat Apr 09 17:55:16 2011 +0100 @@ -0,0 +1,72 @@ +#!/bin/csh -f +# RCSid: $Id: xyzimage.csh,v 2.5 2008/08/25 04:50:32 greg Exp $ +# +# Display one or more CIE XYZE pictures using ximage +# +set popt="" +if ( $?DISPLAY_PRIMARIES ) then + set popt="-p $DISPLAY_PRIMARIES" +endif +set xiargs="" +set i=1 +set firstarg=0 +while ( $i <= $#argv && ! $firstarg ) + @ i1= $i + 1 + switch ( $argv[$i] ) + case -ge*: + case -di*: + case -g: + case -c: + case -e: + if ( $i1 > $#argv ) goto notenough + set xiargs=($xiargs $argv[$i] $argv[$i1]) + @ i1++ + breaksw + case -d: + case -b: + case -m: + case -f: + case -s: + case =*: + case -o*: + set xiargs=($xiargs $argv[$i]) + breaksw + case -p: + set popt="-p" + while ( $i1 <= $i + 8 ) + if ( $i1 > $#argv ) goto notenough + set popt="$popt $argv[$i1]" + @ i1++ + end + breaksw + case -*: + echo "Unknown option: $argv[$i]" + exit 1 + default: + set firstarg=$i + breaksw + endsw + set i=$i1 +end +set ecode=1 +onintr quit +set td=`mktemp -d /tmp/xyz.XXXXXX` +if ( ! $firstarg ) then + ra_xyze -r -u $popt > $td/stdin + if ( $status ) goto quit +else + set i=$firstarg + while ( $i <= $#argv ) + ra_xyze -r -u $popt $argv[$i] $td/$argv[$i]:t + if ( $status ) goto quit + @ i++ + end +endif +ximage $xiargs $td/* +set ecode=$status +quit: + rm -rf $td + exit $ecode +notenough: + echo "Missing arguments for $argv[$i] option" + exit 1