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

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

?? contourplot.java

?? 制作圖表的好工具
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:

    }

    /**
     * Sets the range axis for the plot.
     * <P>
     * An exception is thrown if the new axis and the plot are not mutually
     * compatible.
     *
     * @param axis The new axis (null permitted).
     */
    public void setRangeAxis(ValueAxis axis) {

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

        // plot is likely registered as a listener with the existing axis...
        if (this.rangeAxis != null) {
            this.rangeAxis.removeChangeListener(this);
        }

        this.rangeAxis = axis;
        notifyListeners(new PlotChangeEvent(this));

    }

    /**
     * Sets the colorbar for the plot.
     *
     * @param axis The new axis (null permitted).
     */
    public void setColorBarAxis(ColorBar axis) {

        this.colorBar = axis;
        notifyListeners(new PlotChangeEvent(this));

    }

    /**
     * Returns the data area ratio.
     *
     * @return The ratio.
     */
    public double getDataAreaRatio() {
        return this.dataAreaRatio;
    }

    /**
     * Sets the data area ratio.
     *
     * @param ratio  the ratio.
     */
    public void setDataAreaRatio(double ratio) {
        this.dataAreaRatio = ratio;
    }

    /**
     * Adds a marker for the domain axis.
     * <P>
     * Typically a marker will be drawn by the renderer as a line perpendicular
     * to the range axis, however this is entirely up to the renderer.
     *
     * @param marker the marker.
     */
    public void addDomainMarker(Marker marker) {

        if (this.domainMarkers == null) {
            this.domainMarkers = new java.util.ArrayList();
        }
        this.domainMarkers.add(marker);
        notifyListeners(new PlotChangeEvent(this));

    }

    /**
     * Clears all the domain markers.
     */
    public void clearDomainMarkers() {
        if (this.domainMarkers != null) {
            this.domainMarkers.clear();
            notifyListeners(new PlotChangeEvent(this));
        }
    }

    /**
     * Adds a marker for the range axis.
     * <P>
     * Typically a marker will be drawn by the renderer as a line perpendicular
     * to the range axis, however this is entirely up to the renderer.
     *
     * @param marker The marker.
     */
    public void addRangeMarker(Marker marker) {

        if (this.rangeMarkers == null) {
            this.rangeMarkers = new java.util.ArrayList();
        }
        this.rangeMarkers.add(marker);
        notifyListeners(new PlotChangeEvent(this));

    }

    /**
     * Clears all the range markers.
     */
    public void clearRangeMarkers() {
        if (this.rangeMarkers != null) {
            this.rangeMarkers.clear();
            notifyListeners(new PlotChangeEvent(this));
        }
    }

    /**
     * Adds an annotation to the plot.
     *
     * @param annotation  the annotation.
     */
    public void addAnnotation(XYAnnotation annotation) {

        if (this.annotations == null) {
            this.annotations = new java.util.ArrayList();
        }
        this.annotations.add(annotation);
        notifyListeners(new PlotChangeEvent(this));

    }

    /**
     * Clears all the annotations.
     */
    public void clearAnnotations() {
        if (this.annotations != null) {
            this.annotations.clear();
            notifyListeners(new PlotChangeEvent(this));
        }
    }

    /**
     * Checks the compatibility of a domain axis, returning true if the axis is
     * compatible with the plot, and false otherwise.
     *
     * @param axis The proposed axis.
     *
     * @return <code>true</code> if the axis is compatible with the plot.
     */
    public boolean isCompatibleDomainAxis(ValueAxis axis) {

        return true;

    }

    /**
     * Draws the plot on a Java 2D graphics device (such as the screen or a 
     * printer).
     * <P>
     * The optional <code>info</code> argument collects information about the 
     * rendering of the plot (dimensions, tooltip information etc).  Just pass
     * in <code>null</code> if you do not need this information.
     *
     * @param g2  the graphics device.
     * @param area  the area within which the plot (including axis labels)
     *              should be drawn.
     * @param anchor  the anchor point (<code>null</code> permitted).
     * @param parentState  the state from the parent plot, if there is one.
     * @param info  collects chart drawing information (<code>null</code> 
     *              permitted).
     */
    public void draw(Graphics2D g2, Rectangle2D area, Point2D anchor,
                     PlotState parentState,
                     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 plot insets (if any)...
        RectangleInsets insets = getInsets();
        insets.trim(area);

        AxisSpace space = new AxisSpace();
        
        space = this.domainAxis.reserveSpace(
            g2, this, area, RectangleEdge.BOTTOM, space
        );
        space = this.rangeAxis.reserveSpace(
            g2, this, area, RectangleEdge.LEFT, space
        );

        Rectangle2D estimatedDataArea = space.shrink(area, null);
        
        AxisSpace space2 = new AxisSpace();
        space2 = this.colorBar.reserveSpace(
            g2, this, area, estimatedDataArea, this.colorBarLocation, 
            space2
        );
        Rectangle2D adjustedPlotArea = space2.shrink(area, null);
        
        Rectangle2D dataArea = space.shrink(adjustedPlotArea, null);

        Rectangle2D colorBarArea = space2.reserved(
            area, this.colorBarLocation
        );

        // additional dataArea modifications
        if (getDataAreaRatio() != 0.0) { //check whether modification is
            double ratio = getDataAreaRatio();
            Rectangle2D tmpDataArea = (Rectangle2D) dataArea.clone();
            double h = tmpDataArea.getHeight();
            double w = tmpDataArea.getWidth();

            if (ratio > 0) { // ratio represents pixels
                if (w * ratio <= h) {
                    h = ratio * w;
                }
                else {
                    w = h / ratio;
                }
            }
            else {  // ratio represents axis units
                ratio *= -1.0;
                double xLength = getDomainAxis().getRange().getLength();
                double yLength = getRangeAxis().getRange().getLength();
                double unitRatio = yLength / xLength;

                ratio = unitRatio * ratio;

                if (w * ratio <= h) {
                    h = ratio * w;
                }
                else {
                    w = h / ratio;
                }
            }

            dataArea.setRect(
                tmpDataArea.getX() + tmpDataArea.getWidth() / 2 - w / 2,
                tmpDataArea.getY(), w, h
            );
        }

        if (info != null) {
            info.setDataArea(dataArea);
        }

        CrosshairState crosshairState = new CrosshairState();
        crosshairState.setCrosshairDistance(Double.POSITIVE_INFINITY);

        // draw the plot background...
        drawBackground(g2, dataArea);

        double cursor = dataArea.getMaxY();
        if (this.domainAxis != null) {
            this.domainAxis.draw(
                g2, cursor, adjustedPlotArea, dataArea, RectangleEdge.BOTTOM, 
                info
            );
        }

        if (this.rangeAxis != null) {
            cursor = dataArea.getMinX();
            this.rangeAxis.draw(
                g2, cursor, adjustedPlotArea, dataArea, RectangleEdge.LEFT, info
            );
        }

        if (this.colorBar != null) {
            cursor = 0.0;
            cursor = this.colorBar.draw(
                g2, cursor, adjustedPlotArea, dataArea, colorBarArea, 
                this.colorBarLocation
            );
        }
        Shape originalClip = g2.getClip();
        Composite originalComposite = g2.getComposite();

        g2.clip(dataArea);
        g2.setComposite(AlphaComposite.getInstance(
            AlphaComposite.SRC_OVER, getForegroundAlpha())
        );
        render(g2, dataArea, info, crosshairState);

        if (this.domainMarkers != null) {
            Iterator iterator = this.domainMarkers.iterator();
            while (iterator.hasNext()) {
                Marker marker = (Marker) iterator.next();
                drawDomainMarker(g2, this, getDomainAxis(), marker, dataArea);
            }
        }

        if (this.rangeMarkers != null) {
            Iterator iterator = this.rangeMarkers.iterator();
            while (iterator.hasNext()) {
                Marker marker = (Marker) iterator.next();
                drawRangeMarker(g2, this, getRangeAxis(), marker, dataArea);
            }
        }

// TO DO:  these annotations only work with XYPlot, see if it is possible to 
// make ContourPlot a subclass of XYPlot (DG);

//        // draw the annotations...
//        if (this.annotations != null) {
//            Iterator iterator = this.annotations.iterator();
//            while (iterator.hasNext()) {
//                Annotation annotation = (Annotation) iterator.next();
//                if (annotation instanceof XYAnnotation) {
//                    XYAnnotation xya = (XYAnnotation) annotation;
//                    // get the annotation to draw itself...
//                    xya.draw(g2, this, dataArea, getDomainAxis(), 
//                             getRangeAxis());
//                }
//            }
//        }

        g2.setClip(originalClip);
        g2.setComposite(originalComposite);
        drawOutline(g2, dataArea);

    }

    /**
     * Draws a representation of the data within the dataArea region, using the
     * current renderer.
     * <P>
     * The <code>info</code> and <code>crosshairState</code> arguments may be 
     * <code>null</code>.
     *
     * @param g2  the graphics device.
     * @param dataArea  the region in which the data is to be drawn.
     * @param info  an optional object for collection dimension information.
     * @param crosshairState  an optional object for collecting crosshair info.
     */
    public void render(Graphics2D g2, Rectangle2D dataArea,
                       PlotRenderingInfo info, CrosshairState crosshairState) {

        // now get the data and plot it (the visual representation will depend
        // on the renderer that has been set)...
        ContourDataset data = getDataset();
        if (data != null) {

            ColorBar zAxis = getColorBar();

            if (this.clipPath != null) {
                GeneralPath clipper = getClipPath().draw(
                    g2, dataArea, this.domainAxis, this.rangeAxis
                );
                if (this.clipPath.isClip()) {
                    g2.clip(clipper);
                }
            }

            if (this.renderAsPoints) {
                pointRenderer(g2, dataArea, info, this,
                        this.domainAxis, this.rangeAxis, zAxis,
                              data, crosshairState);
            }
            else {
                contourRenderer(g2, dataArea, info, this,
                        this.domainAxis, this.rangeAxis, zAxis,
                                data, crosshairState);
            }

            // draw vertical crosshair if required...
            setDomainCrosshairValue(crosshairState.getCrosshairX(), false);
            if (isDomainCrosshairVisible()) {
                drawVerticalLine(g2, dataArea,
                                 getDomainCrosshairValue(),
                                 getDomainCrosshairStroke(),
                                 getDomainCrosshairPaint());
            }

            // draw horizontal crosshair if required...
            setRangeCrosshairValue(crosshairState.getCrosshairY(), false);
            if (isRangeCrosshairVisible()) {
                drawHorizontalLine(g2, dataArea,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩综合小视频| 精品sm在线观看| 久久99国内精品| 自拍偷拍欧美精品| 日韩欧美一级二级| 欧美在线观看你懂的| 粉嫩久久99精品久久久久久夜| 香港成人在线视频| 亚洲欧美日韩在线播放| 2020国产精品自拍| 91麻豆精品国产91| 91国偷自产一区二区三区成为亚洲经典 | 成人午夜碰碰视频| 麻豆一区二区三| 亚洲午夜久久久| 国产精品亲子乱子伦xxxx裸| 精品国产乱码久久久久久免费| 在线视频亚洲一区| 91丨porny丨中文| 成人v精品蜜桃久久一区| 国产精品538一区二区在线| 日本91福利区| 香蕉久久一区二区不卡无毒影院| 亚洲日本在线天堂| 国产精品久久久久影院老司 | 亚洲精品国产第一综合99久久| 国产日韩精品一区二区三区| 日韩精品中文字幕一区| 日韩欧美中文字幕公布| 777色狠狠一区二区三区| 欧美在线一区二区| 色婷婷久久久久swag精品| www.日韩在线| 国产精品123| 日本欧美一区二区三区乱码| 日韩vs国产vs欧美| 亚洲一区二区欧美激情| 亚洲精品伦理在线| 国产精品乱码一区二三区小蝌蚪| 国产三级欧美三级日产三级99| 欧美一区二区三区不卡| 日韩午夜在线观看视频| 欧美在线制服丝袜| 欧美精品丝袜久久久中文字幕| 一本到不卡免费一区二区| 91麻豆精东视频| 成人成人成人在线视频| 狠狠色综合色综合网络| 久久99久久久久久久久久久| 一区二区三区精品视频| 亚洲国产一区二区三区青草影视| 亚洲精品美腿丝袜| 丝袜亚洲精品中文字幕一区| 亚洲成人一区在线| 日韩精品91亚洲二区在线观看| 丝袜脚交一区二区| 久久www免费人成看片高清| 免费在线看成人av| 国产91精品一区二区| 国产不卡免费视频| 色综合久久中文字幕综合网| 一本色道久久综合亚洲aⅴ蜜桃| 在线观看免费成人| 欧美日韩aaa| 精品国产亚洲在线| 国产色综合一区| 亚洲一区二区三区四区的| 亚洲一区在线观看视频| 久久久久久一级片| 综合亚洲深深色噜噜狠狠网站| 中文字幕一区在线观看| 亚洲精品va在线观看| 蜜桃视频第一区免费观看| 国模一区二区三区白浆| 色综合久久99| 欧美一区日韩一区| 欧美经典一区二区三区| 亚洲免费av在线| 免费在线观看一区| 床上的激情91.| 日韩在线播放一区二区| 国产精品88888| 成人av电影在线网| 欧美一区二区三区色| 91精品国产欧美一区二区成人| 中文字幕va一区二区三区| 一区二区三区在线免费播放| 美女爽到高潮91| 成人性生交大片免费| 91精品国产综合久久福利软件| 亚洲精品在线网站| 中文字幕一区二区三区四区不卡 | 亚洲一区二区黄色| 久久99精品国产.久久久久久| 色94色欧美sute亚洲13| 7777精品伊人久久久大香线蕉最新版| 国产精品久久久久久久午夜片| 亚洲一区二区三区中文字幕在线| 国产一区二区视频在线| 91蝌蚪porny成人天涯| 精品va天堂亚洲国产| 亚洲一区二区三区在线| 成人免费视频一区| 777奇米四色成人影色区| 亚洲免费色视频| 久久se精品一区精品二区| 在线观看国产精品网站| 久久久精品国产免大香伊| 免费精品视频最新在线| 一本色道久久综合精品竹菊| 欧美经典一区二区| 日本美女一区二区三区视频| 在线精品视频小说1| 国产欧美日韩在线| 精品一区精品二区高清| 欧洲一区在线观看| √…a在线天堂一区| 老汉av免费一区二区三区| 欧美日韩色综合| 亚洲欧洲www| 懂色av一区二区三区蜜臀| 欧美精品日韩精品| 亚洲成人免费影院| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日韩高清不卡一区二区| 99久久精品免费| 国产精品水嫩水嫩| 国产精品一区一区三区| 26uuu另类欧美亚洲曰本| 日韩中文字幕一区二区三区| 欧美午夜一区二区三区免费大片| 国产精品女同一区二区三区| 国产宾馆实践打屁股91| 2023国产一二三区日本精品2022| 另类中文字幕网| 777色狠狠一区二区三区| 青草av.久久免费一区| 欧美日韩另类国产亚洲欧美一级| 亚洲综合免费观看高清在线观看| 不卡欧美aaaaa| 亚洲色图色小说| 99久久国产免费看| 亚洲码国产岛国毛片在线| 成人免费av在线| 亚洲人快播电影网| 成人av在线资源| 一区二区三区四区中文字幕| 国产成人av福利| 中文成人av在线| 色综合久久久网| 亚洲综合区在线| 91精品免费观看| 美女精品自拍一二三四| 欧美不卡123| 国产一区二区在线免费观看| 国产精品久久久久影院亚瑟 | 日韩精品国产精品| 精品国产乱码久久久久久闺蜜| 毛片av一区二区三区| 国产喷白浆一区二区三区| 国产成人综合亚洲网站| 国产精品国产三级国产aⅴ中文| 成人午夜视频在线| 亚洲一区二区精品久久av| 欧美老人xxxx18| 高清不卡在线观看av| 欧美成人a∨高清免费观看| 成人丝袜高跟foot| 亚洲一区二区三区中文字幕| 3atv一区二区三区| 国产不卡在线播放| 亚洲精品国产a| 在线不卡免费欧美| 日本不卡一二三区黄网| 日韩三级伦理片妻子的秘密按摩| 国产一区二区三区av电影| 中文字幕不卡一区| 成人精品gif动图一区| 亚洲精品视频一区二区| 欧美大片顶级少妇| 国产精品亚洲人在线观看| 亚洲中国最大av网站| 日韩视频永久免费| 色94色欧美sute亚洲线路一ni| 日韩高清欧美激情| 亚洲天堂网中文字| 在线观看亚洲精品| 国产成a人亚洲精品| 国产精品久久久99| 欧美日韩国产天堂| 国产福利一区二区| 亚洲成人免费在线| 中文字幕在线一区免费| 欧美日韩aaa| 色噜噜偷拍精品综合在线| 美女脱光内衣内裤视频久久影院| 国产精品拍天天在线| 日韩三级免费观看| 色婷婷久久久久swag精品| 国产在线日韩欧美|