diff artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java @ 9602:6b2496d71936

Reimplemented baseline for tkh. Extended area-dataset to be able to draw baseline.
author gernotbelger
date Tue, 12 Feb 2019 14:08:16 +0100
parents eec4df8165a1
children
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java	Tue Feb 12 14:06:27 2019 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java	Tue Feb 12 14:08:16 2019 +0100
@@ -120,6 +120,7 @@
 import org.jfree.chart.renderer.xy.AbstractXYItemRenderer;
 import org.jfree.chart.renderer.xy.XYItemRendererState;
 import org.jfree.chart.urls.XYURLGenerator;
+import org.jfree.data.Range;
 import org.jfree.data.xy.DefaultXYDataset;
 import org.jfree.data.xy.XYDataset;
 import org.jfree.data.xy.XYSeries;
@@ -196,6 +197,8 @@
     /** Font to draw label of calculated area with. */
     private Font labelFont;
 
+    private Color baseLineColor = null;
+
     /** Whether or not to draw a label that shows the title of the theme. */
     private boolean drawTitleLabel = false;
 
@@ -304,6 +307,10 @@
         this.labelBGColor = color;
     }
 
+    public void setBaseLineColor(final Color baseLineColor) {
+        this.baseLineColor = baseLineColor;
+    }
+
     /**
      * Sets color that is used if drawOutline is true.
      */
@@ -1261,6 +1268,8 @@
             // draw labels: only once per theme!
             drawAreaLabel(g2, dataArea, plot, domainAxis, rangeAxis);
             drawTitleLabel(g2, dataArea, info.getOwner().getEntityCollection(), dataset);
+
+            drawZeroBaseline(g2, dataArea, plot, domainAxis, rangeAxis);
         }
     }
 
@@ -1310,6 +1319,37 @@
         }
     }
 
+    private void drawZeroBaseline(final Graphics2D g2, final Rectangle2D dataArea, final XYPlot plot, final ValueAxis domainAxis, final ValueAxis rangeAxis) {
+
+        if (this.baseLineColor == null)
+            return;
+
+        final PlotOrientation orientation = plot.getOrientation();
+        final RectangleEdge domainAxisLocation = plot.getDomainAxisEdge();
+        final RectangleEdge rangeAxisLocation = plot.getRangeAxisEdge();
+
+        final Range domainRange = domainAxis.getRange();
+        final double x0 = domainRange.getLowerBound();
+        final double x1 = domainRange.getUpperBound();
+
+        final double screenX0 = domainAxis.valueToJava2D(x0, dataArea, domainAxisLocation);
+        final double screenX1 = domainAxis.valueToJava2D(x1, dataArea, domainAxisLocation);
+        final double screenY = rangeAxis.valueToJava2D(0.0, dataArea, rangeAxisLocation);
+
+        Shape baseLine;
+        if (PlotOrientation.HORIZONTAL == orientation)
+            baseLine = new Line2D.Double(screenY, screenX0, screenY, screenX1);
+        else
+            baseLine = new Line2D.Double(screenX0, screenY, screenX1, screenY);
+
+        if (baseLine.intersects(dataArea)) {
+            g2.setPaint(this.baseLineColor);
+            g2.setStroke(new BasicStroke(2));
+
+            g2.draw(baseLine);
+        }
+    }
+
     /**
      * Draws the visual representation of a single data item, second pass. In
      * the second pass, the renderer draws the lines and shapes for the

http://dive4elements.wald.intevation.org