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.15 by greg, Fri May 24 13:52:10 1991 UTC vs.
Revision 1.21 by greg, Thu Aug 8 13:08:01 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_arg();
39          extern long  eclock;
40 <        static char  *initfile = "rayinit.cal";
41 <                                        /* initialize if first call */
42 <        if (initfile != NULL) {
43 <                loadfunc(initfile);
42 <                scompile("Dx=$1;Dy=$2;Dz=$3;", NULL, 0);
43 <                scompile("Nx=$4;Ny=$5;Nz=$6;", NULL, 0);
44 <                scompile("Px=$7;Py=$8;Pz=$9;", NULL, 0);
45 <                scompile("T=$10;Rdot=$11;", NULL, 0);
46 <                scompile("S=$12;Tx=$13;Ty=$14;Tz=$15;", NULL, 0);
47 <                scompile("Ix=$16;Iy=$17;Iz=$18;", NULL, 0);
48 <                scompile("Jx=$19;Jy=$20;Jz=$21;", NULL, 0);
49 <                scompile("Kx=$22;Ky=$23;Kz=$24;", NULL, 0);
50 <                funset("arg", 1, '=', l_arg);
51 <                setnoisefuncs();
52 <                initfile = NULL;
53 <        }
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 61 | 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 91 | Line 83 | RAY  *r;
83                  }
84                  m->os = (char *)mxf;
85          }
86 <        setmap(m, r, mxf);
95 <        return;
86 >        return(setmap(m, r, mxf));
87   memerr:
88          error(SYSTEM, "out of memory in setfunc");
89   }
# Line 132 | 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 + 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 +        setcontext(fname);
167 +        if (!vardefined(DEFVNAME)) {
168 +                loadfunc(fname);
169 +                varset(DEFVNAME, ':', 1.0);
170 +        }
171 + }
172 +
173 +
174 + double
175   chanvalue(n)                    /* return channel n to calcomp */
176   register int  n;
177   {
# Line 170 | Line 210 | register int  n;
210                  return(sum * funcxf.sca);
211  
212          }
213 <        if (n == 10)                    /* dot product */
214 <                return(fray->rod);
213 >        if (n == 10)                    /* dot product (range [-1,1]) */
214 >                return( fray->rod <= -1.0 ? -1.0 :
215 >                        fray->rod >= 1.0 ? 1.0 :
216 >                        fray->rod );
217  
218          if (n == 11)                    /* scale */
219                  return(funcxf.sca);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines