ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/lookamb.c
Revision: 2.7
Committed: Sat Feb 22 02:07:28 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.6: +60 -12 lines
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 greg 2.7 static const char RCSid[] = "$Id$";
3 greg 1.1 #endif
4     /*
5     * lookamb.c - program to examine ambient components.
6 greg 2.7 */
7    
8     /* ====================================================================
9     * The Radiance Software License, Version 1.0
10     *
11     * Copyright (c) 1990 - 2002 The Regents of the University of California,
12     * through Lawrence Berkeley National Laboratory. All rights reserved.
13     *
14     * Redistribution and use in source and binary forms, with or without
15     * modification, are permitted provided that the following conditions
16     * are met:
17     *
18     * 1. Redistributions of source code must retain the above copyright
19     * notice, this list of conditions and the following disclaimer.
20     *
21     * 2. Redistributions in binary form must reproduce the above copyright
22     * notice, this list of conditions and the following disclaimer in
23     * the documentation and/or other materials provided with the
24     * distribution.
25 greg 1.1 *
26 greg 2.7 * 3. The end-user documentation included with the redistribution,
27     * if any, must include the following acknowledgment:
28     * "This product includes Radiance software
29     * (http://radsite.lbl.gov/)
30     * developed by the Lawrence Berkeley National Laboratory
31     * (http://www.lbl.gov/)."
32     * Alternately, this acknowledgment may appear in the software itself,
33     * if and wherever such third-party acknowledgments normally appear.
34     *
35     * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
36     * and "The Regents of the University of California" must
37     * not be used to endorse or promote products derived from this
38     * software without prior written permission. For written
39     * permission, please contact [email protected].
40     *
41     * 5. Products derived from this software may not be called "Radiance",
42     * nor may "Radiance" appear in their name, without prior written
43     * permission of Lawrence Berkeley National Laboratory.
44     *
45     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
46     * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
47     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48     * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
49     * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
52     * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
53     * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
54     * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
55     * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56     * SUCH DAMAGE.
57     * ====================================================================
58     *
59     * This software consists of voluntary contributions made by many
60     * individuals on behalf of Lawrence Berkeley National Laboratory. For more
61     * information on Lawrence Berkeley National Laboratory, please see
62     * <http://www.lbl.gov/>.
63 greg 1.1 */
64    
65 greg 2.7 #include "ray.h"
66 greg 1.1
67 greg 1.4 #include "ambient.h"
68 greg 1.1
69    
70     int dataonly = 0;
71 greg 2.3 int header = 1;
72 greg 1.1 int reverse = 0;
73    
74     AMBVAL av;
75    
76    
77     main(argc, argv) /* load ambient values from a file */
78 greg 2.5 int argc;
79 greg 1.1 char *argv[];
80     {
81     FILE *fp;
82     int i;
83    
84     for (i = 1; i < argc; i++)
85     if (argv[i][0] == '-')
86     switch (argv[i][1]) {
87     case 'd':
88     dataonly = 1;
89     break;
90     case 'r':
91     reverse = 1;
92     break;
93 greg 2.3 case 'h':
94     header = 0;
95     break;
96 greg 1.1 default:
97     fprintf(stderr, "%s: unknown option '%s'\n",
98     argv[0], argv[i]);
99     return(1);
100     }
101     else
102     break;
103    
104     if (i >= argc)
105     fp = stdin;
106     else if ((fp = fopen(argv[i], "r")) == NULL) {
107     fprintf(stderr, "%s: file not found\n", argv[i]);
108     return(1);
109     }
110 greg 2.3 if (reverse) {
111     if (header) {
112     if (checkheader(fp, "ascii", stdout) < 0)
113     goto formaterr;
114 greg 2.6 } else {
115     newheader("RADIANCE", stdout);
116 greg 2.3 printargs(argc, argv, stdout);
117 greg 2.6 }
118 greg 2.3 fputformat(AMBFMT, stdout);
119     putchar('\n');
120 greg 2.4 #ifdef MSDOS
121     setmode(fileno(stdout), O_BINARY);
122     #endif
123 greg 2.3 putambmagic(stdout);
124 greg 1.1 writamb(fp);
125 greg 2.3 } else {
126 greg 2.4 #ifdef MSDOS
127     setmode(fileno(fp), O_BINARY);
128     #endif
129 greg 2.3 if (checkheader(fp, AMBFMT, header ? stdout : (FILE *)NULL) < 0)
130     goto formaterr;
131     if (!hasambmagic(fp))
132     goto formaterr;
133     if (header) {
134     fputformat("ascii", stdout);
135     putchar('\n');
136     }
137 greg 1.1 lookamb(fp);
138 greg 2.3 }
139 greg 1.1 fclose(fp);
140     return(0);
141 greg 2.3 formaterr:
142     fprintf(stderr, "%s: format error on input\n", argv[0]);
143     exit(1);
144 greg 1.1 }
145    
146    
147 greg 2.7 void
148 greg 1.1 lookamb(fp) /* get ambient values from a file */
149     FILE *fp;
150     {
151 greg 2.2 while (readambval(&av, fp)) {
152 greg 1.1 if (dataonly) {
153     printf("%f\t%f\t%f\t", av.pos[0], av.pos[1], av.pos[2]);
154     printf("%f\t%f\t%f\t", av.dir[0], av.dir[1], av.dir[2]);
155     printf("%d\t%f\t%f\t", av.lvl, av.weight, av.rad);
156 greg 1.5 printf("%e\t%e\t%e\t", colval(av.val,RED),
157 greg 1.1 colval(av.val,GRN),
158     colval(av.val,BLU));
159 greg 1.4 printf("%f\t%f\t%f\t", av.gpos[0],
160     av.gpos[1], av.gpos[2]);
161 greg 1.5 printf("%f\t%f\t%f\n", av.gdir[0],
162 greg 1.4 av.gdir[1], av.gdir[2]);
163 greg 1.1 } else {
164     printf("\nPosition:\t%f\t%f\t%f\n", av.pos[0],
165     av.pos[1], av.pos[2]);
166     printf("Direction:\t%f\t%f\t%f\n", av.dir[0],
167     av.dir[1], av.dir[2]);
168     printf("Lvl,Wt,Rad:\t%d\t\t%f\t%f\n", av.lvl,
169     av.weight, av.rad);
170     printf("Value:\t\t%e\t%e\t%e\n", colval(av.val,RED),
171     colval(av.val,GRN), colval(av.val,BLU));
172 greg 1.4 printf("Pos.Grad:\t%f\t%f\t%f\n", av.gpos[0],
173     av.gpos[1], av.gpos[2]);
174     printf("Dir.Grad:\t%f\t%f\t%f\n", av.gdir[0],
175     av.gdir[1], av.gdir[2]);
176 greg 1.1 }
177     if (ferror(stdout))
178     exit(1);
179     }
180     }
181    
182    
183 greg 2.7 void
184 greg 1.1 writamb(fp) /* write binary ambient values */
185     FILE *fp;
186     {
187     for ( ; ; ) {
188     if (!dataonly)
189     fscanf(fp, "%*s");
190 greg 1.3 if (fscanf(fp, "%f %f %f",
191 greg 1.1 &av.pos[0], &av.pos[1], &av.pos[2]) != 3)
192     return;
193     if (!dataonly)
194     fscanf(fp, "%*s");
195 greg 1.3 if (fscanf(fp, "%f %f %f",
196 greg 1.1 &av.dir[0], &av.dir[1], &av.dir[2]) != 3)
197     return;
198     if (!dataonly)
199     fscanf(fp, "%*s");
200     if (fscanf(fp, "%d %f %f",
201     &av.lvl, &av.weight, &av.rad) != 3)
202     return;
203     if (!dataonly)
204     fscanf(fp, "%*s");
205     if (fscanf(fp, "%f %f %f",
206     &av.val[RED], &av.val[GRN], &av.val[BLU]) != 3)
207     return;
208 greg 1.4 if (!dataonly)
209     fscanf(fp, "%*s");
210     if (fscanf(fp, "%f %f %f",
211     &av.gpos[0], &av.gpos[1], &av.gpos[2]) != 3)
212     return;
213     if (!dataonly)
214     fscanf(fp, "%*s");
215     if (fscanf(fp, "%f %f %f",
216     &av.gdir[0], &av.gdir[1], &av.gdir[2]) != 3)
217     return;
218     av.next = NULL;
219 greg 2.2 writambval(&av, stdout);
220 greg 1.1 if (ferror(stdout))
221     exit(1);
222     }
223     }