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 2.11 by greg, Wed Dec 13 23:26:16 2023 UTC vs.
Revision 2.15 by greg, Tue Mar 12 16:54:51 2024 UTC

# Line 141 | Line 141 | p_cdata(                       /* interpolate color data */
141          }
142          col[0] = datavalue(dp, pt);
143          for (i = 1; i < 3; i++) {
144 +                if (!strcmp(m->oargs.sarg[3+i], m->oargs.sarg[3])) {
145 +                        col[i] = col[0];        /* same data */
146 +                        continue;
147 +                }
148                  dp = getdata(m->oargs.sarg[3+i]);
149                  if (dp->nd != nv)
150                          objerror(m, USER, "dimension error");
# Line 226 | Line 230 | p_spectrum(                    /* simple constant spectrum */
230                          sinp[i] = (COLORV)m->oargs.farg[i+2];
231                  hstep = 0.5 * (m->oargs.farg[1] - m->oargs.farg[0]) /
232                                  (m->oargs.nfargs-3.0);
233 <                convertscolor(scval, NCSAMP, WLPART[0], WLPART[3],
230 <                                sinp, m->oargs.nfargs-2,
233 >                convertscolorcol(scval, sinp, m->oargs.nfargs-2,
234                                  m->oargs.farg[0]-hstep, m->oargs.farg[1]+hstep);
235                  free(sinp);
236                  m->os = (void *)scval;
# Line 265 | Line 268 | p_specfile(                    /* constant spectrum from 1-D data file
268                          double  wl = dp->dim[0].org + i*step;
269                          sinp[i] = (COLORV)datavalue(dp, &wl);
270                  }
271 <                convertscolor(scval, NCSAMP, WLPART[0], WLPART[3],
272 <                                sinp, dp->dim[0].ne, dp->dim[0].org-.5*step,
271 >                convertscolorcol(scval, sinp, dp->dim[0].ne,
272 >                                dp->dim[0].org-.5*step,
273                                  dp->dim[0].org+dp->dim[0].siz+.5*step);
274                  free(sinp);
275                  m->os = (void *)scval;
# Line 295 | Line 298 | p_specdata(                    /* varied spectrum from (N+1)-D file */
298          dp = getdata(m->oargs.sarg[1]);
299          if (dp->nd < 2)
300                  objerror(m, USER, "need at least 2-dimensional data");
298        if (dp->dim[dp->nd-1].ne > MAXCSAMP)
299                objerror(m, USER, "too many spectral samples in data file");
301          i = (1 << (dp->nd-1)) - 1;
302          mf = getfunc(m, 2, i<<3, 0);
303          setfunc(m, r);
# Line 306 | Line 307 | p_specdata(                    /* varied spectrum from (N+1)-D file */
307                  if ((errno == EDOM) | (errno == ERANGE))
308                          goto computerr;
309          }
310 <        step = dp->dim[dp->nd-1].siz / (dp->dim[dp->nd-1].ne - 1.0);
311 <        scdat = (COLORV *)malloc(sizeof(COLORV)*dp->dim[dp->nd-1].ne);
310 >        dp = datavector(dp, pt);        /* interpolate spectrum */
311 >        step = dp->dim[0].siz / (dp->dim[0].ne - 1.0);
312 >        scdat = (COLORV *)malloc(sizeof(COLORV)*dp->dim[0].ne);
313          if (scdat == NULL)
314                  objerror(m, SYSTEM, "out of memory");
315 <        for (i = dp->dim[dp->nd-1].ne; i-- > 0; ) {
316 <                double  bval[2];
317 <                pt[dp->nd-1] = dp->dim[dp->nd-1].org + i*step;
316 <                bval[0] = datavalue(dp, pt);
317 <                bval[1] = pt[dp->nd-1];
315 >        for (i = dp->dim[0].ne; i-- > 0; ) {
316 >                pt[1] = dp->dim[0].org + i*step;
317 >                pt[0] = datavalue(dp, pt+1);
318                  errno = 0;
319 <                scdat[i] = funvalue(m->oargs.sarg[0], 2, bval);
319 >                scdat[i] = funvalue(m->oargs.sarg[0], 2, pt);
320                  if ((errno == EDOM) | (errno == ERANGE))
321                          goto computerr;
322          }
323 <        convertscolor(scval, NCSAMP, WLPART[0], WLPART[3],
324 <                        scdat, dp->dim[dp->nd-1].ne,
325 <                        dp->dim[dp->nd-1].org-.5*step,
326 <                        dp->dim[dp->nd-1].org+dp->dim[dp->nd-1].siz+.5*step);
323 >        convertscolorcol(scval, scdat, dp->dim[0].ne,
324 >                        dp->dim[0].org-.5*step,
325 >                        dp->dim[0].org+dp->dim[0].siz+.5*step);
326          free(scdat);
327 +        free(dp);
328          smultscolor(r->pcol, scval);
329          return(0);
330   computerr:
# Line 340 | Line 340 | p_specpict(                    /* interpolate hyperspectral image data
340   )
341   {
342          SCOLOR          scdat, scval;
343 <        double          pt[3];
343 >        double          pt[2];
344          DATARRAY        *dp;
345          MFUNC           *mf;
346          double          step;
# Line 355 | Line 355 | p_specpict(                    /* interpolate hyperspectral image data
355          pt[0] = evalue(mf->ep[1]);
356          if ((errno == EDOM) | (errno == ERANGE))
357                  goto computerr;
358 <        dp = getspec(m->oargs.sarg[1]);
359 <        step = dp->dim[2].siz / (dp->dim[2].ne - 1.0);
360 <        for (i = dp->dim[2].ne; i-- > 0; ) {
361 <                double  bval[2];
362 <                pt[2] = dp->dim[2].org + i*step;
363 <                bval[0] = datavalue(dp, pt);
364 <                bval[1] = pt[2];
358 >                                        /* interpolate spectrum */
359 >        dp = datavector(getspec(m->oargs.sarg[1]), pt);
360 >        step = dp->dim[0].siz / (dp->dim[0].ne - 1.0);
361 >        for (i = dp->dim[0].ne; i-- > 0; ) {
362 >                pt[1] = dp->dim[0].org + i*step;
363 >                pt[0] = dp->arr.d[i];   /* datavalue(dp, pt+1); */
364                  errno = 0;
365 <                scdat[i] = funvalue(m->oargs.sarg[0], 2, bval);
365 >                scdat[i] = funvalue(m->oargs.sarg[0], 2, pt);
366                  if ((errno == EDOM) | (errno == ERANGE))
367                          goto computerr;
368          }
369 <        convertscolor(scval, NCSAMP, WLPART[0], WLPART[3],
370 <                        scdat, dp->dim[2].ne,
371 <                        dp->dim[2].org-.5*step,
372 <                        dp->dim[2].org+dp->dim[2].siz+.5*step);
369 >        convertscolorcol(scval, scdat, dp->dim[0].ne,
370 >                        dp->dim[0].org-.5*step,
371 >                        dp->dim[0].org+dp->dim[0].siz+.5*step);
372 >        free(dp);
373          smultscolor(r->pcol, scval);
374          return(0);
375   computerr:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines