]> gerrit.simantics Code Review - simantics/district.git/blobdiff - 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
index 7edb12b912faa63a9ce1b64422cef252b5a83195..e2adb88810d78574c9022d6e569c0cdb5765e5c4 100644 (file)
@@ -20,19 +20,39 @@ public class DynamicSizeMap {
         return sizes;
     }
 
-    public double getSize(double value, double defaultMin, double defaultMax) {
+    public double getSize(double value, boolean useGradient, double defaultMin, double defaultMax) {
+        List<Double> sizes = getSizes();
         
         double gap = defaultMax - defaultMin;
-        double singleGap = gap / getSizes().size();
+        double singleGap = gap / sizes.size();
         
+        double threshold = defaultMin;
         int i = 0;
-        while (i < getSizes().size() - 1) {
-            if (value <= defaultMin + (i * singleGap)) {
+        while (i < sizes.size() - 1) {
+            threshold = threshold + singleGap;
+            if (value <= threshold) {
                 break;
             }
             i++;
         }
         
-        return getSizes().get(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;
     }
 }