| 1 |
e6e6467 |
Dawsh |
2y ago |
/** |
| 2 |
e6e6467 |
Dawsh |
2y ago |
* @module Color range generator |
| 3 |
e6e6467 |
Dawsh |
2y ago |
* |
| 4 |
e6e6467 |
Dawsh |
2y ago |
*/ |
| 5 |
e6e6467 |
Dawsh |
2y ago |
|
| 6 |
e6e6467 |
Dawsh |
2y ago |
function calculatePoint(i: number, intervalSize: number, colorRangeInfo: ColorRange) { |
| 7 |
e6e6467 |
Dawsh |
2y ago |
const { colorStart, colorEnd, useEndAsStart } = colorRangeInfo; |
| 8 |
e6e6467 |
Dawsh |
2y ago |
return (useEndAsStart |
| 9 |
e6e6467 |
Dawsh |
2y ago |
? (colorEnd - (i * intervalSize)) |
| 10 |
e6e6467 |
Dawsh |
2y ago |
: (colorStart + (i * intervalSize))); |
| 11 |
e6e6467 |
Dawsh |
2y ago |
} |
| 12 |
e6e6467 |
Dawsh |
2y ago |
|
| 13 |
e6e6467 |
Dawsh |
2y ago |
/* Must use an interpolated color scale, which has a range of [0, 1] */ |
| 14 |
e6e6467 |
Dawsh |
2y ago |
interface ColorRange { |
| 15 |
e6e6467 |
Dawsh |
2y ago |
colorStart: number; |
| 16 |
e6e6467 |
Dawsh |
2y ago |
colorEnd: number; |
| 17 |
e6e6467 |
Dawsh |
2y ago |
useEndAsStart: boolean; |
| 18 |
e6e6467 |
Dawsh |
2y ago |
} |
| 19 |
e6e6467 |
Dawsh |
2y ago |
|
| 20 |
e6e6467 |
Dawsh |
2y ago |
/** |
| 21 |
e6e6467 |
Dawsh |
2y ago |
* @param dataLength - Number of colors to be generated |
| 22 |
e6e6467 |
Dawsh |
2y ago |
* @param colorScale - The D3 interpolate color scale |
| 23 |
e6e6467 |
Dawsh |
2y ago |
* @param colorRangeInfo - Color range spectrum |
| 24 |
e6e6467 |
Dawsh |
2y ago |
* @returns An array of colors within the choosen spectrum |
| 25 |
e6e6467 |
Dawsh |
2y ago |
* |
| 26 |
e6e6467 |
Dawsh |
2y ago |
* @description |
| 27 |
e6e6467 |
Dawsh |
2y ago |
* - Must use an interpolated color scale, which has a range of [0, 1]. |
| 28 |
e6e6467 |
Dawsh |
2y ago |
* - D3 Interpolators are interpolateInfero, interpolateCool, interpolateRainbow, interpolateSpectral, interpolateRdYlBu |
| 29 |
e6e6467 |
Dawsh |
2y ago |
*/ |
| 30 |
e6e6467 |
Dawsh |
2y ago |
export function interpolateColors(dataLength: number, colorScale: (c: number) => string, colorRangeInfo: ColorRange) { |
| 31 |
e6e6467 |
Dawsh |
2y ago |
const { colorStart, colorEnd } = colorRangeInfo; |
| 32 |
e6e6467 |
Dawsh |
2y ago |
const colorRange = colorEnd - colorStart; |
| 33 |
e6e6467 |
Dawsh |
2y ago |
const intervalSize = colorRange / dataLength; |
| 34 |
e6e6467 |
Dawsh |
2y ago |
let i, colorPoint; |
| 35 |
e6e6467 |
Dawsh |
2y ago |
const colorArray = []; |
| 36 |
e6e6467 |
Dawsh |
2y ago |
|
| 37 |
e6e6467 |
Dawsh |
2y ago |
for (i = 0; i < dataLength; i++) { |
| 38 |
e6e6467 |
Dawsh |
2y ago |
colorPoint = calculatePoint(i, intervalSize, colorRangeInfo); |
| 39 |
e6e6467 |
Dawsh |
2y ago |
colorArray.push(colorScale(colorPoint)); |
| 40 |
e6e6467 |
Dawsh |
2y ago |
} |
| 41 |
e6e6467 |
Dawsh |
2y ago |
|
| 42 |
e6e6467 |
Dawsh |
2y ago |
return colorArray; |
| 43 |
e6e6467 |
Dawsh |
2y ago |
} |