changeset 6862:590d420ed382

StyledSeriesBuilder: Added new method to add points with a scane factor.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Mon, 19 Aug 2013 12:42:27 +0200
parents fb9babfa2aa3
children 83188afbee83
files artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java
diffstat 1 files changed, 47 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java	Mon Aug 19 12:22:31 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java	Mon Aug 19 12:42:27 2013 +0200
@@ -40,6 +40,53 @@
 
 
     /**
+     * Add points to series, create gaps if certain distance between
+     * points is met and scale the Y value.
+     *
+     * @param series Series to add points to.
+     * @param points Points to add to series, points[0] to 1st dim, points[1]
+     *               to 2nd dim.
+     * @param skipNANs if true, skip NAN values in points parameter. Otherwise,
+     *                 the NaNs lead to gaps in graph.
+     * @param distance if two consecutive entries in points[0] are more
+     *                 than distance apart, create a NaN value to skip in display.
+     *                 Still, create a line segment.
+     * @param factor   Factor by which to scale the y value (points[1]).
+     */
+    public static void addPointsFactorY(XYSeries series,
+        double[][] points,
+        boolean skipNANs,
+        double distance,
+        double factor
+    ) {
+        if (points == null || points.length <= 1) {
+            return;
+        }
+        double [] xPoints = points[0];
+        double [] yPoints = points[1];
+        for (int i = 0; i < xPoints.length; i++) {
+            if (skipNANs &&
+                (Double.isNaN(xPoints[i]) || Double.isNaN(yPoints[i]))) {
+                logger.warn ("Skipping NaN in StyledSeriesBuilder.");
+                continue;
+            }
+            // Create gap if distance >= distance.
+            if (i != 0 && Math.abs(xPoints[i-1] - xPoints[i]) >= distance) {
+                // Create at least a small segment for last point.
+                if (!Double.isNaN(yPoints[i-1])) {
+                    series.add(xPoints[i-1]+0.99d*(distance)/2.d, yPoints[i-1]*factor, false);
+                }
+
+                if (!Double.isNaN(yPoints[i-1]) && !Double.isNaN(yPoints[i])) {
+                    series.add((xPoints[i-1]+xPoints[i])/2.d, Double.NaN, false);
+                }
+            }
+            series.add(xPoints[i], yPoints[i]*factor, false);
+        }
+    }
+
+
+    /**
      * Add points to series, create gaps if certain distance between points is met.
      *
      * @param series Series to add points to.

http://dive4elements.wald.intevation.org