ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/rv2.c
(Generate patch)

Comparing ray/src/rt/rv2.c (file contents):
Revision 2.37 by greg, Tue Mar 18 18:09:15 1997 UTC vs.
Revision 2.38 by greg, Sat Feb 22 02:07:29 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1995 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  rv2.c - command routines used in tracing a view.
6   *
7 < *     3/24/87
7 > *  External symbols declared in rpaint.h
8   */
9  
10 + /* ====================================================================
11 + * The Radiance Software License, Version 1.0
12 + *
13 + * Copyright (c) 1990 - 2002 The Regents of the University of California,
14 + * through Lawrence Berkeley National Laboratory.   All rights reserved.
15 + *
16 + * Redistribution and use in source and binary forms, with or without
17 + * modification, are permitted provided that the following conditions
18 + * are met:
19 + *
20 + * 1. Redistributions of source code must retain the above copyright
21 + *         notice, this list of conditions and the following disclaimer.
22 + *
23 + * 2. Redistributions in binary form must reproduce the above copyright
24 + *       notice, this list of conditions and the following disclaimer in
25 + *       the documentation and/or other materials provided with the
26 + *       distribution.
27 + *
28 + * 3. The end-user documentation included with the redistribution,
29 + *           if any, must include the following acknowledgment:
30 + *             "This product includes Radiance software
31 + *                 (http://radsite.lbl.gov/)
32 + *                 developed by the Lawrence Berkeley National Laboratory
33 + *               (http://www.lbl.gov/)."
34 + *       Alternately, this acknowledgment may appear in the software itself,
35 + *       if and wherever such third-party acknowledgments normally appear.
36 + *
37 + * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
38 + *       and "The Regents of the University of California" must
39 + *       not be used to endorse or promote products derived from this
40 + *       software without prior written permission. For written
41 + *       permission, please contact [email protected].
42 + *
43 + * 5. Products derived from this software may not be called "Radiance",
44 + *       nor may "Radiance" appear in their name, without prior written
45 + *       permission of Lawrence Berkeley National Laboratory.
46 + *
47 + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
48 + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
49 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
50 + * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
51 + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
52 + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
53 + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
54 + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
55 + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
56 + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
57 + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 + * SUCH DAMAGE.
59 + * ====================================================================
60 + *
61 + * This software consists of voluntary contributions made by many
62 + * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
63 + * information on Lawrence Berkeley National Laboratory, please see
64 + * <http://www.lbl.gov/>.
65 + */
66 +
67   #include  "ray.h"
68  
15 #include  "octree.h"
16
69   #include  "otypes.h"
70  
71   #include  "rpaint.h"
72  
21 #include  "resolu.h"
22
73   #include  <ctype.h>
74  
75 + extern int  psample;                    /* pixel sample size */
76 + extern double  maxdiff;                 /* max. sample difference */
77 +
78   #define  CTRL(c)        ((c)-'@')
79  
80   #ifdef  SMLFLT
# Line 30 | Line 83 | static char SCCSid[] = "$SunId$ LBL";
83   #define  sscanvec(s,v)  (sscanf(s,"%lf %lf %lf",v,v+1,v+2)==3)
84   #endif
85  
33 extern char  *atos();
34
35 extern FILE  *popen();
36
86   extern char  rifname[128];              /* rad input file name */
87  
39 extern char  VersionID[];
88   extern char  *progname;
89   extern char  *octname;
90  
91  
92 + void
93   getframe(s)                             /* get a new frame */
94   char  *s;
95   {
# Line 50 | Line 99 | char  *s;
99   }
100  
101  
102 + void
103   getrepaint(s)                           /* get area and repaint */
104   char  *s;
105   {
# Line 61 | Line 111 | char  *s;
111   }
112  
113  
114 + void
115   getview(s)                              /* get/show view parameters */
116   char  *s;
117   {
# Line 165 | Line 216 | char  *s;
216   }
217  
218  
219 + void
220   lastview(s)                             /* return to a previous view */
221   char  *s;
222   {
# Line 198 | Line 250 | char  *s;
250   }
251  
252  
253 + void
254   saveview(s)                             /* save view to rad file */
255   char  *s;
256   {
# Line 234 | Line 287 | char  *s;
287   }
288  
289  
290 + void
291   loadview(s)                             /* load view from rad file */
292   char  *s;
293   {
# Line 275 | Line 329 | char  *s;
329   }
330  
331  
332 + void
333   getaim(s)                               /* aim camera */
334   char  *s;
335   {
# Line 294 | Line 349 | char  *s;
349   }
350  
351  
352 + void
353   getmove(s)                              /* move camera */
354   char  *s;
355   {
# Line 306 | Line 362 | char  *s;
362   }
363  
364  
365 + void
366   getrotate(s)                            /* rotate camera */
367   char  *s;
368   {
# Line 335 | Line 392 | char  *s;
392   }
393  
394  
395 + void
396   getpivot(s)                             /* pivot viewpoint */
397   register char  *s;
398   {
# Line 352 | Line 410 | register char  *s;
410   }
411  
412  
413 + void
414   getexposure(s)                          /* get new exposure */
415   char  *s;
416   {
# Line 417 | Line 476 | char  *s;
476          redraw();
477   }
478  
479 + typedef union {int i; double d; COLOR C;}       *MyUptr;
480  
481 < getparam(str, dsc, typ, ptr)            /* get variable from user */
481 > int
482 > getparam(str, dsc, typ, p)              /* get variable from user */
483   char  *str, *dsc;
484   int  typ;
485 < register union {int i; double d; COLOR C;}  *ptr;
485 > void  *p;
486   {
487 <        extern char  *index();
487 >        register MyUptr  ptr = (MyUptr)p;
488          int  i0;
489          double  d0, d1, d2;
490          char  buf[48];
# Line 481 | Line 542 | register union {int i; double d; COLOR C;}  *ptr;
542   }
543  
544  
545 + void
546   setparam(s)                             /* get/set program parameter */
547   register char  *s;
548   {
487        extern int  psample;
488        extern double  maxdiff;
489        extern double  minweight;
490        extern int  maxdepth;
491        extern double  dstrsrc;
492        extern double  shadthresh;
493        extern double  shadcert;
494        extern COLOR  ambval;
495        extern int  ambvwt;
496        extern double  ambacc;
497        extern int  ambres;
498        extern int  ambdiv;
499        extern int  ambssamp;
500        extern int  ambounce;
501        extern COLOR  cextinction;
502        extern COLOR  salbedo;
503        extern double  seccg;
504        extern double  ssampdist;
505        extern int  directvis;
506        extern double  srcsizerat;
507        extern int  do_irrad;
508        extern double  specjitter;
509        extern double  specthresh;
510        extern int  backvis;
549          char  buf[128];
550          
551          if (s[0] == '\0') {
# Line 520 | Line 558 | register char  *s;
558          case 'l':                       /* limit */
559                  switch (s[1]) {
560                  case 'w':                       /* weight */
561 <                        getparam(s+2, "limit weight", 'r', &minweight);
561 >                        getparam(s+2, "limit weight", 'r',
562 >                                        (void *)&minweight);
563                          break;
564                  case 'r':                       /* reflection */
565 <                        getparam(s+2, "limit reflection", 'i', &maxdepth);
565 >                        getparam(s+2, "limit reflection", 'i',
566 >                                        (void *)&maxdepth);
567                          break;
568                  default:
569                          goto badparam;
# Line 532 | Line 572 | register char  *s;
572          case 'd':                       /* direct */
573                  switch (s[1]) {
574                  case 'j':                       /* jitter */
575 <                        getparam(s+2, "direct jitter", 'r', &dstrsrc);
575 >                        getparam(s+2, "direct jitter", 'r',
576 >                                        (void *)&dstrsrc);
577                          break;
578                  case 'c':                       /* certainty */
579 <                        getparam(s+2, "direct certainty", 'r', &shadcert);
579 >                        getparam(s+2, "direct certainty", 'r',
580 >                                        (void *)&shadcert);
581                          break;
582                  case 't':                       /* threshold */
583 <                        getparam(s+2, "direct threshold", 'r', &shadthresh);
583 >                        getparam(s+2, "direct threshold", 'r',
584 >                                        (void *)&shadthresh);
585                          break;
586                  case 'v':                       /* visibility */
587 <                        getparam(s+2, "direct visibility",
588 <                                        'b', &directvis);
587 >                        getparam(s+2, "direct visibility", 'b',
588 >                                        (void *)&directvis);
589                          break;
590                  case 's':                       /* sampling */
591 <                        getparam(s+2, "direct sampling", 'r', &srcsizerat);
591 >                        getparam(s+2, "direct sampling", 'r',
592 >                                        (void *)&srcsizerat);
593                          break;
594                  default:
595                          goto badparam;
# Line 554 | Line 598 | register char  *s;
598          case 'b':                       /* back faces or black and white */
599                  switch (s[1]) {
600                  case 'v':                       /* back face visibility */
601 <                        getparam(s+2, "back face visibility", 'b', &backvis);
601 >                        getparam(s+2, "back face visibility", 'b',
602 >                                        (void *)&backvis);
603                          break;
604                  case '\0':                      /* black and white */
605                  case ' ':
606                  case 'y': case 'Y': case 't': case 'T': case '1': case '+':
607                  case 'n': case 'N': case 'f': case 'F': case '0': case '-':
608 <                        getparam(s+1, "black and white", 'b', &greyscale);
608 >                        getparam(s+1, "black and white", 'b',
609 >                                        (void *)&greyscale);
610                          break;
611                  default:
612                          goto badparam;
613                  }
614                  break;
615          case 'i':                       /* irradiance */
616 <                getparam(s+1, "irradiance", 'b', &do_irrad);
616 >                getparam(s+1, "irradiance", 'b',
617 >                                (void *)&do_irrad);
618                  break;
619          case 'a':                       /* ambient */
620                  switch (s[1]) {
621                  case 'v':                       /* value */
622 <                        getparam(s+2, "ambient value", 'C', (COLOR *)ambval);
622 >                        getparam(s+2, "ambient value", 'C',
623 >                                        (void *)ambval);
624                          break;
625                  case 'w':                       /* weight */
626 <                        getparam(s+2, "ambient value weight", 'i', &ambvwt);
626 >                        getparam(s+2, "ambient value weight", 'i',
627 >                                        (void *)&ambvwt);
628                          break;
629                  case 'a':                       /* accuracy */
630 <                        if (getparam(s+2, "ambient accuracy", 'r', &ambacc))
630 >                        if (getparam(s+2, "ambient accuracy", 'r',
631 >                                        (void *)&ambacc))
632                                  setambacc(ambacc);
633                          break;
634                  case 'd':                       /* divisions */
635 <                        getparam(s+2, "ambient divisions", 'i', &ambdiv);
635 >                        getparam(s+2, "ambient divisions", 'i',
636 >                                        (void *)&ambdiv);
637                          break;
638                  case 's':                       /* samples */
639 <                        getparam(s+2, "ambient super-samples", 'i', &ambssamp);
639 >                        getparam(s+2, "ambient super-samples", 'i',
640 >                                        (void *)&ambssamp);
641                          break;
642                  case 'b':                       /* bounces */
643 <                        getparam(s+2, "ambient bounces", 'i', &ambounce);
643 >                        getparam(s+2, "ambient bounces", 'i',
644 >                                        (void *)&ambounce);
645                          break;
646                  case 'r':
647 <                        if (getparam(s+2, "ambient resolution", 'i', &ambres))
647 >                        if (getparam(s+2, "ambient resolution", 'i',
648 >                                        (void *)&ambres))
649                                  setambres(ambres);
650                          break;
651                  default:
# Line 602 | Line 656 | register char  *s;
656                  switch (s[1]) {
657                  case 'e':                       /* extinction coefficient */
658                          getparam(s+2, "extinction coefficient", 'C',
659 <                                        (COLOR *)cextinction);
659 >                                        (void *)cextinction);
660                          break;
661                  case 'a':                       /* scattering albedo */
662                          getparam(s+2, "scattering albedo", 'C',
663 <                                        (COLOR *)salbedo);
663 >                                        (void *)salbedo);
664                          break;
665                  case 'g':                       /* scattering eccentricity */
666 <                        getparam(s+2, "scattering eccentricity", 'r', &seccg);
666 >                        getparam(s+2, "scattering eccentricity", 'r',
667 >                                        (void *)&seccg);
668                          break;
669                  case 's':                       /* sampling distance */
670                          getparam(s+2, "mist sampling distance", 'r',
671 <                                        &ssampdist);
671 >                                        (void *)&ssampdist);
672                          break;
673                  default:
674                          goto badparam;
# Line 622 | Line 677 | register char  *s;
677          case 'p':                       /* pixel */
678                  switch (s[1]) {
679                  case 's':                       /* sample */
680 <                        if (getparam(s+2, "pixel sample", 'i', &psample))
680 >                        if (getparam(s+2, "pixel sample", 'i',
681 >                                        (void *)&psample))
682                                  pdepth = 0;
683                          break;
684                  case 't':                       /* threshold */
685 <                        if (getparam(s+2, "pixel threshold", 'r', &maxdiff))
685 >                        if (getparam(s+2, "pixel threshold", 'r',
686 >                                        (void *)&maxdiff))
687                                  pdepth = 0;
688                          break;
689                  default:
# Line 636 | Line 693 | register char  *s;
693          case 's':                       /* specular */
694                  switch (s[1]) {
695                  case 'j':                       /* jitter */
696 <                        getparam(s+2, "specular jitter", 'r', &specjitter);
696 >                        getparam(s+2, "specular jitter", 'r',
697 >                                        (void *)&specjitter);
698                          break;
699                  case 't':                       /* threshold */
700 <                        getparam(s+2, "specular threshold", 'r', &specthresh);
700 >                        getparam(s+2, "specular threshold", 'r',
701 >                                        (void *)&specthresh);
702                          break;
703                  default:
704                          goto badparam;
# Line 657 | Line 716 | badparam:
716   }
717  
718  
719 + void
720   traceray(s)                             /* trace a single ray */
721   char  *s;
722   {
# Line 714 | Line 774 | char  *s;
774                          (*dev->comout)(buf);
775                  }
776                  (*dev->comin)(buf, NULL);
777 <                sprintf(buf, "value (%.5g %.5g %.5g) (%.1fL)",
777 >                sprintf(buf, "value (%.5g %.5g %.5g) (%.3gL)",
778                                  colval(thisray.rcol,RED),
779                                  colval(thisray.rcol,GRN),
780                                  colval(thisray.rcol,BLU),
# Line 725 | Line 785 | char  *s;
785   }
786  
787  
788 + void
789   writepict(s)                            /* write the picture to a file */
790   char  *s;
791   {
# Line 763 | Line 824 | char  *s;
824          else
825                  putc('\n', fp);
826          fprintf(fp, "SOFTWARE= %s\n", VersionID);
827 +        fputnow(fp);
828          if (exposure != 1.0)
829                  fputexpos(exposure, fp);
830          if (dev->pixaspect != 1.0)
# Line 783 | Line 845 | char  *s;
845                  if (fwritecolrs(scanline, hresolu, fp) < 0)
846                          break;
847          }
848 <        free((char *)scanline);
848 >        free((void *)scanline);
849          if (fclose(fp) < 0)
850                  error(COMMAND, "write error");
851   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines