another color layer abstraction

This commit is contained in:
Stewart Allen 2020-11-11 10:07:43 -05:00
commit 02f5f349e2

View file

@ -398,7 +398,7 @@
} }
FDM.rateToColor = function(rate, max) { FDM.rateToColor = function(rate, max) {
return hsv2rgb({h: rate/max, s:1, v:0.85}); return currentColorFunction(rate/max, 1, 0.85);
}; };
FDM.prepareRender = function(levels, update, options) { FDM.prepareRender = function(levels, update, options) {
@ -507,20 +507,23 @@
return layers; return layers;
} }
const colorFunctions = {
default: hsv2rgb.bind({ seg: 5, fn: color5 }),
dark: hsv2rgb.bind({ seg: 3, fn: color3 })
};
let currentColorFunction = colorFunctions.default;
// hsv values all = 0 to 1 // hsv values all = 0 to 1
function hsv2rgb(hsv, mode) { function hsv2rgb(h, s, v) {
const { h, s, v } = hsv; const div = this.seg;
const div = {linear: 5, pastel: 3}[mode] || 5;
const ss = 1 / div; const ss = 1 / div;
const seg = Math.floor(h / ss); const seg = Math.floor(h / ss);
const rem = h - (seg * ss); const rem = h - (seg * ss);
const inc = (rem / ss); const inc = (rem / ss);
const dec = (1 - inc); const dec = (1 - inc);
const rgb = {r: 0, g: 0, b: 0}; const rgb = {r: 0, g: 0, b: 0};
switch (div) { this.fn(rgb, inc, seg);
case 3: color3(rgb, inc, seg); break;
case 5: color5(rgb, inc, seg); break;
}
rgb.r = ((rgb.r * 255 * v) & 0xff) << 16; rgb.r = ((rgb.r * 255 * v) & 0xff) << 16;
rgb.g = ((rgb.g * 255 * v) & 0xff) << 8; rgb.g = ((rgb.g * 255 * v) & 0xff) << 8;
rgb.b = ((rgb.b * 255 * v) & 0xff); rgb.b = ((rgb.b * 255 * v) & 0xff);