    001    /* ===========================================================
    002     * JFreeChart : a free chart library for the Java(tm) platform
    003     * ===========================================================
    004     *
    005     * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
    006     *
    007     * Project Info:  http://www.jfree.org/jfreechart/index.html
    008     *
    009     * This library is free software; you can redistribute it and/or modify it
    010     * under the terms of the GNU Lesser General Public License as published by
    011     * the Free Software Foundation; either version 2.1 of the License, or
    012     * (at your option) any later version.
    013     *
    014     * This library is distributed in the hope that it will be useful, but
    015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017     * License for more details.
    018     *
    019     * You should have received a copy of the GNU Lesser General Public
    020     * License along with this library; if not, write to the Free Software
    021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022     * USA.
    023     *
    024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
    025     * in the United States and other countries.]
    026     *
    027     * ------------------
    028     * XYDotRenderer.java
    029     * ------------------
    030     * (C) Copyright 2002-2005, by Object Refinery Limited.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   Christian W. Zuckschwerdt;
    034    ;
    035     *
    036     * $Id: XYDotRenderer.java,v 1.5.2.1 2005/10/25 20:56:21 mungady Exp $
    037     *
    038     * Changes (from 29-Oct-2002)
    039     * --------------------------
    040     * 29-Oct-2002 : Added standard header (DG);
    041     * 25-Mar-2003 : Implemented Serializable (DG);
    042     * 01-May-2003 : Modified drawItem() method signature (DG);
    043     * 30-Jul-2003 : Modified entity constructor (CZ);
    044     * 20-Aug-2003 : Implemented Cloneable and PublicCloneable (DG);
    045     * 16-Sep-2003 : Changed ChartRenderingInfo --> PlotRenderingInfo (DG);
    046     * 25-Feb-2004 : Replaced CrosshairInfo with CrosshairState (DG);
    047     * 19-Jan-2005 : Now uses only primitives from dataset (DG);
    048     *
    049     */
    050
    051    package org.jfree.chart.renderer.xy;
    052
    053    import java.awt.Graphics2D;
    054    import java.awt.geom.Rectangle2D;
    055    import java.io.Serializable;
    056
    057    import org.jfree.chart.axis.ValueAxis;
    058    import org.jfree.chart.plot.CrosshairState;
    059    import org.jfree.chart.plot.PlotOrientation;
    060    import org.jfree.chart.plot.PlotRenderingInfo;
    061    import org.jfree.chart.plot.XYPlot;
    062    import org.jfree.data.xy.XYDataset;
    063    import org.jfree.ui.RectangleEdge;
    064    import org.jfree.util.PublicCloneable;
    065
    066    /**
    067     * A renderer that draws a small dot at each data point for an {@link XYPlot}.
    068     */
    069    public class XYDotRenderer extends AbstractXYItemRenderer
    070                               implements XYItemRenderer,
    071                                          Cloneable,
    072                                          PublicCloneable,
    073                                          Serializable {
    074
    075        /** For serialization. */
    076        private static final long serialVersionUID = -2764344339073566425L;
    077
    078        /**
    079         * Constructs a new renderer.
    080         */
    081        public XYDotRenderer() {
    082            super();
    083        }
    084
    085        /**
    086         * Draws the visual representation of a single data item.
    087         *
    088         * @param g2  the graphics device.
    089         * @param state  the renderer state.
    090         * @param dataArea  the area within which the data is being drawn.
    091         * @param info  collects information about the drawing.
    092         * @param plot  the plot (can be used to obtain standard color
    093         *              information etc).
    094         * @param domainAxis  the domain (horizontal) axis.
    095         * @param rangeAxis  the range (vertical) axis.
    096         * @param dataset  the dataset.
    097         * @param series  the series index (zero-based).
    098         * @param item  the item index (zero-based).
    099         * @param crosshairState  crosshair information for the plot
    100         *                        (<code>null</code> permitted).
    101         * @param pass  the pass index.
    102         */
    103        public void drawItem(Graphics2D g2,
    104                             XYItemRendererState state,
    105                             Rectangle2D dataArea,
    106                             PlotRenderingInfo info,
    107                             XYPlot plot,
    108                             ValueAxis domainAxis,
    109                             ValueAxis rangeAxis,
    110                             XYDataset dataset,
    111                             int series,
    112                             int item,
    113                             CrosshairState crosshairState,
    114                             int pass) {
    115
    116            // get the data point...
    117            double x = dataset.getXValue(series, item);
    118            double y = dataset.getYValue(series, item);
    119            if (!Double.isNaN(y)) {
    120                RectangleEdge xAxisLocation = plot.getDomainAxisEdge();
    121                RectangleEdge yAxisLocation = plot.getRangeAxisEdge();
    122                double transX = domainAxis.valueToJava2D(
    123                    x, dataArea, xAxisLocation
    124                );
    125                double transY = rangeAxis.valueToJava2D(
    126                    y, dataArea, yAxisLocation
    127                );
    128
    129                g2.setPaint(getItemPaint(series, item));
    130                PlotOrientation orientation = plot.getOrientation();
    131                if (orientation == PlotOrientation.HORIZONTAL) {
    132                    g2.drawRect((int) transY, (int) transX, 1, 1);
    133                }
    134                else if (orientation == PlotOrientation.VERTICAL) {
    135                    g2.drawRect((int) transX, (int) transY, 1, 1);
    136                }
    137
    138                updateCrosshairValues(
    139                    crosshairState, x, y, transX, transY, orientation
    140                );
    141            }
    142
    143        }
    144
    145        /**
    146         * Returns a clone of the renderer.
    147         *
    148         * @return A clone.
    149         *
    150         * @throws CloneNotSupportedException  if the renderer cannot be cloned.
    151         */
    152        public Object clone() throws CloneNotSupportedException {
    153            return super.clone();
    154        }
    155
    156    }