home *** CD-ROM | disk | FTP | other *** search
/ Photo CD Demo 1 / Demo.bin / graphtal / examples / treecone < prev    next >
Text File  |  1992-11-02  |  3KB  |  108 lines

  1. #!/bin/sh
  2. #
  3. # Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
  4. # All rights reserved.
  5. #
  6. # This software may be freely copied, modified, and redistributed
  7. # provided that this copyright notice is preserved on all copies.
  8. #
  9. # You may not distribute this software, in whole or in part, as part of
  10. # any commercial product without the express consent of the authors.
  11. #
  12. # There is no warranty or other guarantee of fitness of this software
  13. # for any purpose.  It is provided solely "as is".
  14. #
  15. # Cone slides over a tree (uses treecone.anim.lsys).
  16. # usage: treecone [-R resX resY] [-O outfile]
  17. #                 [-d rayshade|flat] numberOfFrames
  18. #
  19. #
  20.  
  21. nawk '
  22. BEGIN { 
  23.   resX = 150; 
  24.   resY = 150;
  25.   outfile = "tree.rle";
  26.   renderer = "flat";
  27.  
  28.   if (ARGC <= 1) 
  29.     usage(); 
  30.  
  31.   #
  32.   # Parse command line options.
  33.   #
  34.   while (++i < ARGC-1) { 
  35.     if (ARGV[i] ~ /^-R$/) { 
  36.       if (((ARGC-i) > 3) && 
  37.       ((ARGV[i+1] ~ /^[0-9]+$/) && (ARGV[i+2] ~ /^[0-9]+$/))) { 
  38.     resX = ARGV[++i]; 
  39.     resY = ARGV[++i];
  40.       }
  41.       else
  42.     usage();
  43.     }
  44.     else if (ARGV[i] ~ /^-O$/) {
  45.       if ((ARGC-i) > 2)
  46.         outfile = ARGV[++i];
  47.       else
  48.         usage();
  49.     }
  50.     else if (ARGV[i] ~ /^-d$/) {
  51.       if ((ARGC-i) > 2 && (ARGV[i+1] ~ /^(rayshade|flat)$/))
  52.         renderer = ARGV[++i];
  53.       else
  54.         usage();
  55.     }
  56.     else if (i < ARGC-1)
  57.       usage();
  58.     else 
  59.       break;
  60.   }
  61.  
  62.   #
  63.   # Get number of frames to be rendered.
  64.   #
  65.   if ((i >= ARGC) || (ARGV[i] !~ /^[0-9]+$/))
  66.     usage();
  67.   else
  68.     numberOfFrames = ARGV[i];
  69.  
  70.   #
  71.   # Render images...
  72.   #
  73.   for (i=0; i<numberOfFrames; i++) {
  74.     if (renderer == "flat")
  75.       cmd = "graphtal -q -R " resX " " resY \
  76.             " -Diter=" i " -DnumberOfFrames=" numberOfFrames \
  77.             " -d flat treecone.anim.lsys | ppmtorle | rleflip -v" \
  78.         " > _frame" i ".rle";
  79.     else
  80.       cmd = "graphtal -q -s -R " resX " " resY \
  81.             " -Diter=" i " -DnumberOfFrames=" numberOfFrames \
  82.             " -d rayshade treecone.anim.lsys;" \
  83.         " rayshade -S 2 default.ray > _frame" i ".rle";
  84.     print cmd; 
  85.     if (system(cmd)) exit(1);
  86.     if (i == 0) {
  87.       print "mv _frame" i ".rle " outfile;
  88.       system("mv _frame" i ".rle " outfile);
  89.     }
  90.     else {
  91.       print "rlecat -o tmp.rle " outfile " _frame" i ".rle";
  92.       system ("rlecat -o tmp.rle " outfile " _frame" i ".rle");
  93.       print "mv tmp.rle " outfile;
  94.       system ("mv tmp.rle " outfile);
  95.       system("rm _frame" i ".rle");
  96.     }
  97.   }
  98. }
  99.  
  100. function usage()
  101. {
  102.   print "usage: treecone [-R resX resY] [-O outfile]";
  103.   print "                [-d rayshade|flat] numberOfFrames\n";
  104.   exit(1);
  105. }
  106. ' $*
  107.