package org.simantics.district.network.visualisations.model; import java.util.List; public class DynamicSizeMap { private String label; private List sizes; public DynamicSizeMap(String label, List sizes) { this.label = label; this.sizes = sizes; } public String getLabel() { return label; } public List getSizes() { return sizes; } public double getSize(double value, boolean useGradient, double defaultMin, double defaultMax) { List sizes = getSizes(); double gap = defaultMax - defaultMin; double singleGap = gap / sizes.size(); double threshold = defaultMin; int i = 0; while (i < sizes.size() - 1) { threshold = threshold + singleGap; if (value <= threshold) { break; } i++; } Double size = sizes.get(i); if (useGradient) { Double upperSize; if (i + 1 != sizes.size()) { upperSize = sizes.get(i + 1); } else { upperSize = size; } double delta = Math.max(value - (defaultMin + singleGap * i), 0); double d = delta / singleGap; double sizeDelta = (upperSize - size) * d; return size + sizeDelta; } return size; } }