view artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDatasetRenderer.java @ 9496:d8e753d0fdb9

stripedArea introduced for Assessment Scheme/Bewertungsschema
author gernotbelger
date Wed, 26 Sep 2018 15:48:05 +0200
parents
children
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
 * Software engineering by
 *  Björnsen Beratende Ingenieure GmbH
 *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */
package org.dive4elements.river.jfree;

import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Stroke;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;

import org.dive4elements.river.jfree.StripedAreaDataset.Stripe;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CrosshairState;
import org.jfree.chart.plot.PlotRenderingInfo;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.AbstractXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRendererState;
import org.jfree.data.xy.XYDataset;

/**
 * @author Domenico Nardi Tironi
 */
final class StripedAreaDatasetRenderer extends AbstractXYItemRenderer {

    private static final long serialVersionUID = 1L;

    @Override
    public void drawItem(final Graphics2D g2, final XYItemRendererState state, final Rectangle2D dataArea, final PlotRenderingInfo info, final XYPlot plot,
            final ValueAxis domainAxis, final ValueAxis rangeAxis, final XYDataset dataset, final int series, final int item,
            final CrosshairState crosshairState, final int pass) {

        if (item != 0)
            return;

        final StripedAreaDataset stripedDataset = (StripedAreaDataset) dataset;
        final Stripe stripe = stripedDataset.getStripe(series);

        final double lower = stripe.getLower();
        final double upper = stripe.getUpper();

        final double transLower = Double.isNaN(lower) ? dataArea.getMaxY() : rangeAxis.valueToJava2D(lower, dataArea, plot.getRangeAxisEdge());
        final double transUpper = Double.isNaN(upper) ? dataArea.getMinY() : rangeAxis.valueToJava2D(upper, dataArea, plot.getRangeAxisEdge());

        final double transLeft = dataArea.getMinX();
        final double transRight = dataArea.getMaxX();

        final GeneralPath area = new GeneralPath();

        area.moveTo(transLeft, transLower);
        area.lineTo(transRight, transLower);
        area.lineTo(transRight, transUpper);
        area.lineTo(transLeft, transUpper);
        area.closePath();

        final Paint paint = getItemPaint(series, item);
        final Stroke stroke = getItemStroke(series, item);
        g2.setPaint(paint);
        g2.setStroke(stroke);

        g2.fill(area);
    }
}

http://dive4elements.wald.intevation.org