Clazz.declarePackage ("JSV.common"); Clazz.load (["JSV.api.VisibleInterface"], "JSV.common.Visible", ["JU.CU"], function () { c$ = Clazz.declareType (JSV.common, "Visible", null, JSV.api.VisibleInterface); Clazz.makeConstructor (c$, function () { }); Clazz.overrideMethod (c$, "getColour", function (spec, useFitted) { var xyCoords = spec.getXYCoords (); var isAbsorbance = spec.isAbsorbance (); var xyzd = Clazz.newDoubleArray (4, 0); JSV.common.Visible.getXYZfitted (xyCoords, isAbsorbance, xyzd); xyzd[0] /= xyzd[3]; xyzd[1] /= xyzd[3]; xyzd[2] /= xyzd[3]; var rgb = Clazz.newDoubleArray (-1, [xyzd[0] * 3.2410 + xyzd[1] * -1.5374 + xyzd[2] * -0.4986, xyzd[0] * -0.9692 + xyzd[1] * 1.8760 + xyzd[2] * 0.0416, xyzd[0] * 0.0556 + xyzd[1] * -0.204 + xyzd[2] * 1.0570]); var gamma = 2.4; for (var i = 0; i < 3; i++) rgb[i] = (rgb[i] > 0.00304 ? 1.055 * Math.pow (rgb[i], 1 / gamma) - 0.055 : 12.92 * rgb[i]); var c = JU.CU.rgb (JSV.common.Visible.fix (rgb[0]), JSV.common.Visible.fix (rgb[1]), JSV.common.Visible.fix (rgb[2])); return c; }, "JSV.common.Spectrum,~B"); c$.fix = Clazz.defineMethod (c$, "fix", function (d) { return (d <= 0 ? 0 : d >= 1 ? 255 : Math.round (255 * d)); }, "~N"); c$.getXYZfitted = Clazz.defineMethod (c$, "getXYZfitted", function (xyCoords, isAbsorbance, xyzd) { var cie; var xb; var yb; var zb; for (var i = xyCoords.length; --i >= 0; ) { var x = xyCoords[i].getXVal (); if (x < 400 || x > 700) continue; cie = JSV.common.Visible.gauss (85.7145, 2.05719E-5, x - 607.263) + JSV.common.Visible.gauss (57.7256, 0.000126451, x - 457.096); xb = JSV.common.Visible.gauss (1.06561, 0.000500819, x - 598.623) + JSV.common.Visible.gauss (0.283831, 0.00292745, x - 435.734) + JSV.common.Visible.gauss (0.113771, 0.00192849, x - 549.271) + JSV.common.Visible.gauss (0.239103, 0.00255944, x - 460.547); yb = JSV.common.Visible.gauss (0.239617, 0.00117296, x - 530.517) + JSV.common.Visible.gauss (0.910377, 0.000300984, x - 565.635) + JSV.common.Visible.gauss (0.0311013, 0.00152386, x - 463.833); zb = JSV.common.Visible.gauss (0.988366, 0.00220336, x - 456.345) + JSV.common.Visible.gauss (0.381551, 0.000848554, x - 450.871) + JSV.common.Visible.gauss (0.355693, 0.000628546, x - 470.668) + JSV.common.Visible.gauss (0.81862, 0.00471059, x - 433.144); var y = xyCoords[i].getYVal (); if (isAbsorbance) y = Math.pow (10, -Math.max (y, 0)); xyzd[0] += y * xb * cie; xyzd[1] += y * yb * cie; xyzd[2] += y * zb * cie; xyzd[3] += yb * cie; } }, "~A,~B,~A"); c$.gauss = Clazz.defineMethod (c$, "gauss", function (a, b, x) { return a * Math.exp (-b * x * x); }, "~N,~N,~N"); });