Mercurial > dive4elements > river
changeset 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 | 8f59aa01c22a |
children | 4b54d2ee728e f2473dc34535 |
files | artifacts/doc/conf/themes/default.xml artifacts/doc/conf/themes/second.xml artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthChartExtender.java artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java artifacts/src/main/java/org/dive4elements/river/themes/ThemeDocument.java |
diffstat | 6 files changed, 57 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/doc/conf/themes/default.xml Tue Feb 12 14:06:27 2019 +0100 +++ b/artifacts/doc/conf/themes/default.xml Tue Feb 12 14:08:16 2019 +0100 @@ -2709,6 +2709,8 @@ <field name="showarealabel" type="boolean" display="Flächenbeschriftung anzeigen" default="false" hints="hidden"/> <field name="showmaximum" type="boolean" display="Maximum anzeigen" default="false"/> + + <field name="baselineColor" type="Color" display="Farbe der 0-Linie" default="0, 0, 0" hints="hidden"/> </fields> </theme> <theme name="SInfoFlowDepthDevelopment">
--- a/artifacts/doc/conf/themes/second.xml Tue Feb 12 14:06:27 2019 +0100 +++ b/artifacts/doc/conf/themes/second.xml Tue Feb 12 14:08:16 2019 +0100 @@ -2697,6 +2697,8 @@ <field name="showarealabel" type="boolean" display="Flächenbeschriftung anzeigen" default="false" hints="hidden"/> <field name="showmaximum" type="boolean" display="Maximum anzeigen" default="false"/> + + <field name="baselineColor" type="Color" display="Farbe der 0-Linie" default="0, 0, 0" hints="hidden"/> </fields> </theme> <theme name="SInfoFlowDepthDevelopment">
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthChartExtender.java Tue Feb 12 14:06:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthChartExtender.java Tue Feb 12 14:08:16 2019 +0100 @@ -9,9 +9,6 @@ */ package org.dive4elements.river.artifacts.sinfo.flowdepth; -import java.awt.BasicStroke; -import java.awt.Stroke; - import org.dive4elements.river.exports.ChartExtender; import org.dive4elements.river.exports.DiagramGenerator; import org.jfree.chart.axis.ValueAxis; @@ -60,15 +57,6 @@ @Override public void afterGenerateChart(final DiagramGenerator generator, final XYPlot plot) { - final ValueAxis tkhAxis = generator.getAxis(TKH_AXIS); - if (tkhAxis != null) { - /* show baseline if tkhAxis is present */ - - // TODO: it would probably better to configure this via the ChartSettings, but currently no chart settings are loaded, - // so it is unclear if that feature still works. - final Stroke baselineStroke = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER); - plot.setRangeZeroBaselineStroke(baselineStroke); - plot.setRangeZeroBaselineVisible(true); - } + /* nothing to do */ } } \ No newline at end of file
--- 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
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java Tue Feb 12 14:06:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java Tue Feb 12 14:08:16 2019 +0100 @@ -144,6 +144,7 @@ applyShowLineLabel(renderer); applyPointStyle(renderer); applyShowMinimumMaximum(renderer); + applyBaseLineStyle(renderer); if (this.mode == FILL_MODE.UNDER) { renderer.setAreaCalculationMode(StableXYDifferenceRenderer.CALCULATE_NEGATIVE_AREA); } else if (this.mode == FILL_MODE.ABOVE) { @@ -168,6 +169,11 @@ // renderer.setIsMaximumShapeVisible(maximumVisible); } + private void applyBaseLineStyle(final StableXYDifferenceRenderer renderer) { + final Color c = this.theme.parseBaseLineColor(); + renderer.setBaseLineColor(c); + } + private void applyFillColor(final StableXYDifferenceRenderer renderer) { Paint paint = parseFillPaint();
--- a/artifacts/src/main/java/org/dive4elements/river/themes/ThemeDocument.java Tue Feb 12 14:06:27 2019 +0100 +++ b/artifacts/src/main/java/org/dive4elements/river/themes/ThemeDocument.java Tue Feb 12 14:08:16 2019 +0100 @@ -124,6 +124,8 @@ public final static String SHOWEXTRAMARK = "showextramark"; + private final static String BASE_LINE_COLOR = "baselineColor"; + /* boolean parameter if the range of this theme should be considered when auto-zooming. Only works for area-series at the moment */ private static final String CALCULATE_RANGE = "calculateRange"; @@ -596,6 +598,10 @@ return parseInteger(getTransparencyString(), 50); } + public Color parseBaseLineColor() { + final String colorStr = getValue(BASE_LINE_COLOR); + return parseColor(colorStr); + } /** * Gets color from color field.