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

Comparing ray/src/rt/p_data.c (file contents):
Revision 1.3 by greg, Tue May 1 17:01:03 1990 UTC vs.
Revision 2.4 by greg, Wed Jan 12 16:46:48 1994 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1986 Regents of the University of California */
1 > /* Copyright (c) 1992 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 14 | Line 14 | static char SCCSid[] = "$SunId$ LBL";
14  
15   #include  "data.h"
16  
17 + #include  "func.h"
18 +
19   /*
20   *      A stored pattern can either be brightness or
21   *  color data.  Brightness data is specified as:
# Line 52 | Line 54 | p_bdata(m, r)                  /* interpolate brightness data */
54   register OBJREC  *m;
55   RAY  *r;
56   {
55        extern double  varvalue(), funvalue(), datavalue();
56        extern int  errno;
57        int  nv;
57          double  bval;
58          double  pt[MAXDIM];
59          DATARRAY  *dp;
60 <        register char  **sa;
60 >        register MFUNC  *mf;
61 >        register int  i;
62  
63        setfunc(m, r);
64
65        sa = m->oargs.sarg;
66
63          if (m->oargs.nsargs < 4)
64                  objerror(m, USER, "bad # arguments");
65 <        if (!vardefined(sa[3]))
66 <                loadfunc(sa[2]);
65 >        dp = getdata(m->oargs.sarg[1]);
66 >        i = (1 << dp->nd) - 1;
67 >        mf = getfunc(m, 2, i<<3, 0);
68 >        setfunc(m, r);
69          errno = 0;
70 <        for (nv = 0; nv+3 < m->oargs.nsargs &&
71 <                        sa[nv+3][0] != '-'; nv++) {
72 <                if (nv >= MAXDIM)
73 <                        goto dimerr;
76 <                pt[nv] = varvalue(sa[nv+3]);
70 >        for (i = dp->nd; i-- > 0; ) {
71 >                pt[i] = evalue(mf->ep[i]);
72 >                if (errno)
73 >                        goto computerr;
74          }
78        if (errno)
79                goto computerr;
80        dp = getdata(sa[1]);
81        if (dp->nd != nv)
82                goto dimerr;
75          bval = datavalue(dp, pt);
76          errno = 0;
77 <        bval = funvalue(sa[0], 1, &bval);
77 >        bval = funvalue(m->oargs.sarg[0], 1, &bval);
78          if (errno)
79                  goto computerr;
80          scalecolor(r->pcol, bval);
81 <        return;
90 <
91 < dimerr:
92 <        objerror(m, USER, "dimension error");
93 <
81 >        return(0);
82   computerr:
83          objerror(m, WARNING, "compute error");
84 <        return;
84 >        return(0);
85   }
86  
87  
# Line 101 | Line 89 | p_cdata(m, r)                  /* interpolate color data */
89   register OBJREC  *m;
90   RAY  *r;
91   {
104        extern double  varvalue(), funvalue(), datavalue();
105        extern int  errno;
106        int  i, nv;
92          double  col[3];
93          COLOR  cval;
94          double  pt[MAXDIM];
95 +        int  nv;
96          DATARRAY  *dp;
97 <        register char  **sa;
97 >        register MFUNC  *mf;
98 >        register int  i;
99  
113        setfunc(m, r);
114
115        sa = m->oargs.sarg;
116
100          if (m->oargs.nsargs < 8)
101                  objerror(m, USER, "bad # arguments");
102 <        if (!vardefined(sa[7]))
103 <                loadfunc(sa[6]);
104 <        for (nv = 0; nv+7 < m->oargs.nsargs &&
105 <                        sa[nv+7][0] != '-'; nv++) {
106 <                if (nv >= MAXDIM)
107 <                        goto dimerr;
108 <                errno = 0;
126 <                pt[nv] = varvalue(sa[nv+7]);
102 >        dp = getdata(m->oargs.sarg[3]);
103 >        i = (1 << (nv = dp->nd)) - 1;
104 >        mf = getfunc(m, 6, i<<7, 0);
105 >        setfunc(m, r);
106 >        errno = 0;
107 >        for (i = 0; i < nv; i++) {
108 >                pt[i] = evalue(mf->ep[i]);
109                  if (errno)
110                          goto computerr;
111          }
112 <        for (i = 0; i < 3; i++) {
113 <                dp = getdata(sa[i+3]);
112 >        col[0] = datavalue(dp, pt);
113 >        for (i = 1; i < 3; i++) {
114 >                dp = getdata(m->oargs.sarg[i+3]);
115                  if (dp->nd != nv)
116 <                        goto dimerr;
116 >                        objerror(m, USER, "dimension error");
117                  col[i] = datavalue(dp, pt);
118          }
119          errno = 0;
120 <        setcolor(cval,  funvalue(sa[0], 3, col),
121 <                        funvalue(sa[1], 3, col),
122 <                        funvalue(sa[2], 3, col));
120 >        for (i = 0; i < 3; i++)
121 >                if (fundefined(m->oargs.sarg[i]) < 3)
122 >                        colval(cval,i) = funvalue(m->oargs.sarg[i], 1, col+i);
123 >                else
124 >                        colval(cval,i) = funvalue(m->oargs.sarg[i], 3, col);
125          if (errno)
126                  goto computerr;
127          multcolor(r->pcol, cval);
128 <        return;
144 <
145 < dimerr:
146 <        objerror(m, USER, "dimension error");
147 <
128 >        return(0);
129   computerr:
130          objerror(m, WARNING, "compute error");
131 <        return;
131 >        return(0);
132   }
133  
134  
# Line 155 | Line 136 | p_pdata(m, r)                  /* interpolate picture data */
136   register OBJREC  *m;
137   RAY  *r;
138   {
158        extern double  varvalue(), funvalue(), datavalue();
159        extern int  errno;
160        int  i;
139          double  col[3];
140          COLOR  cval;
141          double  pt[2];
142          DATARRAY  *dp;
143 <        register char  **sa;
143 >        register MFUNC  *mf;
144 >        register int  i;
145  
167        setfunc(m, r);
168
169        sa = m->oargs.sarg;
170
146          if (m->oargs.nsargs < 7)
147                  objerror(m, USER, "bad # arguments");
148 <        if (!vardefined(sa[5]))
149 <                loadfunc(sa[4]);
150 <        for (i = 0; i < 2; i++) {
151 <                errno = 0;
152 <                pt[1-i] = varvalue(sa[i+5]);    /* y major ordering */
153 <                if (errno)
154 <                        goto computerr;
155 <        }
181 <        dp = getpict(sa[3]);
148 >        mf = getfunc(m, 4, 0x3<<5, 0);
149 >        setfunc(m, r);
150 >        errno = 0;
151 >        pt[1] = evalue(mf->ep[0]);      /* y major ordering */
152 >        pt[0] = evalue(mf->ep[1]);
153 >        if (errno)
154 >                goto computerr;
155 >        dp = getpict(m->oargs.sarg[3]);
156          for (i = 0; i < 3; i++)
157                  col[i] = datavalue(dp+i, pt);
158          errno = 0;
159 <        setcolor(cval,  funvalue(sa[0], 3, col),
160 <                        funvalue(sa[1], 3, col),
161 <                        funvalue(sa[2], 3, col));
159 >        for (i = 0; i < 3; i++)
160 >                if (fundefined(m->oargs.sarg[i]) < 3)
161 >                        colval(cval,i) = funvalue(m->oargs.sarg[i], 1, col+i);
162 >                else
163 >                        colval(cval,i) = funvalue(m->oargs.sarg[i], 3, col);
164          if (errno)
165                  goto computerr;
166          multcolor(r->pcol, cval);
167 <        return;
167 >        return(0);
168  
169   computerr:
170          objerror(m, WARNING, "compute error");
171 <        return;
171 >        return(0);
172   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines