Save This Page
Home » jcommon-1.0.13 » org.jfree » chart » renderer » xy » [javadoc | source]
    1   /* ===========================================================
    2    * JFreeChart : a free chart library for the Java(tm) platform
    3    * ===========================================================
    4    *
    5    * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
    6    *
    7    * Project Info:  http://www.jfree.org/jfreechart/index.html
    8    *
    9    * This library is free software; you can redistribute it and/or modify it 
   10    * under the terms of the GNU Lesser General Public License as published by 
   11    * the Free Software Foundation; either version 2.1 of the License, or 
   12    * (at your option) any later version.
   13    *
   14    * This library is distributed in the hope that it will be useful, but 
   15    * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
   16    * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
   17    * License for more details.
   18    *
   19    * You should have received a copy of the GNU Lesser General Public
   20    * License along with this library; if not, write to the Free Software
   21    * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
   22    * USA.  
   23    *
   24    * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
   25    * in the United States and other countries.]
   26    *
   27    * ---------------------
   28    * WindItemRenderer.java
   29    * ---------------------
   30    * (C) Copyright 2001-2007, by Achilleus Mantzios and Contributors.
   31    *
   32    * Original Author:  Achilleus Mantzios;
   33    * Contributor(s):   David Gilbert (for Object Refinery Limited);
   34    *
   35    * Changes
   36    * -------
   37    * 06-Feb-2002 : Version 1, based on code contributed by Achilleus 
   38    *               Mantzios (DG);
   39    * 28-Mar-2002 : Added a property change listener mechanism so that renderers 
   40    *               no longer need to be immutable.  Changed StrictMath --> Math 
   41    *               to retain JDK1.2 compatibility (DG);
   42    * 09-Apr-2002 : Changed return type of the drawItem method to void, reflecting 
   43    *               the change in the XYItemRenderer method (DG);
   44    * 01-Oct-2002 : Fixed errors reported by Checkstyle (DG);
   45    * 21-Jan-2003 : Added new constructor (DG);
   46    * 25-Mar-2003 : Implemented Serializable (DG);
   47    * 01-May-2003 : Modified drawItem() method signature (DG);
   48    * 20-Aug-2003 : Implemented Cloneable and PublicCloneable (DG);
   49    * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
   50    * 25-Feb-2004 : Replaced CrosshairInfo with CrosshairState (DG);
   51    * 15-Jul-2004 : Switched getX() with getXValue() and getY() with 
   52    *               getYValue() (DG);
   53    * ------------- JFREECHART 1.0.x ---------------------------------------------
   54    * 02-Feb-2007 : Removed author tags from all over JFreeChart sources (DG);
   55    *
   56    */
   57   
   58   package org.jfree.chart.renderer.xy;
   59   
   60   import java.awt.Color;
   61   import java.awt.Font;
   62   import java.awt.Graphics2D;
   63   import java.awt.Paint;
   64   import java.awt.Stroke;
   65   import java.awt.geom.Line2D;
   66   import java.awt.geom.Rectangle2D;
   67   import java.io.Serializable;
   68   
   69   import org.jfree.chart.axis.ValueAxis;
   70   import org.jfree.chart.plot.CrosshairState;
   71   import org.jfree.chart.plot.PlotRenderingInfo;
   72   import org.jfree.chart.plot.XYPlot;
   73   import org.jfree.data.xy.WindDataset;
   74   import org.jfree.data.xy.XYDataset;
   75   import org.jfree.ui.RectangleEdge;
   76   import org.jfree.util.PublicCloneable;
   77   
   78   /**
   79    * A specialised renderer for displaying wind intensity/direction data.
   80    */
   81   public class WindItemRenderer extends AbstractXYItemRenderer 
   82                                 implements XYItemRenderer, 
   83                                            Cloneable,
   84                                            PublicCloneable,
   85                                            Serializable {
   86   
   87       /** For serialization. */
   88       private static final long serialVersionUID = 8078914101916976844L;
   89       
   90       /**
   91        * Creates a new renderer.
   92        */
   93       public WindItemRenderer() {
   94           super();
   95       }
   96   
   97       /**
   98        * Draws the visual representation of a single data item.
   99        *
  100        * @param g2  the graphics device.
  101        * @param state  the renderer state.
  102        * @param plotArea  the area within which the plot is being drawn.
  103        * @param info  optional information collection.
  104        * @param plot  the plot (can be used to obtain standard color 
  105        *              information etc).
  106        * @param domainAxis  the horizontal axis.
  107        * @param rangeAxis  the vertical axis.
  108        * @param dataset  the dataset.
  109        * @param series  the series index (zero-based).
  110        * @param item  the item index (zero-based).
  111        * @param crosshairState  crosshair information for the plot 
  112        *                        (<code>null</code> permitted).
  113        * @param pass  the pass index.
  114        */
  115       public void drawItem(Graphics2D g2,
  116                            XYItemRendererState state,
  117                            Rectangle2D plotArea,
  118                            PlotRenderingInfo info,
  119                            XYPlot plot,
  120                            ValueAxis domainAxis,
  121                            ValueAxis rangeAxis,
  122                            XYDataset dataset,
  123                            int series,
  124                            int item,
  125                            CrosshairState crosshairState,
  126                            int pass) {
  127   
  128           WindDataset windData = (WindDataset) dataset;
  129   
  130           Paint seriesPaint = getItemPaint(series, item);
  131           Stroke seriesStroke = getItemStroke(series, item);
  132           g2.setPaint(seriesPaint);
  133           g2.setStroke(seriesStroke);
  134   
  135           // get the data point...
  136   
  137           Number x = windData.getX(series, item);
  138           Number windDir = windData.getWindDirection(series, item);
  139           Number wforce = windData.getWindForce(series, item);
  140           double windForce = wforce.doubleValue();
  141   
  142           double wdirt = Math.toRadians(windDir.doubleValue() * (-30.0) - 90.0);
  143   
  144           double ax1, ax2, ay1, ay2, rax2, ray2;
  145   
  146           RectangleEdge domainAxisLocation = plot.getDomainAxisEdge();
  147           RectangleEdge rangeAxisLocation = plot.getRangeAxisEdge();
  148           ax1 = domainAxis.valueToJava2D(x.doubleValue(), plotArea, 
  149                   domainAxisLocation);
  150           ay1 = rangeAxis.valueToJava2D(0.0, plotArea, rangeAxisLocation);
  151   
  152           rax2 = x.doubleValue() + (windForce * Math.cos(wdirt) * 8000000.0);
  153           ray2 = windForce * Math.sin(wdirt);
  154   
  155           ax2 = domainAxis.valueToJava2D(rax2, plotArea, domainAxisLocation);
  156           ay2 = rangeAxis.valueToJava2D(ray2, plotArea, rangeAxisLocation);
  157   
  158           int diri = windDir.intValue();
  159           int forcei = wforce.intValue();
  160           String dirforce = diri + "-" + forcei;
  161           Line2D line = new Line2D.Double(ax1, ay1, ax2, ay2);
  162   
  163           g2.draw(line);
  164           g2.setPaint(Color.blue);
  165           g2.setFont(new Font("foo", 1, 9));
  166   
  167           g2.drawString(dirforce, (float) ax1, (float) ay1);
  168   
  169           g2.setPaint(seriesPaint);
  170           g2.setStroke(seriesStroke);
  171   
  172           double alx2, aly2, arx2, ary2;
  173           double ralx2, raly2, rarx2, rary2;
  174   
  175           double aldir = Math.toRadians(windDir.doubleValue() 
  176                   * (-30.0) - 90.0 - 5.0);
  177           ralx2 = wforce.doubleValue() * Math.cos(aldir) * 8000000 * 0.8 
  178           + x.doubleValue();
  179           raly2 = wforce.doubleValue() * Math.sin(aldir) * 0.8;
  180   
  181           alx2 = domainAxis.valueToJava2D(ralx2, plotArea, domainAxisLocation);
  182           aly2 = rangeAxis.valueToJava2D(raly2, plotArea, rangeAxisLocation);
  183   
  184           line = new Line2D.Double(alx2, aly2, ax2, ay2);
  185           g2.draw(line);
  186   
  187           double ardir = Math.toRadians(windDir.doubleValue() 
  188                   * (-30.0) - 90.0 + 5.0);
  189           rarx2 = wforce.doubleValue() * Math.cos(ardir) * 8000000 * 0.8 
  190                   + x.doubleValue();
  191           rary2 = wforce.doubleValue() * Math.sin(ardir) * 0.8;
  192   
  193           arx2 = domainAxis.valueToJava2D(rarx2, plotArea, domainAxisLocation);
  194           ary2 = rangeAxis.valueToJava2D(rary2, plotArea, rangeAxisLocation);
  195   
  196           line = new Line2D.Double(arx2, ary2, ax2, ay2);
  197           g2.draw(line);
  198   
  199       }
  200   
  201       /**
  202        * Returns a clone of the renderer.
  203        * 
  204        * @return A clone.
  205        * 
  206        * @throws CloneNotSupportedException  if the renderer cannot be cloned.
  207        */
  208       public Object clone() throws CloneNotSupportedException {
  209           return super.clone();
  210       }
  211   
  212   }

Save This Page
Home » jcommon-1.0.13 » org.jfree » chart » renderer » xy » [javadoc | source]