# HG changeset patch # User Felix Wolfsteller # Date 1376908947 -7200 # Node ID 590d420ed382ffcb02988dd39fc92d3a6341c84b # Parent fb9babfa2aa3e21f1ba65a571f5a20bd1a91d42b StyledSeriesBuilder: Added new method to add points with a scane factor. diff -r fb9babfa2aa3 -r 590d420ed382 artifacts/src/main/java/org/dive4elements/river/exports/StyledSeriesBuilder.java --- 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.