# HG changeset patch # User Felix Wolfsteller # Date 1335366939 0 # Node ID 0a84313efe602b27887425721936c8e77183ba09 # Parent d6794864a4b8a60737d6a62c221bfaa79d9a7faa Stub for labeling dataseries in EnhancedLineAndShapeRenerer. flys-artifacts/trunk@4299 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r d6794864a4b8 -r 0a84313efe60 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Wed Apr 25 14:41:01 2012 +0000 +++ b/flys-artifacts/ChangeLog Wed Apr 25 15:15:39 2012 +0000 @@ -1,3 +1,9 @@ +2012-04-25 Felix Wolfsteller + + * src/main/java/de/intevation/flys/jfree/EnhancedLineAndShapeRenderer.java + (isMinimumX): Implemented minimum finding for x in analogy to the ones for + y values. Stub to label dataset curves in plot. + 2012-04-25 Felix Wolfsteller * src/main/java/de/intevation/flys/jfree/EnhancedLineAndShapeRenderer.java: diff -r d6794864a4b8 -r 0a84313efe60 flys-artifacts/src/main/java/de/intevation/flys/jfree/EnhancedLineAndShapeRenderer.java --- a/flys-artifacts/src/main/java/de/intevation/flys/jfree/EnhancedLineAndShapeRenderer.java Wed Apr 25 14:41:01 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/jfree/EnhancedLineAndShapeRenderer.java Wed Apr 25 15:15:39 2012 +0000 @@ -33,6 +33,7 @@ protected BooleanList isMaximumShapeVisible; protected Map seriesMinimum; + protected Map seriesMinimumX; protected Map seriesMaximum; @@ -42,6 +43,7 @@ this.isMaximumShapeVisible = new BooleanList(); this.seriesMinimum = new HashMap(); this.seriesMaximum = new HashMap(); + this.seriesMinimumX = new HashMap(); } @@ -147,9 +149,10 @@ if (getItemShapeVisible(dataset, series, item)) { Shape shape = null; - // OPTIMIZE instead of calculating minimum and maximum for every - // point, calculate it just once (assume that dataset - // content does not change during rendering). + // OPTIMIZE: instead of calculating minimum and maximum for every + // point, calculate it just once (assume that dataset + // content does not change during rendering). + // NOTE: Above OPTIMIZE might already be fulfilled to most extend. boolean isMinimum = isMinimumShapeVisible(series) && isMinimum(dataset, series, item); @@ -214,7 +217,7 @@ } } // TODO labeling of waterlevels could happen here, too. - } + } // if (getItemShapeVisible(dataset, series, item)) double xx = transX1; double yy = transY1; @@ -229,6 +232,13 @@ (y1 < 0.0)); } + boolean doWaterlevelLabel = false; + if (isMinimumX (dataset, series, item)) { + String waterlevelLabel = "label"; + // TODO Force water of some German rivers to flow direction mountains. + g2.drawString("waterlevel label", (float)xx, (float)yy-3f); + } + int domainAxisIndex = plot.getDomainAxisIndex(domainAxis); int rangeAxisIndex = plot.getRangeAxisIndex(rangeAxis); updateCrosshairValues(crosshairState, x1, y1, domainAxisIndex, @@ -270,6 +280,35 @@ } + public boolean isMinimumX(XYDataset dataset, int series, int item) { + return dataset.getXValue(series, item) == getMinimumX(dataset, series); + } + + public double getMinimumX(XYDataset dataset, int series) { + Integer key = Integer.valueOf(series); + Double old = seriesMinimumX.get(key); + + if (old != null) { + return old.doubleValue(); + } + + logger.debug("Compute minimum of Series: " + series); + + double min = Double.MAX_VALUE; + + for (int i = 0, n = dataset.getItemCount(series); i < n; i++) { + double tmpValue = dataset.getXValue(series, i); + + if (tmpValue < min) { + min = tmpValue; + } + } + + seriesMinimumX.put(key, Double.valueOf(min)); + + return min; + } + public boolean isMinimum(XYDataset dataset, int series, int item) { return dataset.getYValue(series, item) == getMinimum(dataset, series); } @@ -306,6 +345,7 @@ } + // public double getMaximum(XYDataset dataset, int series) { Integer key = Integer.valueOf(series); Double old = seriesMaximum.get(key);