]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.district.network/src/org/simantics/district/network/visualisations/model/DynamicSizeMap.java
Add support for gradients in dynamic visualisations
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / visualisations / model / DynamicSizeMap.java
1 package org.simantics.district.network.visualisations.model;
2
3 import java.util.List;
4
5 public class DynamicSizeMap {
6
7     private String label;
8     private List<Double> sizes;
9
10     public DynamicSizeMap(String label, List<Double> sizes) {
11         this.label = label;
12         this.sizes = sizes;
13     }
14
15     public String getLabel() {
16         return label;
17     }
18     
19     public List<Double> getSizes() {
20         return sizes;
21     }
22
23     public double getSize(double value, boolean useGradient, double defaultMin, double defaultMax) {
24         List<Double> sizes = getSizes();
25         
26         double gap = defaultMax - defaultMin;
27         double singleGap = gap / sizes.size();
28         
29         double threshold = defaultMin;
30         int i = 0;
31         while (i < sizes.size() - 1) {
32             threshold = threshold + singleGap;
33             if (value <= threshold) {
34                 break;
35             }
36             i++;
37         }
38         
39         Double size = sizes.get(i);
40         if (useGradient) {
41             
42             Double upperSize;
43             if (i + 1 != sizes.size()) {
44                 upperSize = sizes.get(i + 1);
45             } else {
46                 upperSize = size;
47             }
48
49             double delta = Math.max(value - (defaultMin + singleGap * i), 0);
50             double d = delta / singleGap;
51             double sizeDelta = (upperSize - size) * d;
52             
53             return size + sizeDelta;
54         }
55         
56         return size;
57     }
58 }