亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wafermapplot.java

?? 制作圖表的好工具
?? JAVA
字號(hào):
/* ===========================================================
 * JFreeChart : a free chart library for the Java(tm) platform
 * ===========================================================
 *
 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
 *
 * Project Info:  http://www.jfree.org/jfreechart/index.html
 *
 * This library is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as published by 
 * the Free Software Foundation; either version 2.1 of the License, or 
 * (at your option) any later version.
 *
 * This library 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 Lesser General Public 
 * License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
 * USA.  
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
 * in the United States and other countries.]
 *
 * -----------------
 * WaferMapPlot.java
 * -----------------
 *
 * (C) Copyright 2003, 2004, by Robert Redburn and Contributors.
 *
 * Original Author:  Robert Redburn;
 * Contributor(s):   David Gilbert (for Object Refinery Limited);
 *
 * Changes
 * -------
 * 25-Nov-2003 : Version 1 contributed by Robert Redburn (DG);
 * 05-May-2005 : Updated draw() method parameters (DG);
 * 10-Jun-2005 : Changed private --> protected for drawChipGrid(), 
 *               drawWaferEdge() and getWafterEdge() (DG);
 * 16-Jun-2005 : Added default constructor and setDataset() method (DG);
 *
 */
 
package org.jfree.chart.plot;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.Serializable;
import java.util.ResourceBundle;

import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.event.PlotChangeEvent;
import org.jfree.chart.event.RendererChangeEvent;
import org.jfree.chart.event.RendererChangeListener;
import org.jfree.chart.renderer.WaferMapRenderer;
import org.jfree.data.general.DatasetChangeEvent;
import org.jfree.data.general.WaferMapDataset;
import org.jfree.ui.RectangleInsets;

/**
 * A wafer map plot.
 */
public class WaferMapPlot extends Plot implements RendererChangeListener,
                                                  Cloneable,
                                                  Serializable {

    /** For serialization. */
    private static final long serialVersionUID = 4668320403707308155L;
    
    /** The default grid line stroke. */
    public static final Stroke DEFAULT_GRIDLINE_STROKE = new BasicStroke(0.5f,
        BasicStroke.CAP_BUTT,
        BasicStroke.JOIN_BEVEL,
        0.0f,
        new float[] {2.0f, 2.0f},
        0.0f);

    /** The default grid line paint. */
    public static final Paint DEFAULT_GRIDLINE_PAINT = Color.lightGray;

    /** The default crosshair visibility. */
    public static final boolean DEFAULT_CROSSHAIR_VISIBLE = false;

    /** The default crosshair stroke. */
    public static final Stroke DEFAULT_CROSSHAIR_STROKE 
        = DEFAULT_GRIDLINE_STROKE;

    /** The default crosshair paint. */
    public static final Paint DEFAULT_CROSSHAIR_PAINT = Color.blue;

    /** The resourceBundle for the localization. */
    protected static ResourceBundle localizationResources = 
        ResourceBundle.getBundle("org.jfree.chart.plot.LocalizationBundle");

    /** The plot orientation. 
     *  vertical = notch down
     *  horizontal = notch right
     */
    private PlotOrientation orientation;

    /** The dataset. */
    private WaferMapDataset dataset;

    /** 
     * Object responsible for drawing the visual representation of each point 
     * on the plot. 
     */
    private WaferMapRenderer renderer;

    /**
     * Creates a new plot with no dataset.
     */
    public WaferMapPlot() {
        this(null);   
    }
    
    /**
     * Creates a new plot.
     * 
     * @param dataset  the dataset (<code>null</code> permitted).
     */
    public WaferMapPlot(WaferMapDataset dataset) {
        this(dataset, null);
    }

    /**
     * Creates a new plot.
     *
     * @param dataset  the dataset (<code>null</code> permitted).
     * @param renderer  the renderer (<code>null</code> permitted).
     */
    public WaferMapPlot(WaferMapDataset dataset, WaferMapRenderer renderer) {

        super();

        this.orientation = PlotOrientation.VERTICAL;
        
        this.dataset = dataset;
        if (dataset != null) {
            dataset.addChangeListener(this);
        }

        this.renderer = renderer;
        if (renderer != null) {
            renderer.setPlot(this);
            renderer.addChangeListener(this);
        }

    }

    /**
     * Returns the plot type as a string.
     *
     * @return A short string describing the type of plot.
     */
    public String getPlotType() {
        return ("WMAP_Plot");
    }

    /**
     * Returns the dataset
     * 
     * @return The dataset (possibly <code>null</code>).
     */
    public WaferMapDataset getDataset() {
        return this.dataset;
    }

    /**
     * Sets the dataset used by the plot and sends a {@link PlotChangeEvent}
     * to all registered listeners.
     * 
     * @param dataset  the dataset (<code>null</code> permitted).
     */
    public void setDataset(WaferMapDataset dataset) {
        // if there is an existing dataset, remove the plot from the list of 
        // change listeners...
        if (this.dataset != null) {
            this.dataset.removeChangeListener(this);
        }

        // set the new dataset, and register the chart as a change listener...
        this.dataset = dataset;
        if (dataset != null) {
            setDatasetGroup(dataset.getGroup());
            dataset.addChangeListener(this);
        }

        // send a dataset change event to self to trigger plot change event
        datasetChanged(new DatasetChangeEvent(this, dataset));
    }
    
    /**
     * Sets the item renderer, and notifies all listeners of a change to the 
     * plot.  If the renderer is set to <code>null</code>, no chart will be 
     * drawn.
     *
     * @param renderer  the new renderer (<code>null</code> permitted).
     */
    public void setRenderer(WaferMapRenderer renderer) {

        if (this.renderer != null) {
            this.renderer.removeChangeListener(this);
        }

        this.renderer = renderer;
        if (renderer != null) {
            renderer.setPlot(this);
        }

        notifyListeners(new PlotChangeEvent(this));

    }
    
    /**
     * Draws the wafermap view.
     * 
     * @param g2  the graphics device.
     * @param area  the plot area.
     * @param anchor  the anchor point (<code>null</code> permitted).
     * @param state  the plot state.
     * @param info  the plot rendering info.
     */
    public void draw(Graphics2D g2, Rectangle2D area, Point2D anchor,
                     PlotState state, 
                     PlotRenderingInfo info) {

        // if the plot area is too small, just return...
        boolean b1 = (area.getWidth() <= MINIMUM_WIDTH_TO_DRAW);
        boolean b2 = (area.getHeight() <= MINIMUM_HEIGHT_TO_DRAW);
        if (b1 || b2) {
            return;
        }

        // record the plot area...
        if (info != null) {
            info.setPlotArea(area);
        }

        // adjust the drawing area for the plot insets (if any)...
        RectangleInsets insets = getInsets();
        insets.trim(area);

        drawChipGrid(g2, area);       
        drawWaferEdge(g2, area);
        
    }

    /**
     * Calculates and draws the chip locations on the wafer.
     * 
     * @param g2  the graphics device.
     * @param plotArea  the plot area.
     */
    protected void drawChipGrid(Graphics2D g2, Rectangle2D plotArea) {
        
        Shape savedClip = g2.getClip();
        g2.setClip(getWaferEdge(plotArea));
        Rectangle2D chip = new Rectangle2D.Double();
        int xchips = 35;
        int ychips = 20;
        double space = 1d;
        if (this.dataset != null) {
            xchips = this.dataset.getMaxChipX() + 2;
            ychips = this.dataset.getMaxChipY() + 2;
            space = this.dataset.getChipSpace();
        }
        double startX = plotArea.getX();
        double startY = plotArea.getY();
        double chipWidth = 1d;
        double chipHeight = 1d;
        if (plotArea.getWidth() != plotArea.getHeight()) {
            double major = 0d;
            double minor = 0d;
            if (plotArea.getWidth() > plotArea.getHeight()) {
                major = plotArea.getWidth();
                minor = plotArea.getHeight();
            } 
            else {
                major = plotArea.getHeight();
                minor = plotArea.getWidth();
            } 
            //set upperLeft point
            if (plotArea.getWidth() == minor) { // x is minor
                startY += (major - minor) / 2;
                chipWidth = (plotArea.getWidth() - (space * xchips - 1)) 
                    / xchips;
                chipHeight = (plotArea.getWidth() - (space * ychips - 1)) 
                    / ychips;
            }
            else { // y is minor
                startX += (major - minor) / 2;
                chipWidth = (plotArea.getHeight() - (space * xchips - 1)) 
                    / xchips;
                chipHeight = (plotArea.getHeight() - (space * ychips - 1)) 
                    / ychips;
            }
        }
        
        for (int x = 1; x <= xchips; x++) {
            double upperLeftX = (startX - chipWidth) + (chipWidth * x) 
                + (space * (x - 1));
            for (int y = 1; y <= ychips; y++) {
                double upperLeftY = (startY - chipHeight) + (chipHeight * y) 
                    + (space * (y - 1));
                chip.setFrame(upperLeftX, upperLeftY, chipWidth, chipHeight);
                g2.setColor(Color.white);
                if (this.dataset.getChipValue(x - 1, ychips - y - 1) != null) {
                    g2.setPaint(
                        this.renderer.getChipColor(
                            this.dataset.getChipValue(x - 1, ychips - y - 1)
                        )
                    );
                } 
                g2.fill(chip);
                g2.setColor(Color.lightGray);
                g2.draw(chip);
            }
        }
        g2.setClip(savedClip);
    }

    /**
     * Calculates the location of the waferedge.
     * 
     * @param plotArea  the plot area.
     * 
     * @return The wafer edge.
     */
    protected Ellipse2D getWaferEdge(Rectangle2D plotArea) {
        Ellipse2D edge = new Ellipse2D.Double();
        double diameter = plotArea.getWidth();
        double upperLeftX = plotArea.getX();
        double upperLeftY = plotArea.getY();
        //get major dimension
        if (plotArea.getWidth() != plotArea.getHeight()) {
            double major = 0d;
            double minor = 0d;
            if (plotArea.getWidth() > plotArea.getHeight()) {
                major = plotArea.getWidth();
                minor = plotArea.getHeight();
            } 
            else {
                major = plotArea.getHeight();
                minor = plotArea.getWidth();
            } 
            //ellipse diameter is the minor dimension
            diameter = minor;
            //set upperLeft point
            if (plotArea.getWidth() == minor) { // x is minor
                upperLeftY = plotArea.getY() + (major - minor) / 2;
            }
            else { // y is minor
                upperLeftX = plotArea.getX() + (major - minor) / 2;
            }
        }
        edge.setFrame(upperLeftX, upperLeftY, diameter, diameter); 
        return edge;        
    }

    /**
     * Draws the waferedge, including the notch.
     * 
     * @param g2  the graphics device.
     * @param plotArea  the plot area.
     */
    protected void drawWaferEdge(Graphics2D g2, Rectangle2D plotArea) {
        // draw the wafer
        Ellipse2D waferEdge = getWaferEdge(plotArea);
        g2.setColor(Color.black);
        g2.draw(waferEdge);
        // calculate and draw the notch
        // horizontal orientation is considered notch right
        // vertical orientation is considered notch down
        Arc2D notch = null;
        Rectangle2D waferFrame = waferEdge.getFrame();
        double notchDiameter = waferFrame.getWidth() * 0.04;
        if (this.orientation == PlotOrientation.HORIZONTAL) {
            Rectangle2D notchFrame = 
                new Rectangle2D.Double(
                    waferFrame.getX() + waferFrame.getWidth() 
                    - (notchDiameter / 2), waferFrame.getY()
                    + (waferFrame.getHeight() / 2) - (notchDiameter / 2),
                    notchDiameter, notchDiameter
                );
            notch = new Arc2D.Double(notchFrame, 90d, 180d, Arc2D.OPEN);
        }
        else {
            Rectangle2D notchFrame = 
                new Rectangle2D.Double(
                    waferFrame.getX() + (waferFrame.getWidth() / 2) 
                    - (notchDiameter / 2), waferFrame.getY() 
                    + waferFrame.getHeight() - (notchDiameter / 2),
                    notchDiameter, notchDiameter
                );
            notch = new Arc2D.Double(notchFrame, 0d, 180d, Arc2D.OPEN);        
        }
        g2.setColor(Color.white);
        g2.fill(notch);
        g2.setColor(Color.black);
        g2.draw(notch);
        
    }

    /**
     * Return the legend items from the renderer.
     * 
     * @return The legend items.
     */
    public LegendItemCollection getLegendItems() {
        return this.renderer.getLegendCollection();
    }

    /**
     * Notifies all registered listeners of a renderer change.
     *
     * @param event  the event.
     */
    public void rendererChanged(RendererChangeEvent event) {
        notifyListeners(new PlotChangeEvent(this));
    }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉视频黄| 国产亚洲欧美一级| 一本大道久久a久久综合| 免费成人美女在线观看.| 亚洲综合精品自拍| 国产精品精品国产色婷婷| 精品视频在线视频| 欧美羞羞免费网站| 色综合久久天天| caoporen国产精品视频| 国产成人午夜高潮毛片| 国产精品996| 国产乱色国产精品免费视频| 久久精品国产99| 日韩—二三区免费观看av| 亚洲色图色小说| 精品日韩成人av| 欧美xxxxx牲另类人与| 日韩三级免费观看| 日韩一二三四区| 日韩精品中文字幕在线一区| 日韩免费高清电影| 日韩一区二区在线观看| 欧美一区二区视频观看视频 | 久色婷婷小香蕉久久| 同产精品九九九| 丝袜美腿亚洲一区| 日韩国产欧美三级| 日本少妇一区二区| 精品综合久久久久久8888| 国产一区在线精品| 国产91丝袜在线18| 91在线视频18| 色八戒一区二区三区| 欧美日韩高清不卡| 一本大道av一区二区在线播放| 色综合久久88色综合天天| 97久久超碰国产精品| 欧美最猛黑人xxxxx猛交| 欧美日韩国产一区| 日韩免费视频一区| 国产亚洲精品bt天堂精选| 国产精品美女一区二区在线观看| 综合久久久久久久| 亚洲福利电影网| 国产一区三区三区| 国产成人综合在线| 色悠悠亚洲一区二区| 5858s免费视频成人| 久久久国产综合精品女国产盗摄| 中文字幕中文字幕中文字幕亚洲无线| 国产精品网站在线观看| 亚洲精品高清在线| 美女精品自拍一二三四| 成人sese在线| 337p亚洲精品色噜噜| 欧美精品一区二区三区久久久| 欧美激情在线观看视频免费| 亚洲一区二区精品3399| 免费高清不卡av| 久久国产夜色精品鲁鲁99| 国产iv一区二区三区| 91在线视频18| 欧美色倩网站大全免费| 2欧美一区二区三区在线观看视频| 国产精品毛片a∨一区二区三区| 亚洲国产中文字幕在线视频综合| 韩国视频一区二区| 色999日韩国产欧美一区二区| 日韩精品一区在线| 亚洲精品乱码久久久久| 精品亚洲aⅴ乱码一区二区三区| 国产成人综合在线播放| 欧美怡红院视频| 中国av一区二区三区| 日日骚欧美日韩| 国产精品一品二品| 欧美精品在线观看播放| 精品福利二区三区| 亚洲已满18点击进入久久| 国产一区高清在线| 欧美日本视频在线| 国产精品久久久久久户外露出| 日韩电影一区二区三区四区| 色综合久久精品| 日本一区二区三区在线观看| 日韩电影在线免费看| 成人av网站大全| 欧美一级艳片视频免费观看| 亚洲精品成人天堂一二三| 国产精品一区二区三区网站| 欧美一区二区三区在线电影| 亚洲精品视频免费观看| 国产精品一区二区不卡| 日韩视频免费观看高清完整版在线观看 | 亚洲综合在线观看视频| 国产精品77777竹菊影视小说| 欧美无砖专区一中文字| 亚洲欧洲日韩一区二区三区| 国产麻豆成人精品| 91精品国产欧美一区二区成人 | 欧美xxxxxxxx| 五月天丁香久久| 在线免费av一区| 亚洲男人都懂的| 99九九99九九九视频精品| 国产亚洲美州欧州综合国| 蜜臀91精品一区二区三区| 欧美福利一区二区| 亚洲成a天堂v人片| 欧美日韩国产小视频在线观看| 中文字幕在线观看不卡视频| 成人免费三级在线| 日韩欧美色综合网站| 日韩综合小视频| 91精品欧美一区二区三区综合在| 婷婷亚洲久悠悠色悠在线播放 | 欧美v日韩v国产v| 日韩高清一区二区| 这里是久久伊人| 日本最新不卡在线| 欧美大黄免费观看| 美女脱光内衣内裤视频久久影院| 欧美一区日韩一区| 日本亚洲三级在线| 精品国产乱码久久久久久1区2区 | 欧美大片国产精品| 国内精品不卡在线| 精品久久一二三区| 国产精品亚洲第一| 国产精品情趣视频| 91日韩精品一区| 亚洲永久免费av| 欧美猛男男办公室激情| 日韩av网站在线观看| 亚洲精品在线三区| 成人免费电影视频| 亚洲专区一二三| 91精品啪在线观看国产60岁| 久久99精品国产.久久久久 | 亚洲高清在线精品| 欧美精品99久久久**| 看电视剧不卡顿的网站| 国产日韩v精品一区二区| 国产成人福利片| 亚洲高清免费观看高清完整版在线观看 | 一本久道久久综合中文字幕| 日本三级亚洲精品| 亚洲国产岛国毛片在线| 欧美巨大另类极品videosbest | 国产成人午夜精品5599 | 国产成人h网站| 午夜久久久久久久久久一区二区| 国产性天天综合网| 欧美无乱码久久久免费午夜一区| 国产成人午夜电影网| 天堂av在线一区| 亚洲欧洲三级电影| 久久只精品国产| 欧美三级电影精品| 国产福利精品一区| 男女男精品视频| 亚洲欧美成人一区二区三区| 欧美成人一级视频| 欧美日韩一区三区| 99精品一区二区| 国产精品一区二区久久精品爱涩| 亚洲h动漫在线| 亚洲免费在线视频一区 二区| 精品第一国产综合精品aⅴ| 欧美吞精做爰啪啪高潮| a4yy欧美一区二区三区| 久久国产精品99精品国产 | 韩国成人在线视频| 一区二区三区免费| 中文字幕的久久| 欧美精品一区二区三区蜜桃视频 | 亚洲欧美日韩精品久久久久| 久久精品一区蜜桃臀影院| 7777精品伊人久久久大香线蕉完整版| a在线播放不卡| 国产a久久麻豆| 久久99日本精品| 蜜臀久久99精品久久久久宅男 | 日本精品免费观看高清观看| 国产传媒一区在线| 极品少妇xxxx精品少妇| 免费观看91视频大全| 日韩专区中文字幕一区二区| 亚洲二区在线观看| 艳妇臀荡乳欲伦亚洲一区| 亚洲精品乱码久久久久久黑人| 中文字幕一区二区三区色视频| 国产精品午夜久久| 国产精品全国免费观看高清| 国产欧美精品日韩区二区麻豆天美| 欧美tickle裸体挠脚心vk| 在线不卡一区二区| 欧美精选一区二区| 欧美一区二区三区视频免费播放 |