ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/otypes.h
Revision: 2.8
Committed: Sat Feb 22 02:07:22 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.7: +57 -5 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 2.8 /* RCSid: $Id$ */
2 greg 1.1 /*
3     * otypes.h - defines for object types.
4 greg 2.8 */
5    
6     /* ====================================================================
7     * The Radiance Software License, Version 1.0
8     *
9     * Copyright (c) 1990 - 2002 The Regents of the University of California,
10     * through Lawrence Berkeley National Laboratory. All rights reserved.
11     *
12     * Redistribution and use in source and binary forms, with or without
13     * modification, are permitted provided that the following conditions
14     * are met:
15     *
16     * 1. Redistributions of source code must retain the above copyright
17     * notice, this list of conditions and the following disclaimer.
18     *
19     * 2. Redistributions in binary form must reproduce the above copyright
20     * notice, this list of conditions and the following disclaimer in
21     * the documentation and/or other materials provided with the
22     * distribution.
23     *
24     * 3. The end-user documentation included with the redistribution,
25     * if any, must include the following acknowledgment:
26     * "This product includes Radiance software
27     * (http://radsite.lbl.gov/)
28     * developed by the Lawrence Berkeley National Laboratory
29     * (http://www.lbl.gov/)."
30     * Alternately, this acknowledgment may appear in the software itself,
31     * if and wherever such third-party acknowledgments normally appear.
32     *
33     * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
34     * and "The Regents of the University of California" must
35     * not be used to endorse or promote products derived from this
36     * software without prior written permission. For written
37     * permission, please contact [email protected].
38     *
39     * 5. Products derived from this software may not be called "Radiance",
40     * nor may "Radiance" appear in their name, without prior written
41     * permission of Lawrence Berkeley National Laboratory.
42     *
43     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
44     * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
45     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
46     * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
47     * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48     * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49     * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
50     * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
51     * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
52     * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
53     * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
54     * SUCH DAMAGE.
55     * ====================================================================
56 greg 1.1 *
57 greg 2.8 * This software consists of voluntary contributions made by many
58     * individuals on behalf of Lawrence Berkeley National Laboratory. For more
59     * information on Lawrence Berkeley National Laboratory, please see
60     * <http://www.lbl.gov/>.
61 greg 1.1 */
62    
63     typedef struct {
64     char *funame; /* function name */
65 greg 1.7 int flags; /* type flags */
66 greg 1.1 int (*funp)(); /* pointer to function */
67     } FUN;
68 greg 1.7 /* object types in decreasing frequency */
69     #define OBJ_FACE 0 /* polygon */
70     #define OBJ_CONE 1 /* cone */
71     #define OBJ_SPHERE 2 /* sphere */
72     #define TEX_FUNC 3 /* surface texture function */
73     #define OBJ_RING 4 /* disk */
74     #define OBJ_CYLINDER 5 /* cylinder */
75     #define OBJ_INSTANCE 6 /* octree instance */
76     #define OBJ_CUP 7 /* inverted cone */
77     #define OBJ_BUBBLE 8 /* inverted sphere */
78     #define OBJ_TUBE 9 /* inverted cylinder */
79     #define MAT_PLASTIC 10 /* plastic surface */
80     #define MAT_METAL 11 /* metal surface */
81 greg 1.11 #define MAT_GLASS 12 /* thin glass surface */
82     #define MAT_TRANS 13 /* translucent material */
83     #define MAT_DIELECTRIC 14 /* dielectric material */
84 greg 2.2 #define MAT_PLASTIC2 15 /* anisotropic plastic */
85     #define MAT_METAL2 16 /* anisotropic metal */
86     #define MAT_TRANS2 17 /* anisotropic translucent material */
87     #define MAT_INTERFACE 18 /* dielectric interface */
88     #define MAT_PFUNC 19 /* plastic brdf function */
89     #define MAT_MFUNC 20 /* metal brdf function */
90     #define PAT_BFUNC 21 /* brightness function */
91     #define PAT_BDATA 22 /* brightness data */
92     #define PAT_BTEXT 23 /* monochromatic text */
93     #define PAT_CPICT 24 /* color picture */
94     #define MAT_GLOW 25 /* proximity light source */
95     #define OBJ_SOURCE 26 /* distant source */
96     #define MAT_LIGHT 27 /* primary light source */
97     #define MAT_ILLUM 28 /* secondary light source */
98     #define MAT_SPOT 29 /* spot light source */
99 greg 2.6 #define MAT_MIST 30 /* mist medium */
100     #define MAT_MIRROR 31 /* mirror (secondary source) */
101     #define MAT_TFUNC 32 /* trans brdf function */
102     #define MAT_BRTDF 33 /* brtd function */
103     #define MAT_PDATA 34 /* plastic brdf data */
104     #define MAT_MDATA 35 /* metal brdf data */
105     #define MAT_TDATA 36 /* trans brdf data */
106     #define PAT_CFUNC 37 /* color function */
107     #define MAT_CLIP 38 /* clipping surface */
108     #define PAT_CDATA 39 /* color data */
109     #define PAT_CTEXT 40 /* colored text */
110     #define TEX_DATA 41 /* surface texture data */
111     #define MIX_FUNC 42 /* mixing function */
112     #define MIX_DATA 43 /* mixing data */
113     #define MIX_TEXT 44 /* mixing text */
114 gwlarson 2.7 #define MIX_PICT 45 /* mixing picture */
115     #define MAT_DIRECT1 46 /* unidirecting material */
116     #define MAT_DIRECT2 47 /* bidirecting material */
117 greg 1.1 /* number of object types */
118 gwlarson 2.7 #define NUMOTYPE 48
119 greg 1.7 /* type flags */
120     #define T_S 01 /* surface (object) */
121     #define T_M 02 /* material */
122     #define T_P 04 /* pattern */
123     #define T_T 010 /* texture */
124     #define T_X 020 /* mixture */
125     #define T_V 040 /* volume */
126     #define T_L 0100 /* light source modifier */
127 greg 1.11 #define T_LV 0200 /* virtual light source modifier */
128     #define T_F 0400 /* function */
129     #define T_D 01000 /* data */
130     #define T_I 02000 /* picture */
131     #define T_E 04000 /* text */
132 greg 1.8 /* user-defined types */
133     #define T_SP1 010000
134     #define T_SP2 020000
135     #define T_SP3 040000
136 greg 1.1
137 greg 1.7 extern FUN ofun[]; /* our type list */
138 greg 1.1
139 greg 1.7 #define issurface(t) (ofun[t].flags & T_S)
140     #define isvolume(t) (ofun[t].flags & T_V)
141 greg 2.3 #define ismodifier(t) (!(ofun[t].flags & (T_S|T_V)))
142 greg 1.7 #define ismaterial(t) (ofun[t].flags & T_M)
143     #define islight(t) (ofun[t].flags & T_L)
144 greg 1.11 #define isvlight(t) (ofun[t].flags & T_LV)
145 greg 1.7 #define hasdata(t) (ofun[t].flags & (T_D|T_I))
146     #define hasfunc(t) (ofun[t].flags & (T_F|T_D|T_I))
147     #define hastext(t) (ofun[t].flags & T_E)
148 greg 2.5 #define isflat(t) ((t)==OBJ_FACE || (t)==OBJ_RING)
149 greg 1.1
150 greg 1.7 extern int o_default();
151     /* type list initialization */
152     #define INIT_OTYPE { { "polygon", T_S, o_default }, \
153     { "cone", T_S, o_default }, \
154     { "sphere", T_S, o_default }, \
155     { "texfunc", T_T|T_F, o_default }, \
156     { "ring", T_S, o_default }, \
157     { "cylinder", T_S, o_default }, \
158 greg 2.3 { "instance", T_V, o_default }, \
159 greg 1.7 { "cup", T_S, o_default }, \
160     { "bubble", T_S, o_default }, \
161     { "tube", T_S, o_default }, \
162     { "plastic", T_M, o_default }, \
163     { "metal", T_M, o_default }, \
164     { "glass", T_M, o_default }, \
165     { "trans", T_M, o_default }, \
166     { "dielectric", T_M, o_default }, \
167 greg 2.2 { "plastic2", T_M|T_F, o_default }, \
168     { "metal2", T_M|T_F, o_default }, \
169     { "trans2", T_M|T_F, o_default }, \
170 greg 1.7 { "interface", T_M, o_default }, \
171     { "plasfunc", T_M|T_F, o_default }, \
172     { "metfunc", T_M|T_F, o_default }, \
173     { "brightfunc", T_P|T_F, o_default }, \
174     { "brightdata", T_P|T_D, o_default }, \
175     { "brighttext", T_P|T_E, o_default }, \
176     { "colorpict", T_P|T_I, o_default }, \
177 greg 1.11 { "glow", T_M|T_L, o_default }, \
178     { "source", T_S, o_default }, \
179 greg 1.7 { "light", T_M|T_L, o_default }, \
180     { "illum", T_M|T_L, o_default }, \
181 greg 1.10 { "spotlight", T_M|T_L, o_default }, \
182 greg 2.6 { "mist", T_M, o_default }, \
183 greg 1.11 { "mirror", T_M|T_LV, o_default }, \
184 greg 1.10 { "transfunc", T_M|T_F, o_default }, \
185 greg 1.9 { "BRTDfunc", T_M|T_F, o_default }, \
186 greg 1.7 { "plasdata", T_M|T_D, o_default }, \
187     { "metdata", T_M|T_D, o_default }, \
188 greg 1.10 { "transdata", T_M|T_D, o_default }, \
189 greg 1.7 { "colorfunc", T_P|T_F, o_default }, \
190     { "antimatter", T_M, o_default }, \
191     { "colordata", T_P|T_D, o_default }, \
192     { "colortext", T_P|T_E, o_default }, \
193     { "texdata", T_T|T_D, o_default }, \
194     { "mixfunc", T_X|T_F, o_default }, \
195     { "mixdata", T_X|T_D, o_default }, \
196     { "mixtext", T_X|T_E, o_default }, \
197 gwlarson 2.7 { "mixpict", T_X|T_I, o_default }, \
198 greg 1.12 { "prism1", T_M|T_F|T_LV, o_default }, \
199     { "prism2", T_M|T_F|T_LV, o_default }, \
200 greg 1.7 }
201 greg 1.1
202     #define ALIASID "alias" /* alias type identifier */