Package umontreal.iro.lecuyer.charts

Source Code of umontreal.iro.lecuyer.charts.EmpiricalRenderer

package umontreal.iro.lecuyer.charts;

import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.awt.Shape;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.entity.XYItemEntity;
import org.jfree.chart.labels.XYToolTipGenerator;
import org.jfree.chart.urls.XYURLGenerator;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRendererState;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.plot.PlotRenderingInfo;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.CrosshairState;
import org.jfree.data.xy.XYDataset;
import org.jfree.util.PublicCloneable;
import org.jfree.util.ShapeUtilities;

/*
* Class:        EmpiricalRenderer
* Description: 
* Environment:  Java
* Software:     SSJ
* Copyright (C) 2001  Pierre L'Ecuyer and Université de Montréal
* Organization: DIRO, Université de Montréal
* @author      
* @since

* SSJ is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License (GPL) as published by the
* Free Software Foundation, either version 3 of the License, or
* any later version.

* SSJ is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.

* A copy of the GNU General Public License is available at
   <a href="http://www.gnu.org/licenses">GPL licence site</a>.
*/


/**
* A renderer that draws horizontal lines between points and/or draws shapes
* at each data point to provide an empirical style chart.  This renderer is
* designed for use with the {XYPlot} class.
*/
public class EmpiricalRenderer extends XYLineAndShapeRenderer
         implements XYItemRenderer, Cloneable, PublicCloneable
{

   /**
    * Creates a new renderer.
    */
   public EmpiricalRenderer()
   {
      this(null, null);
   }


   /**
    * Creates a new renderer with selected tool tip and url generators.
    *
    * @param  toolTipGenerator   Tool tip generator.
    * @param  urlGenerator       Url generator.
    */
   public EmpiricalRenderer(XYToolTipGenerator toolTipGenerator, XYURLGenerator urlGenerator)
   {
      setBaseToolTipGenerator(toolTipGenerator);
      setURLGenerator(urlGenerator);
      setShapesFilled(true);
      setShapesVisible(true);
   }

   /**
    * Draws the visual representation of a single data item.
    *
    * @param g2           the graphics device.
    * @param state        the renderer state.
    * @param dataArea     the area within which the data is being drawn.
    * @param info         collects information about the drawing.
    * @param plot         the plot (can be used to obtain standard color
    *                     information etc).
    * @param domainAxis   the domain axis.
    * @param rangeAxis    the range axis.
    * @param dataset      the dataset.
    * @param series       the series index (zero-based).
    * @param item         the item index (zero-based).
    * @param crosshairState  crosshair information for the plot
    *                        (<code>null</code> permitted).
    * @param pass         the pass index.
    */
   public void drawItem(Graphics2D g2, XYItemRendererState state, Rectangle2D dataArea,
                        PlotRenderingInfo info, XYPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis,
                        XYDataset dataset, int series, int item, CrosshairState crosshairState, int pass)
   {

      if (!getItemVisible(series, item))
         return ;
      PlotOrientation orientation = plot.getOrientation();
      java.awt.Paint seriesPaint = getItemPaint(series, item);
      java.awt.Stroke seriesStroke = getItemStroke(series, item);
      g2.setPaint(seriesPaint);
      g2.setStroke(seriesStroke);
      double x0 = dataset.getXValue(series, item);
      double y0 = dataset.getYValue(series, item);
      if (java.lang.Double.isNaN(y0))
         return ;
      org.jfree.ui.RectangleEdge xAxisLocation = plot.getDomainAxisEdge();
      org.jfree.ui.RectangleEdge yAxisLocation = plot.getRangeAxisEdge();
      double transX0 = domainAxis.valueToJava2D(x0, dataArea, xAxisLocation);
      double transY0 = rangeAxis.valueToJava2D(y0, dataArea, yAxisLocation);

      double x1 = 0, y1 = 0;
      if (item < dataset.getItemCount(series) - 1) {
         x1 = dataset.getXValue(series, item + 1);
         y1 = dataset.getYValue(series, item + 1);
      } else {
         x1 = dataArea.getMaxX();
         y1 = dataArea.getMaxY();
      }

      boolean useFillPaint = getUseFillPaint();
      ;
      boolean drawOutlines = getDrawOutlines();
      if (!java.lang.Double.isNaN(y0)) {
         double transX1;
         double transY1;
         if (item < dataset.getItemCount(series) - 1) {
            transX1 = domainAxis.valueToJava2D(x1, dataArea, xAxisLocation);
            transY1 = rangeAxis.valueToJava2D(y1, dataArea, yAxisLocation);
         } else {
            transX1 = x1;
            transY1 = y1;
         }
         Line2D line = state.workingLine;
         if (orientation == PlotOrientation.HORIZONTAL) {
            line.setLine(transY0, transX0, transY0, transX1);
            g2.draw(line);
         } else if (orientation == PlotOrientation.VERTICAL) {
            line.setLine(transX0, transY0, transX1, transY0);
            g2.draw(line);
         }
      }
      if (getItemShapeVisible(series, item)) {
         Shape shape = getItemShape(series, item);
         if (orientation == PlotOrientation.HORIZONTAL)
            shape = ShapeUtilities.createTranslatedShape(shape, transY0, transX0);
         else if (orientation == PlotOrientation.VERTICAL)
            shape = ShapeUtilities.createTranslatedShape(shape, transX0, transY0);
         if (shape.intersects(dataArea)) {
            if (getItemShapeFilled(series, item)) {
               if (useFillPaint)
                  g2.setPaint(getItemFillPaint(series, item));
               else
                  g2.setPaint(getItemPaint(series, item));
               g2.fill(shape);
            }
            if (drawOutlines) {
               if (getUseOutlinePaint())
                  g2.setPaint(getItemOutlinePaint(series, item));
               else
                  g2.setPaint(getItemPaint(series, item));
               g2.setStroke(getItemOutlineStroke(series, item));
               g2.draw(shape);
            }
         }
      }
      if (isItemLabelVisible(series, item)) {
         double xx = transX0;
         double yy = transY0;
         if (orientation == PlotOrientation.HORIZONTAL) {
            xx = transY0;
            yy = transX0;
         }
         drawItemLabel(g2, orientation, dataset, series, item, xx, yy, y0 < 0.0D);
      }
      int domainAxisIndex = plot.getDomainAxisIndex(domainAxis);
      int rangeAxisIndex = plot.getRangeAxisIndex(rangeAxis);
      updateCrosshairValues(crosshairState, x0, y0, domainAxisIndex, rangeAxisIndex, transX0, transY0, orientation);
      if (state.getInfo() != null) {
         EntityCollection entities = state.getEntityCollection();
         if (entities != null) {
            int r = getDefaultEntityRadius();
            java.awt.Shape shape = orientation != PlotOrientation.VERTICAL ? ((java.awt.Shape) (new java.awt.geom.Rectangle2D.Double(transY0 - (double)r, transX0 - (double)r, 2 * r, 2 * r))) : ((java.awt.Shape) (new java.awt.geom.Rectangle2D.Double(transX0 - (double)r, transY0 - (double)r, 2 * r, 2 * r)));
            if (shape != null) {
               String tip = null;
               XYToolTipGenerator generator = getToolTipGenerator(series, item);
               if (generator != null)
                  tip = generator.generateToolTip(dataset, series, item);
               String url = null;
               if (getURLGenerator() != null)
                  url = getURLGenerator().generateURL(dataset, series, item);
               XYItemEntity entity = new XYItemEntity(shape, dataset, series, item, tip, url);
               entities.add(entity);
            }
         }
      }
   }

   /**
    * Returns a clone of the renderer.
    *
    * @return A clone.
    *
    * @throws CloneNotSupportedException if the clone cannot be created.
    */
   public Object clone() throws CloneNotSupportedException
   {
      return super.clone();
   }
}
TOP

Related Classes of umontreal.iro.lecuyer.charts.EmpiricalRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.