67 |
|
lp = lu_find(&clr_tab, av[1]); /* lookup context */ |
68 |
|
if (lp == NULL) |
69 |
|
return(MG_EMEM); |
70 |
+ |
c_ccname = lp->key; |
71 |
|
c_ccolor = (C_COLOR *)lp->data; |
72 |
|
if (ac == 2) { /* reestablish previous context */ |
73 |
|
if (c_ccolor == NULL) |
84 |
|
lp->data = (char *)malloc(sizeof(C_COLOR)); |
85 |
|
if (lp->data == NULL) |
86 |
|
return(MG_EMEM); |
87 |
+ |
c_ccname = lp->key; |
88 |
|
c_ccolor = (C_COLOR *)lp->data; |
89 |
|
c_ccolor->clock = 0; |
90 |
|
} |
89 |
– |
c_ccname = lp->key; |
91 |
|
i = c_ccolor->clock; |
92 |
|
if (ac == 3) { /* use default template */ |
93 |
|
*c_ccolor = c_dfcolor; |
177 |
|
lp = lu_find(&mat_tab, av[1]); /* lookup context */ |
178 |
|
if (lp == NULL) |
179 |
|
return(MG_EMEM); |
180 |
+ |
c_cmname = lp->key; |
181 |
|
c_cmaterial = (C_MATERIAL *)lp->data; |
182 |
|
if (ac == 2) { /* reestablish previous context */ |
183 |
|
if (c_cmaterial == NULL) |
194 |
|
lp->data = (char *)malloc(sizeof(C_MATERIAL)); |
195 |
|
if (lp->data == NULL) |
196 |
|
return(MG_EMEM); |
197 |
+ |
c_cmname = lp->key; |
198 |
|
c_cmaterial = (C_MATERIAL *)lp->data; |
199 |
|
c_cmaterial->clock = 0; |
200 |
|
} |
198 |
– |
c_cmname = lp->key; |
201 |
|
i = c_cmaterial->clock; |
202 |
|
if (ac == 3) { /* use default template */ |
203 |
|
*c_cmaterial = c_dfmaterial; |
311 |
|
lp = lu_find(&vtx_tab, av[1]); /* lookup context */ |
312 |
|
if (lp == NULL) |
313 |
|
return(MG_EMEM); |
314 |
+ |
c_cvname = lp->key; |
315 |
|
c_cvertex = (C_VERTEX *)lp->data; |
316 |
|
if (ac == 2) { /* reestablish previous context */ |
317 |
|
if (c_cvertex == NULL) |
328 |
|
lp->data = (char *)malloc(sizeof(C_VERTEX)); |
329 |
|
if (lp->data == NULL) |
330 |
|
return(MG_EMEM); |
331 |
+ |
c_cvname = lp->key; |
332 |
|
c_cvertex = (C_VERTEX *)lp->data; |
333 |
|
} |
330 |
– |
c_cvname = lp->key; |
334 |
|
i = c_cvertex->clock; |
335 |
|
if (ac == 3) { /* use default template */ |
336 |
|
*c_cvertex = c_dfvertex; |
376 |
|
{ |
377 |
|
c_uncolor = c_dfcolor; |
378 |
|
c_ccolor = &c_uncolor; |
379 |
+ |
c_ccname = NULL; |
380 |
|
lu_done(&clr_tab); |
381 |
|
c_unmaterial = c_dfmaterial; |
382 |
|
c_cmaterial = &c_unmaterial; |
383 |
+ |
c_cmname = NULL; |
384 |
|
lu_done(&mat_tab); |
385 |
|
c_unvertex = c_dfvertex; |
386 |
|
c_cvertex = &c_unvertex; |
387 |
+ |
c_cvname = NULL; |
388 |
|
lu_done(&vtx_tab); |
389 |
|
} |
390 |
|
|
445 |
|
double x, y, z; |
446 |
|
register int i; |
447 |
|
|
448 |
< |
if (clr->flags & fl) /* already done */ |
448 |
> |
fl &= ~clr->flags; /* ignore what's done */ |
449 |
> |
if (!fl) /* everything's done! */ |
450 |
|
return; |
451 |
|
if (!(clr->flags & (C_CSXY|C_CSSPEC))) /* nothing set! */ |
452 |
|
*clr = c_dfcolor; |
453 |
< |
else if (fl & C_CSXY) { /* cspec -> cxy */ |
453 |
> |
if (fl & C_CSXY) { /* cspec -> cxy */ |
454 |
|
x = y = z = 0.; |
455 |
|
for (i = 0; i < C_CNSS; i++) { |
456 |
|
x += cie_xf.ssamp[i] * clr->ssamp[i]; |
461 |
|
clr->cx = x / z; |
462 |
|
clr->cy = y / z; |
463 |
|
clr->flags |= C_CSXY; |
464 |
< |
} else { /* cxy -> cspec */ |
464 |
> |
} else if (fl & C_CSSPEC) { /* cxy -> cspec */ |
465 |
|
z = (cie_xf.ssum + cie_yf.ssum + cie_zf.ssum) / 3.; |
466 |
|
x = clr->cx * z / cie_xf.ssum; |
467 |
|
y = clr->cy * z / cie_yf.ssum; |
474 |
|
z * cie_zf.ssamp[i] ; |
475 |
|
clr->flags |= C_CSSPEC; |
476 |
|
} |
477 |
+ |
if (fl & C_CSEFF) { /* compute efficacy */ |
478 |
+ |
if (clr->flags & C_CDSPEC) { /* from spectrum */ |
479 |
+ |
y = 0.; |
480 |
+ |
for (i = 0; i < C_CNSS; i++) |
481 |
+ |
y += cie_yf.ssamp[i] * clr->ssamp[i]; |
482 |
+ |
clr->eff = C_CLPWM * y / clr->ssum; |
483 |
+ |
} else /* clr->flags & C_CDXY */ { /* from (x,y) */ |
484 |
+ |
clr->eff = clr->cx*cie_xf.eff + clr->cy*cie_yf.eff + |
485 |
+ |
(1. - clr->cx - clr->cy)*cie_zf.eff; |
486 |
+ |
} |
487 |
+ |
clr->flags |= C_CSEFF; |
488 |
+ |
} |
489 |
|
} |
490 |
|
|
491 |
|
|
556 |
|
register int i; |
557 |
|
|
558 |
|
if ((c1->flags|c2->flags) & C_CDSPEC) { /* spectral mixing */ |
559 |
< |
c_ccvt(c1, C_CSSPEC); |
560 |
< |
c_ccvt(c2, C_CSSPEC); |
561 |
< |
w1 /= (double)c1->ssum; |
562 |
< |
w2 /= (double)c2->ssum; |
559 |
> |
c_ccvt(c1, C_CSSPEC|C_CSEFF); |
560 |
> |
c_ccvt(c2, C_CSSPEC|C_CSEFF); |
561 |
> |
w1 /= c1->eff*c1->ssum; |
562 |
> |
w2 /= c1->eff*c2->ssum; |
563 |
|
scale = 0.; |
564 |
|
for (i = 0; i < C_CNSS; i++) { |
565 |
|
cmix[i] = w1*c1->ssamp[i] + w2*c2->ssamp[i]; |