gernotbelger@9496: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9496: * Software engineering by gernotbelger@9496: * Björnsen Beratende Ingenieure GmbH gernotbelger@9496: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9496: * gernotbelger@9496: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9496: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9496: * documentation coming with Dive4Elements River for details. gernotbelger@9496: */ gernotbelger@9496: package org.dive4elements.river.jfree; gernotbelger@9496: gernotbelger@9496: import java.awt.Graphics2D; gernotbelger@9496: import java.awt.Paint; gernotbelger@9496: import java.awt.Stroke; gernotbelger@9496: import java.awt.geom.GeneralPath; gernotbelger@9496: import java.awt.geom.Rectangle2D; gernotbelger@9496: gernotbelger@9496: import org.dive4elements.river.jfree.StripedAreaDataset.Stripe; gernotbelger@9496: import org.jfree.chart.axis.ValueAxis; gernotbelger@9496: import org.jfree.chart.plot.CrosshairState; gernotbelger@9496: import org.jfree.chart.plot.PlotRenderingInfo; gernotbelger@9496: import org.jfree.chart.plot.XYPlot; gernotbelger@9496: import org.jfree.chart.renderer.xy.AbstractXYItemRenderer; gernotbelger@9496: import org.jfree.chart.renderer.xy.XYItemRendererState; gernotbelger@9496: import org.jfree.data.xy.XYDataset; gernotbelger@9496: gernotbelger@9496: /** gernotbelger@9496: * @author Domenico Nardi Tironi gernotbelger@9496: */ gernotbelger@9496: final class StripedAreaDatasetRenderer extends AbstractXYItemRenderer { gernotbelger@9496: gernotbelger@9496: private static final long serialVersionUID = 1L; gernotbelger@9496: gernotbelger@9496: @Override gernotbelger@9496: public void drawItem(final Graphics2D g2, final XYItemRendererState state, final Rectangle2D dataArea, final PlotRenderingInfo info, final XYPlot plot, gernotbelger@9496: final ValueAxis domainAxis, final ValueAxis rangeAxis, final XYDataset dataset, final int series, final int item, gernotbelger@9496: final CrosshairState crosshairState, final int pass) { gernotbelger@9496: gernotbelger@9496: if (item != 0) gernotbelger@9496: return; gernotbelger@9496: gernotbelger@9496: final StripedAreaDataset stripedDataset = (StripedAreaDataset) dataset; gernotbelger@9496: final Stripe stripe = stripedDataset.getStripe(series); gernotbelger@9496: gernotbelger@9496: final double lower = stripe.getLower(); gernotbelger@9496: final double upper = stripe.getUpper(); gernotbelger@9496: gernotbelger@9496: final double transLower = Double.isNaN(lower) ? dataArea.getMaxY() : rangeAxis.valueToJava2D(lower, dataArea, plot.getRangeAxisEdge()); gernotbelger@9496: final double transUpper = Double.isNaN(upper) ? dataArea.getMinY() : rangeAxis.valueToJava2D(upper, dataArea, plot.getRangeAxisEdge()); gernotbelger@9496: gernotbelger@9496: final double transLeft = dataArea.getMinX(); gernotbelger@9496: final double transRight = dataArea.getMaxX(); gernotbelger@9496: gernotbelger@9496: final GeneralPath area = new GeneralPath(); gernotbelger@9496: gernotbelger@9496: area.moveTo(transLeft, transLower); gernotbelger@9496: area.lineTo(transRight, transLower); gernotbelger@9496: area.lineTo(transRight, transUpper); gernotbelger@9496: area.lineTo(transLeft, transUpper); gernotbelger@9496: area.closePath(); gernotbelger@9496: gernotbelger@9496: final Paint paint = getItemPaint(series, item); gernotbelger@9496: final Stroke stroke = getItemStroke(series, item); gernotbelger@9496: g2.setPaint(paint); gernotbelger@9496: g2.setStroke(stroke); gernotbelger@9496: gernotbelger@9496: g2.fill(area); gernotbelger@9496: } gernotbelger@9496: }