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

Comparing ray/src/rt/p_data.c (file contents):
Revision 2.14 by greg, Thu Feb 22 20:11:54 2024 UTC vs.
Revision 2.16 by greg, Wed Dec 17 00:45:55 2025 UTC

# Line 251 | Line 251 | p_specfile(                    /* constant spectrum from 1-D data file
251          if ((scval = (COLORV *)m->os) == NULL) {
252                  DATARRAY        *dp;
253                  COLORV          *sinp;
254 +                int             n;
255                  double          step;
255                int             i;
256                  if (m->oargs.nsargs != 1)
257                          objerror(m, USER, "bad # arguments");
258                  dp = getdata(m->oargs.sarg[0]);
259                  if (dp->nd != 1)
260                          objerror(m, USER, "data file must be 1-dimensional");
261  
262 <                sinp = (COLORV *)malloc(sizeof(COLORV)*dp->dim[0].ne);
262 >                n = (dp->dim[0].p == NULL) ? dp->dim[0].ne : 2*dp->dim[0].ne;
263 >                sinp = (COLORV *)malloc(sizeof(COLORV)*n);
264                  scval = (COLORV *)malloc(sizeof(COLORV)*NCSAMP);
265                  if ((sinp == NULL) | (scval == NULL))
266                          objerror(m, SYSTEM, "out of memory");
267 <                step = dp->dim[0].siz / (dp->dim[0].ne - 1.0);
268 <                for (i = dp->dim[0].ne; i-- > 0; ) {
269 <                        double  wl = dp->dim[0].org + i*step;
270 <                        sinp[i] = (COLORV)datavalue(dp, &wl);
267 >                step = dp->dim[0].siz / (n - 1.0);
268 >                while (n--) {
269 >                        double  wl = dp->dim[0].org + n*step;
270 >                        sinp[n] = (COLORV)datavalue(dp, &wl);
271                  }
272                  convertscolorcol(scval, sinp, dp->dim[0].ne,
273                                  dp->dim[0].org-.5*step,
# Line 307 | Line 308 | p_specdata(                    /* varied spectrum from (N+1)-D file */
308                  if ((errno == EDOM) | (errno == ERANGE))
309                          goto computerr;
310          }
311 <        step = dp->dim[dp->nd-1].siz / (dp->dim[dp->nd-1].ne - 1.0);
312 <        scdat = (COLORV *)malloc(sizeof(COLORV)*dp->dim[dp->nd-1].ne);
311 >        dp = datavector(dp, pt);        /* interpolate spectrum */
312 >        step = dp->dim[0].siz / (dp->dim[0].ne - 1.0);
313 >        scdat = (COLORV *)malloc(sizeof(COLORV)*dp->dim[0].ne);
314          if (scdat == NULL)
315                  objerror(m, SYSTEM, "out of memory");
316 <        for (i = dp->dim[dp->nd-1].ne; i-- > 0; ) {
317 <                double  bval[2];
318 <                pt[dp->nd-1] = dp->dim[dp->nd-1].org + i*step;
317 <                bval[0] = datavalue(dp, pt);
318 <                bval[1] = pt[dp->nd-1];
316 >        for (i = dp->dim[0].ne; i-- > 0; ) {
317 >                pt[1] = dp->dim[0].org + i*step;
318 >                pt[0] = datavalue(dp, pt+1);
319                  errno = 0;
320 <                scdat[i] = funvalue(m->oargs.sarg[0], 2, bval);
320 >                scdat[i] = funvalue(m->oargs.sarg[0], 2, pt);
321                  if ((errno == EDOM) | (errno == ERANGE))
322                          goto computerr;
323          }
324 <        convertscolorcol(scval, 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);
324 >        convertscolorcol(scval, scdat, dp->dim[0].ne,
325 >                        dp->dim[0].org-.5*step,
326 >                        dp->dim[0].org+dp->dim[0].siz+.5*step);
327          free(scdat);
328 +        free(dp);
329          smultscolor(r->pcol, scval);
330          return(0);
331   computerr:
# Line 340 | Line 341 | p_specpict(                    /* interpolate hyperspectral image data
341   )
342   {
343          SCOLOR          scdat, scval;
344 <        double          pt[3];
344 >        double          pt[2];
345          DATARRAY        *dp;
346          MFUNC           *mf;
347          double          step;
# Line 355 | Line 356 | p_specpict(                    /* interpolate hyperspectral image data
356          pt[0] = evalue(mf->ep[1]);
357          if ((errno == EDOM) | (errno == ERANGE))
358                  goto computerr;
359 <        dp = getspec(m->oargs.sarg[1]);
360 <        step = dp->dim[2].siz / (dp->dim[2].ne - 1.0);
361 <        for (i = dp->dim[2].ne; i-- > 0; ) {
362 <                double  bval[2];
363 <                pt[2] = dp->dim[2].org + i*step;
364 <                bval[0] = datavalue(dp, pt);
364 <                bval[1] = pt[2];
359 >                                        /* interpolate spectrum */
360 >        dp = datavector(getspec(m->oargs.sarg[1]), pt);
361 >        step = dp->dim[0].siz / (dp->dim[0].ne - 1.0);
362 >        for (i = dp->dim[0].ne; i-- > 0; ) {
363 >                pt[1] = dp->dim[0].org + i*step;
364 >                pt[0] = dp->arr.d[i];   /* datavalue(dp, pt+1); */
365                  errno = 0;
366 <                scdat[i] = funvalue(m->oargs.sarg[0], 2, bval);
366 >                scdat[i] = funvalue(m->oargs.sarg[0], 2, pt);
367                  if ((errno == EDOM) | (errno == ERANGE))
368                          goto computerr;
369          }
370 <        convertscolorcol(scval, scdat, dp->dim[2].ne,
371 <                        dp->dim[2].org-.5*step,
372 <                        dp->dim[2].org+dp->dim[2].siz+.5*step);
370 >        convertscolorcol(scval, scdat, dp->dim[0].ne,
371 >                        dp->dim[0].org-.5*step,
372 >                        dp->dim[0].org+dp->dim[0].siz+.5*step);
373 >        free(dp);
374          smultscolor(r->pcol, scval);
375          return(0);
376   computerr:

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)