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

Comparing ray/src/rt/func.c (file contents):
Revision 1.13 by greg, Sat Jan 12 18:01:19 1991 UTC vs.
Revision 1.22 by greg, Thu Aug 8 15:41:14 1991 UTC

# Line 15 | Line 15 | static char SCCSid[] = "$SunId$ LBL";
15   #include  "otypes.h"
16  
17  
18 + #define  INITFILE       "rayinit.cal"
19 + #define  DEFVNAME       "FILE_LOADED`"
20 +
21   XF  unitxf = {                  /* identity transform */
22          1.0, 0.0, 0.0, 0.0,
23          0.0, 1.0, 0.0, 0.0,
# Line 33 | Line 36 | OBJREC  *m;
36   register RAY  *r;
37   XF  *bx;
38   {
36        extern double  l_noise3(), l_noise3a(), l_noise3b(), l_noise3c();
37        extern double  l_hermite(), l_fnoise3(), l_arg();
39          extern long  eclock;
40 <        static char  *initfile = "rayinit.cal";
41 <                                        /* initialize if first call */
42 <        if (initfile != NULL) {
43 <                loadfunc(initfile);
43 <                scompile("Dx=$1;Dy=$2;Dz=$3;", NULL, 0);
44 <                scompile("Nx=$4;Ny=$5;Nz=$6;", NULL, 0);
45 <                scompile("Px=$7;Py=$8;Pz=$9;", NULL, 0);
46 <                scompile("T=$10;Rdot=$11;", NULL, 0);
47 <                scompile("S=$12;Tx=$13;Ty=$14;Tz=$15;", NULL, 0);
48 <                scompile("Ix=$16;Iy=$17;Iz=$18;", NULL, 0);
49 <                scompile("Jx=$19;Jy=$20;Jz=$21;", NULL, 0);
50 <                scompile("Kx=$22;Ky=$23;Kz=$24;", NULL, 0);
51 <                funset("arg", 1, l_arg);
52 <                funset("noise3", 3, l_noise3);
53 <                funset("noise3a", 3, l_noise3a);
54 <                funset("noise3b", 3, l_noise3b);
55 <                funset("noise3c", 3, l_noise3c);
56 <                funset("hermite", 5, l_hermite);
57 <                funset("fnoise3", 3, l_fnoise3);
58 <                initfile = NULL;
59 <        }
40 >        static long  lastrno = -1;
41 >                                        /* check to see if already set */
42 >        if (m == fobj && r->rno == lastrno)
43 >                return(0);
44          fobj = m;
45          fray = r;
46          if (r->rox != NULL)
# Line 67 | Line 51 | XF  *bx;
51                          copystruct(&funcxf, &r->rox->b);
52          else
53                  copystruct(&funcxf, bx);
54 +        lastrno = r->rno;
55          eclock++;               /* notify expression evaluator */
56 +        return(1);
57   }
58  
59  
# Line 97 | Line 83 | RAY  *r;
83                  }
84                  m->os = (char *)mxf;
85          }
86 <        setmap(m, r, mxf);
101 <        return;
86 >        return(setmap(m, r, mxf));
87   memerr:
88          error(SYSTEM, "out of memory in setfunc");
89   }
# Line 138 | Line 123 | l_arg()                                /* return nth real argument */
123  
124  
125   double
126 + l_erf()                         /* error function */
127 + {
128 +        extern double  erf();
129 +
130 +        return(erf(argument(1)));
131 + }
132 +
133 +
134 + double
135 + l_erfc()                        /* cumulative error function */
136 + {
137 +        extern double  erfc();
138 +
139 +        return(erfc(argument(1)));
140 + }
141 +
142 +
143 + funcfile(fname)                 /* set context, load file if necessary */
144 + register char  *fname;
145 + {
146 +        extern char  *setcontext();
147 +        static char  initfile[] = INITFILE;
148 +
149 +        if (initfile[0]) {              /* initialize on first call */
150 +                setcontext("");
151 +                scompile("Dx=$1;Dy=$2;Dz=$3;", NULL, 0);
152 +                scompile("Nx=$4;Ny=$5;Nz=$6;", NULL, 0);
153 +                scompile("Px=$7;Py=$8;Pz=$9;", NULL, 0);
154 +                scompile("T=$10;Rdot=$11;", NULL, 0);
155 +                scompile("S=$12;Tx=$13;Ty=$14;Tz=$15;", NULL, 0);
156 +                scompile("Ix=$16;Iy=$17;Iz=$18;", NULL, 0);
157 +                scompile("Jx=$19;Jy=$20;Jz=$21;", NULL, 0);
158 +                scompile("Kx=$22;Ky=$23;Kz=$24;", NULL, 0);
159 +                funset("arg", 1, '=', l_arg);
160 +                funset("erf", 1, ':', l_erf);
161 +                funset("erfc", 1, ':', l_erfc);
162 +                setnoisefuncs();
163 +                loadfunc(initfile);
164 +                initfile[0] = '\0';
165 +        }
166 +        if (fname[0] == '.' && fname[1] == '\0')
167 +                setcontext("");                 /* "." means no file */
168 +        else {
169 +                setcontext(fname);
170 +                if (!vardefined(DEFVNAME)) {
171 +                        loadfunc(fname);
172 +                        varset(DEFVNAME, ':', 1.0);
173 +                }
174 +        }
175 + }
176 +
177 +
178 + double
179   chanvalue(n)                    /* return channel n to calcomp */
180   register int  n;
181   {
# Line 176 | Line 214 | register int  n;
214                  return(sum * funcxf.sca);
215  
216          }
217 <        if (n == 10)                    /* dot product */
218 <                return(fray->rod);
217 >        if (n == 10)                    /* dot product (range [-1,1]) */
218 >                return( fray->rod <= -1.0 ? -1.0 :
219 >                        fray->rod >= 1.0 ? 1.0 :
220 >                        fray->rod );
221  
222          if (n == 11)                    /* scale */
223                  return(funcxf.sca);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines