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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wafermapplot.java

?? jfreechart1.0.1 jsp繪制圖表的開發包
?? JAVA
字號:
/* ===========================================================
 * 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));
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久激情视频| 亚洲永久精品大片| 国产精品久久久久久亚洲伦 | **欧美大码日韩| 国产欧美日韩卡一| 欧美精品在线一区二区| 欧美日韩国产美| 成人av电影在线| 成人午夜免费视频| 青草av.久久免费一区| 午夜成人免费电影| 日本最新不卡在线| 久久综合综合久久综合| 国精产品一区一区三区mba桃花| 亚洲日本在线a| 久久夜色精品国产噜噜av| 久久综合av免费| 国产精品久久二区二区| 亚洲乱码一区二区三区在线观看| 精品国产乱码久久久久久久 | 久久蜜臀中文字幕| 欧美激情中文不卡| 亚洲免费毛片网站| 日本一区二区免费在线观看视频| 日韩一区二区视频| 欧美日韩免费一区二区三区视频 | 在线综合亚洲欧美在线视频| 欧美美女直播网站| 精品少妇一区二区三区| 国产精品美女久久久久久久| 亚洲免费观看视频| 免费成人深夜小野草| 国产一区二区福利视频| 美女一区二区久久| 成人美女视频在线观看18| 91蜜桃视频在线| 91精品国产全国免费观看| 欧美中文字幕一区二区三区| 777午夜精品免费视频| 日韩中文欧美在线| 国产综合久久久久久久久久久久 | 欧美精品一二三四| 久久亚洲影视婷婷| 亚洲免费在线播放| 精品一区二区综合| 色综合久久久久综合体桃花网| 成人少妇影院yyyy| 欧美理论在线播放| 大白屁股一区二区视频| 久草在线在线精品观看| 99久久er热在这里只有精品66| 成人精品国产一区二区4080| 欧美色老头old∨ideo| 国产夜色精品一区二区av| 亚洲乱码国产乱码精品精的特点 | 日韩免费高清视频| 日韩欧美一级片| 亚洲欧美国产高清| 黄页视频在线91| 欧美在线免费视屏| 日本一区二区三区在线观看| 视频一区中文字幕| 91女神在线视频| 国产亚洲一二三区| 免费三级欧美电影| 色视频一区二区| 在线播放国产精品二区一二区四区| 制服丝袜亚洲播放| 亚洲女厕所小便bbb| 国产专区欧美精品| 99久久精品免费观看| 精品国产一区二区三区四区四| 久久久久久久久99精品| 视频一区免费在线观看| 91色porny蝌蚪| 国产精品日韩精品欧美在线| 捆绑变态av一区二区三区| 东方aⅴ免费观看久久av| 日韩欧美中文一区二区| 亚洲一本大道在线| av一区二区三区四区| 久久久国产午夜精品| 蜜臀va亚洲va欧美va天堂| 欧美日韩免费高清一区色橹橹 | eeuss鲁一区二区三区| 色综合天天天天做夜夜夜夜做| 欧美人狂配大交3d怪物一区| **欧美大码日韩| 成人aa视频在线观看| 久久免费视频色| 久久精品99国产精品| 在线不卡的av| 日日噜噜夜夜狠狠视频欧美人| 国产自产2019最新不卡| 精品国产91乱码一区二区三区| 国产精品国产三级国产有无不卡| 亚洲国产精品欧美一二99| 91蜜桃网址入口| 日韩和欧美一区二区三区| 91黄色免费版| 一区二区三区四区高清精品免费观看 | 欧美va亚洲va国产综合| 免费成人av在线播放| 91精品国产综合久久香蕉的特点| 中文乱码免费一区二区| 国产二区国产一区在线观看| 国产亚洲欧美日韩俺去了| 亚洲国产一二三| 欧美私人免费视频| 中文文精品字幕一区二区| 国产91精品精华液一区二区三区| 777色狠狠一区二区三区| 日韩激情在线观看| 精品国产伦一区二区三区观看体验| 亚洲青青青在线视频| 91国内精品野花午夜精品| 亚洲一区二区三区不卡国产欧美| 国产**成人网毛片九色 | 91久久线看在观草草青青| 2023国产精品| 亚洲大片精品永久免费| av一区二区三区在线| 久久久美女艺术照精彩视频福利播放| 亚洲午夜免费电影| 99精品国产视频| 狠狠色丁香久久婷婷综合丁香| 欧美影院一区二区| 日本午夜一本久久久综合| 日韩一区二区在线观看视频| 国产精品一区二区男女羞羞无遮挡 | 国产呦萝稀缺另类资源| 国产精品精品国产色婷婷| 欧美怡红院视频| 久久99精品国产麻豆不卡| 制服丝袜亚洲色图| 国产高清不卡一区二区| 精品久久久久一区| av中文字幕不卡| 国产精品国产a| 精品视频一区 二区 三区| 麻豆国产91在线播放| 中文字幕一区二区三区不卡| 欧美日韩午夜在线| 国产成人亚洲综合a∨猫咪| 亚洲人午夜精品天堂一二香蕉| 国产不卡视频一区| 亚洲小说春色综合另类电影| 精品福利一二区| 国产真实乱对白精彩久久| 亚洲欧美日韩久久| 欧美r级在线观看| 91色视频在线| 一区二区三区在线观看网站| 色播五月激情综合网| 亚洲欧美日韩国产综合在线| 97久久久精品综合88久久| 日韩制服丝袜av| 国产精品国产三级国产aⅴ无密码| fc2成人免费人成在线观看播放| 国产精品免费aⅴ片在线观看| 粉嫩av亚洲一区二区图片| 亚洲狠狠爱一区二区三区| 国产性做久久久久久| 91精品在线观看入口| 91影院在线免费观看| 国产自产v一区二区三区c| 午夜精品一区二区三区三上悠亚 | 亚洲第一在线综合网站| 欧美精品自拍偷拍| 91在线免费视频观看| 国模一区二区三区白浆| 国产亚洲美州欧州综合国| 懂色一区二区三区免费观看| 日韩国产在线观看| 最新日韩av在线| 国产午夜亚洲精品不卡| 91精品国产综合久久久久久漫画| 久久精品国内一区二区三区| 亚洲一区二区三区中文字幕在线| 69堂成人精品免费视频| 色综合天天综合给合国产| 国产成人一级电影| 国内精品视频一区二区三区八戒| 国产日韩影视精品| 日本91福利区| 午夜精品爽啪视频| 亚洲综合免费观看高清在线观看| 日韩视频一区二区在线观看| 欧美在线观看视频在线| 91污在线观看| 波多野结衣在线一区| 国产乱淫av一区二区三区| 六月丁香婷婷色狠狠久久| 日韩电影在线观看网站| 国产精品沙发午睡系列990531| 在线观看日韩国产| 色噜噜夜夜夜综合网| 一本色道久久加勒比精品| 不卡高清视频专区| 99riav久久精品riav|