1 package org.simantics.district.network.visualisations.model;
6 public class DynamicColorMap {
9 private List<RGBIntensity> intensities;
11 public DynamicColorMap(String label, List<RGBIntensity> intensities) {
13 this.intensities = intensities;
16 public String getLabel() {
20 public List<RGBIntensity> getIntensities() {
24 public static class RGBIntensity {
30 public RGBIntensity(double red, double green, double blue) {
36 public double getRed() {
40 public double getGreen() {
44 public double getBlue() {
49 public Color getColor(double value, boolean useGradient, double defaultMin, double defaultMax) {
50 List<RGBIntensity> intensities = getIntensities();
52 double gap = defaultMax - defaultMin;
53 double singleGap = gap / intensities.size();
55 double threshold = defaultMin;
57 while (i < intensities.size() - 1) {
58 threshold = threshold + singleGap;
59 if (value <= threshold) {
65 RGBIntensity intensity = intensities.get(i);
68 RGBIntensity upperLimitIntensity;
69 if (i + 1 != intensities.size())
70 upperLimitIntensity = intensities.get(i + 1);
72 upperLimitIntensity = intensity;
74 double minRed = intensity.getRed();
75 double minGreen = intensity.getGreen();
76 double minBlue = intensity.getBlue();
78 double maxRed = upperLimitIntensity.getRed();
79 double maxGreen = upperLimitIntensity.getGreen();
80 double maxBlue = upperLimitIntensity.getBlue();
82 double delta = Math.max(value - (defaultMin + singleGap * i), 0);
84 double d = delta / singleGap;
86 double redDelta = (maxRed - minRed) * d;
87 double greenDelta = (maxGreen - minGreen) * d;
88 double blueDelta = (maxBlue - minBlue) * d;
89 return new Color((float)(minRed + redDelta), (float)(minGreen + greenDelta), (float)(minBlue + blueDelta));
91 return new Color((float)intensity.getRed(), (float)intensity.getGreen(), (float)intensity.getBlue());