Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 59x 59x 59x 8x 8x 8x 4x 4x 4x 4x 4x 4x 7x 7x 7x 1x 6x 2x 4x 1x 3x 2x 2x 2x 1x 1x 1x 52x 52x 52x 52x 52x 52x 16x 36x 13x 13x 13x 13x 23x 2x 21x 2x 2x 2x 2x 19x | import { ColorRange, MapColors } from "../../codeCharta.model" import { ColorConverter } from "./colorConverter" import { Color } from "three" import { MetricMinMax } from "../../state/selectors/accumulatedData/metricData/selectedColorMetricData.selector" export const gradientCalculator = { getColorByTrueGradient(mapColors: MapColors, colorRange: ColorRange, nodeMetricDataRange: MetricMinMax, metricValue: number) { const middle = (colorRange.from + colorRange.to) / 2 const neutralColorRGB = ColorConverter.convertHexToColorObject(mapColors.neutral) if (metricValue <= middle) { const neutralFactor = metricValue / middle const positiveColorRGB = ColorConverter.convertHexToColorObject(mapColors.positive) return ColorConverter.convertColorToHex(new Color().lerpColors(positiveColorRGB, neutralColorRGB, neutralFactor)) } const negativeFactor = (metricValue - middle) / (nodeMetricDataRange.maxValue - middle) const negativeColorRGB = ColorConverter.convertHexToColorObject(mapColors.negative) return ColorConverter.convertColorToHex(new Color().lerpColors(neutralColorRGB, negativeColorRGB, negativeFactor)) }, getColorByFocusedGradient(mapColors: MapColors, colorRange: ColorRange, nodeMetricDataRange: MetricMinMax, metricValue: number) { const middle = (colorRange.from + colorRange.to) / 2 const neutralColorRGB = ColorConverter.convertHexToColorObject(mapColors.neutral) if (metricValue < colorRange.from || colorRange.from === nodeMetricDataRange.maxValue) { return mapColors.positive } if (metricValue >= colorRange.to && colorRange.to !== nodeMetricDataRange.maxValue) { return mapColors.negative } if (metricValue === middle) { return mapColors.neutral } if (metricValue < middle) { const neutralFactor = metricValue / (middle + colorRange.from) const positiveColorRGB = ColorConverter.convertHexToColorObject(mapColors.positive) return ColorConverter.convertColorToHex(new Color().lerpColors(positiveColorRGB, neutralColorRGB, neutralFactor)) } const negativeFactor = (metricValue - middle) / (colorRange.to - middle) const negativeColorRGB = ColorConverter.convertHexToColorObject(mapColors.negative) return ColorConverter.convertColorToHex(new Color().lerpColors(neutralColorRGB, negativeColorRGB, negativeFactor)) }, getColorByWeightedGradient(mapColors: MapColors, colorRange: ColorRange, nodeMetricDataRange: MetricMinMax, metricValue: number) { const endPositive = Math.max(colorRange.from - (colorRange.to - colorRange.from) / 2, colorRange.from / 2) const startNeutral = 2 * colorRange.from - endPositive const endNeutral = colorRange.to - (colorRange.to - colorRange.from) / 2 const startNegative = colorRange.to Iif (endPositive === startNeutral && startNeutral === endNeutral && endNeutral === startNegative) { Iif (metricValue < endPositive || colorRange.to === nodeMetricDataRange.maxValue) { return mapColors.positive } return mapColors.negative } if (metricValue <= endPositive) { return mapColors.positive } if (metricValue < startNeutral) { const factor = (metricValue - endPositive) / (startNeutral - endPositive) const positiveColorRGB = ColorConverter.convertHexToColorObject(mapColors.positive) const neutralColorRGB = ColorConverter.convertHexToColorObject(mapColors.neutral) return ColorConverter.convertColorToHex(new Color().lerpColors(positiveColorRGB, neutralColorRGB, factor)) } if (metricValue <= endNeutral) { return mapColors.neutral } if (metricValue < startNegative || colorRange.to === nodeMetricDataRange.maxValue) { const factor = (metricValue - endNeutral) / (startNegative - endNeutral) const neutralColorRGB = ColorConverter.convertHexToColorObject(mapColors.neutral) const negativeColorRGB = ColorConverter.convertHexToColorObject(mapColors.negative) return ColorConverter.convertColorToHex(new Color().lerpColors(neutralColorRGB, negativeColorRGB, factor)) } return mapColors.negative } } |