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"); |
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; |
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; |
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); |
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: |
340 |
|
) |
341 |
|
{ |
342 |
|
SCOLOR scdat, scval; |
343 |
< |
double pt[3]; |
343 |
> |
double pt[2]; |
344 |
|
DATARRAY *dp; |
345 |
|
MFUNC *mf; |
346 |
|
double step; |
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: |