home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Raytrace & Morphing / SOS-RAYTRACE.ISO / programm / source / radsrc22 / src / px / falsecol.csh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  1992-08-21  |  3.8 KB  |  173 lines

  1. #!/bin/csh -f
  2. # SCCSid "@(#)falsecolor.csh 2.3 8/21/92 LBL"
  3. #
  4. # Create false color image with legend
  5. #
  6. set td=/usr/tmp/fc$$
  7. onintr quit
  8. set mult=179
  9. set label=Nits
  10. set scale=1000
  11. set decades=0
  12. set redv='1.6*v-.6'
  13. set grnv='if(v-.375,1.6-1.6*v,8/3*v)'
  14. set bluv='1-8/3*v'
  15. set ndivs=8
  16. set picture='-'
  17. set cpict=
  18. set legwidth=100
  19. set legheight=200
  20. while ($#argv > 0)
  21.     switch ($argv[1])
  22.     case -m:
  23.         shift argv
  24.         set mult="$argv[1]"
  25.         breaksw
  26.     case -s:
  27.         shift argv
  28.         set scale="$argv[1]"
  29.         breaksw
  30.     case -l:
  31.         shift argv
  32.         set label="$argv[1]"
  33.         breaksw
  34.     case -log:
  35.         shift argv
  36.         set decades=$argv[1]
  37.         breaksw
  38.     case -r:
  39.         shift argv
  40.         set redv="$argv[1]"
  41.         breaksw
  42.     case -g:
  43.         shift argv
  44.         set grnv="$argv[1]"
  45.         breaksw
  46.     case -b:
  47.         shift argv
  48.         set bluv="$argv[1]"
  49.         breaksw
  50.     case -i:
  51.         shift argv
  52.         set picture="$argv[1]"
  53.         breaksw
  54.     case -p:
  55.         shift argv
  56.         set cpict="$argv[1]"
  57.         breaksw
  58.     case -ip:
  59.     case -pi:
  60.         shift argv
  61.         set picture="$argv[1]"
  62.         set cpict="$argv[1]"
  63.         breaksw
  64.     case -cl:
  65.         set docont=a
  66.         breaksw
  67.     case -cb:
  68.         set docont=b
  69.         breaksw
  70.     case -e:
  71.         set doextrem
  72.         set needfile
  73.         breaksw
  74.     case -n:
  75.         shift argv
  76.         set ndivs="$argv[1]"
  77.         breaksw
  78.     default:
  79.         echo bad option "'$argv[1]'" >/dev/tty
  80.         exit 1
  81.     endsw
  82.     shift argv
  83. end
  84. mkdir $td
  85. cat > $td/pc0.cal <<_EOF_
  86. PI : 3.14159265358979323846 ;
  87. scale : $scale ;
  88. mult : $mult ;
  89. ndivs : $ndivs ;
  90.  
  91. or(a,b) : if(a,a,b);
  92. EPS : 1e-7;
  93. neq(a,b) : if(a-b-EPS,1,b-a-EPS);
  94. btwn(a,x,b) : if(a-x,-1,b-x);
  95. clip(x) : if(x-1,1,if(x,x,0));
  96. frac(x) : x - floor(x);
  97. boundary(a,b) : neq(floor(ndivs*a+.5),floor(ndivs*b+.5));
  98.  
  99. isconta = if(btwn(0,v,1),or(boundary(vleft,vright),boundary(vabove,vbelow)),-1);
  100. iscontb = if(btwn(0,v,1),btwn(.4,frac(ndivs*v),.6),-1); 
  101.  
  102. ro = if(in,clip($redv),ra);
  103. go = if(in,clip($grnv),ga);
  104. bo = if(in,clip($bluv),ba);
  105.  
  106. ra = 0;
  107. ga = 0;
  108. ba = 0;
  109.  
  110. in = 1;
  111. _EOF_
  112. cat > $td/pc1.cal <<_EOF_
  113. norm : mult/scale/le(1);
  114.  
  115. v = map(li(1)*norm);
  116.  
  117. vleft = map(li(1,-1,0)*norm);
  118. vright = map(li(1,1,0)*norm);
  119. vabove = map(li(1,0,1)*norm);
  120. vbelow = map(li(1,0,-1)*norm);
  121.  
  122. map(x) = x;
  123.  
  124. ra = ri(nfiles);
  125. ga = gi(nfiles);
  126. ba = bi(nfiles);
  127. _EOF_
  128. set pc0args=(-f $td/pc0.cal)
  129. set pc1args=(-f $td/pc1.cal)
  130. if ($?docont) then
  131.     set pc0args=($pc0args -e "in=iscont$docont")
  132. endif
  133. if ("$cpict" == "") then
  134.     set pc1args=($pc1args -e 'ra=0;ga=0;ba=0')
  135. else if ("$cpict" == "$picture") then
  136.     set cpict=
  137. endif
  138. if ($?needfile && "$picture" == '-') then
  139.     cat > $td/picture
  140.     set picture=$td/picture
  141. endif
  142. if ($decades > 0) then
  143.     set pc1args=($pc1args -e "map(x)=if(x-10^-$decades,log10(x)/$decades+1,0)")
  144.     set imap="imap(y)=10^((y-1)*$decades)"
  145. else
  146.     set imap="imap(y)=y"
  147. endif
  148. pcomb $pc0args -e 'v=(y+.5)/yres;vleft=v;vright=v' \
  149.         -e 'vbelow=(y-.5)/yres;vabove=(y+1.5)/yres' \
  150.         -x $legwidth -y $legheight > $td/scol.pic
  151. ( echo $label; cnt $ndivs \
  152.         | rcalc -e '$1='"($scale)*imap(($ndivs-.5-"'$1'")/$ndivs)" \
  153.         -e "$imap" ) \
  154.     | psign -s -.15 -cf 1 1 1 -cb 0 0 0 \
  155.         -h `ev "floor($legheight/$ndivs+.5)"` > $td/slab.pic
  156. if ( $?doextrem ) then
  157.     pextrem -o $picture > $td/extrema
  158.     set minpos=`sed 2d $td/extrema | rcalc -e '$2=$2;$1=$1+'"$legwidth"`
  159.     set minval=`rcalc -e '$1=($3*.3+$4*.59+$5*.11)*'"$mult" $td/extrema | sed -e 2d -e 's/\(.....\).*$/\1/'`
  160.     set maxpos=`sed 1d $td/extrema | rcalc -e '$2=$2;$1=$1+'"$legwidth"`
  161.     set maxval=`rcalc -e '$1=($3*.3+$4*.59+$5*.11)*'"$mult" $td/extrema | sed -e 1d -e 's/\(.....\).*$/\1/'`
  162.     psign -s -.15 -a 2 -h 16 $minval > $td/minv.pic
  163.     psign -s -.15 -a 2 -h 16 $maxval > $td/maxv.pic
  164.     pcomb $pc0args $pc1args $picture $cpict \
  165.         | pcompos $td/scol.pic 0 0 -t .2 $td/slab.pic 0 20 \
  166.           - $legwidth 0 $td/minv.pic $minpos $td/maxv.pic $maxpos
  167. else
  168.     pcomb $pc0args $pc1args $picture $cpict \
  169.         | pcompos $td/scol.pic 0 0 -t .2 $td/slab.pic 0 20 - $legwidth 0
  170. endif
  171. quit:
  172. rm -rf $td
  173.