view gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalCrossSectionChart.java @ 447:92b7ccbf6163

Improved generation of iso lines in vertical cross section. gnv-artifacts/trunk@495 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 01 Jan 2010 21:52:41 +0000
parents f5a041000357
children c7ca2fce041f
line wrap: on
line source
package de.intevation.gnv.chart;

import java.util.Locale;

import java.awt.Color;
import java.awt.Paint;

import de.intevation.gnv.math.AttributedXYColumns;

import de.intevation.gnv.jfreechart.PolygonDataset;
import de.intevation.gnv.jfreechart.PolygonPlot;
import de.intevation.gnv.jfreechart.PolygonRenderer;

import de.intevation.gnv.raster.Palette;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.SymbolAxis;

import org.jfree.chart.title.PaintScaleLegend;

import org.jfree.chart.renderer.LookupPaintScale;

import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;

/**
 * @author Ingo Weinzierl      (ingo.weinzierl@intevation.de)
 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de)
 */
public class VerticalCrossSectionChart
implements   Chart
{
    public static final class PalettePaintLookup
    implements PolygonRenderer.PaintLookup
    {
        private Palette palette;

        public PalettePaintLookup(Palette palette) {
            this.palette = palette;
        }

        public Paint getPaint(int index) {
            return index < 0
                ? Color.black
                : palette.getColor(index);
        }
    } // class PalettePaintLookup

    protected JFreeChart chart;

    protected AttributedXYColumns columns;
    protected Palette             palette;
    protected Locale              locale;

    public VerticalCrossSectionChart() {
    }

    public VerticalCrossSectionChart(
        AttributedXYColumns columns,
        Palette             palette,
        Locale              locale
    ) {
        this.columns = columns;
        this.palette = palette;
        this.locale  = locale;
    }

    protected JFreeChart createChart() {

        String title        = "Neues 2D-Diagramm";
        String xAxis        = "x-Achse des Diagramms";
        String yAxis        = "y-Achse des Diagramms";
        boolean legendB     = false;
        boolean tooltips    = false;
        boolean urls        = false;

        PlotOrientation po  = PlotOrientation.HORIZONTAL;
        PolygonDataset data = columns.getPolygonDataset();

        PolygonRenderer renderer = new PolygonRenderer(
            new PalettePaintLookup(palette));

        ValueAxis domainAxis = new NumberAxis(xAxis);
        ValueAxis rangeAxis  = new NumberAxis(yAxis);

        PolygonPlot plot = new PolygonPlot(
            data,
            renderer,
            domainAxis,
            rangeAxis,
            null);

        int colors = palette.getSize();
        LookupPaintScale lookupPaint =
            new LookupPaintScale(-0.5d, colors-0.5d, Color.white);

        Color color = null;

        String [] labels = new String[colors];
        for (int i = 0; i < colors; i++) {
            color     = palette.getColor(colors-1-i);
            labels[i] = palette.getEntryByIndex(colors-1-i).getDescription();
            lookupPaint.add(i-0.5d, color);
        }

        JFreeChart chart = new JFreeChart(
            title,
            JFreeChart.DEFAULT_TITLE_FONT,
            plot,
            legendB);

        chart.removeLegend();

        SymbolAxis scale = new SymbolAxis("Temperatur", labels);
        scale.setRange(-1.5d, colors+0.5d);
        scale.setGridBandsVisible(false);
        scale.setPlot(plot);

        PaintScaleLegend legend = new PaintScaleLegend(
            lookupPaint, scale);
        legend.setMargin(new RectangleInsets(3d, 10d, 3d, 10d));
        legend.setPosition(RectangleEdge.LEFT);
        legend.setAxisOffset(5d);

        chart.addSubtitle(legend);

        return chart;
    }

    public JFreeChart generateChart() {
        if (chart == null) {
            chart = createChart();
        }
        return chart;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org