Mercurial > dive4elements > river
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