⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symbolicaxis.java

📁 这是一个segy数据显示程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            double upperMargin = 0.5;            double lowerMargin = 0.5;            if (autoRangeIncludesZero()) {                if (autoRangeStickyZero()) {                    if (upper <= 0.0) {                        upper = 0.0;                    }                    else {                        upper = upper + upperMargin;                    }                    if (lower >= 0.0) {                        lower = 0.0;                    }                    else {                        lower = lower - lowerMargin;                    }                }                else {                    upper = Math.max(0.0, upper + upperMargin);                    lower = Math.min(0.0, lower - lowerMargin);                }            }            else {                if (autoRangeStickyZero()) {                    if (upper <= 0.0) {                        upper = Math.min(0.0, upper + upperMargin);                    }                    else {                        upper = upper + upperMargin * range;                    }                    if (lower >= 0.0) {                        lower = Math.max(0.0, lower - lowerMargin);                    }                    else {                        lower = lower - lowerMargin;                    }                }                else {                    upper = upper + upperMargin;                    lower = lower - lowerMargin;                }            }            setRange(new Range(lower, upper), false, false);        }    }    /**     * Calculates the positions of the tick labels for the axis, storing the results in the     * tick label list (ready for drawing).     *     * @param g2  the graphics device.     * @param state  the axis state.     * @param plotArea  the area in which the plot (inlcuding axes) should be drawn.     * @param dataArea  the area in which the data should be drawn.     * @param edge  the location of the axis.     *      * @return A list of ticks.     */    public List refreshTicks(Graphics2D g2,                              AxisState state,                             Rectangle2D plotArea,                              Rectangle2D dataArea,                             RectangleEdge edge) {        List ticks = null;        if (RectangleEdge.isTopOrBottom(edge)) {            ticks = refreshTicksHorizontal(g2, state.getCursor(), plotArea, dataArea, edge);        }        else if (RectangleEdge.isLeftOrRight(edge)) {            ticks = refreshTicksVertical(g2, state.getCursor(), plotArea, dataArea, edge);        }        return ticks;    }    /**     * Calculates the positions of the tick labels for the axis, storing the results in the     * tick label list (ready for drawing).     *     * @param g2  the graphics device.     * @param cursor  the cursor position for drawing the axis.     * @param plotArea  the area in which the plot (inlcuding axes) should be drawn.     * @param dataArea  the area in which the data should be drawn.     * @param edge  the location of the axis.     *      * @return The ticks.     */    public List refreshTicksHorizontal(Graphics2D g2, double cursor,                                       Rectangle2D plotArea, Rectangle2D dataArea,                                       RectangleEdge edge) {        List ticks = new java.util.ArrayList();        Font tickLabelFont = getTickLabelFont();        g2.setFont(tickLabelFont);        double size = getTickUnit().getSize();        int count = calculateVisibleTickCount();        double lowestTickValue = calculateLowestVisibleTickValue();        double previousDrawnTickLabelPos = 0.0;                 double previousDrawnTickLabelLength = 0.0;                      if (count <= ValueAxis.MAXIMUM_TICK_COUNT) {            for (int i = 0; i < count; i++) {                double currentTickValue = lowestTickValue + (i * size);                double xx = valueToJava2D(currentTickValue, dataArea, edge);                String tickLabel;                NumberFormat formatter = getNumberFormatOverride();                if (formatter != null) {                    tickLabel = formatter.format(currentTickValue);                }                else {                    tickLabel = valueToString(currentTickValue);                }                                // avoid to draw overlapping tick labels                Rectangle2D bounds = TextUtilities.getTextBounds(                    tickLabel, g2, g2.getFontMetrics()                );                double tickLabelLength = isVerticalTickLabels()                                          ? bounds.getHeight() : bounds.getWidth();                boolean tickLabelsOverlapping = false;                if (i > 0) {                    double avgTickLabelLength = (previousDrawnTickLabelLength + tickLabelLength)                                                 / 2.0;                    if (Math.abs(xx - previousDrawnTickLabelPos) < avgTickLabelLength) {                        tickLabelsOverlapping = true;                    }                }                if (tickLabelsOverlapping) {                    tickLabel = ""; // don't draw this tick label                }                else {                    // remember these values for next comparison                    previousDrawnTickLabelPos = xx;                    previousDrawnTickLabelLength = tickLabelLength;                         }                                 TextAnchor anchor = null;                TextAnchor rotationAnchor = null;                double angle = 0.0;                if (isVerticalTickLabels()) {                    anchor = TextAnchor.CENTER_RIGHT;                    rotationAnchor = TextAnchor.CENTER_RIGHT;                    if (edge == RectangleEdge.TOP) {                        angle = Math.PI / 2.0;                    }                    else {                        angle = -Math.PI / 2.0;                    }                }                else {                    if (edge == RectangleEdge.TOP) {                        anchor = TextAnchor.BOTTOM_CENTER;                        rotationAnchor = TextAnchor.BOTTOM_CENTER;                    }                    else {                        anchor = TextAnchor.TOP_CENTER;                        rotationAnchor = TextAnchor.TOP_CENTER;                    }                }                Tick tick = new NumberTick(                    new Double(currentTickValue), tickLabel, anchor, rotationAnchor, angle                );                ticks.add(tick);            }        }        return ticks;    }    /**     * Calculates the positions of the tick labels for the axis, storing the results in the     * tick label list (ready for drawing).     *     * @param g2  the graphics device.     * @param cursor  the cursor position for drawing the axis.     * @param plotArea  the area in which the plot and the axes should be drawn.     * @param dataArea  the area in which the plot should be drawn.     * @param edge  the location of the axis.     *      * @return The ticks.     */    public List refreshTicksVertical(Graphics2D g2, double cursor,                                     Rectangle2D plotArea, Rectangle2D dataArea,                                     RectangleEdge edge) {        List ticks = new java.util.ArrayList();        Font tickLabelFont = getTickLabelFont();        g2.setFont(tickLabelFont);        double size = getTickUnit().getSize();        int count = calculateVisibleTickCount();        double lowestTickValue = calculateLowestVisibleTickValue();        double previousDrawnTickLabelPos = 0.0;                 double previousDrawnTickLabelLength = 0.0;                      if (count <= ValueAxis.MAXIMUM_TICK_COUNT) {            for (int i = 0; i < count; i++) {                double currentTickValue = lowestTickValue + (i * size);                double yy = valueToJava2D(currentTickValue, dataArea, edge);                String tickLabel;                NumberFormat formatter = getNumberFormatOverride();                if (formatter != null) {                    tickLabel = formatter.format(currentTickValue);                }                else {                    tickLabel = valueToString(currentTickValue);                }                // avoid to draw overlapping tick labels                Rectangle2D bounds = TextUtilities.getTextBounds(                    tickLabel, g2, g2.getFontMetrics()                );                double tickLabelLength = isVerticalTickLabels()                                          ? bounds.getWidth() : bounds.getHeight();                boolean tickLabelsOverlapping = false;                if (i > 0) {                    double avgTickLabelLength =                         (previousDrawnTickLabelLength + tickLabelLength) / 2.0;                    if (Math.abs(yy - previousDrawnTickLabelPos) < avgTickLabelLength) {                        tickLabelsOverlapping = true;                        }                    if (tickLabelsOverlapping) {                        tickLabel = ""; // don't draw this tick label                    }                    else {                        // remember these values for next comparison                        previousDrawnTickLabelPos = yy;                        previousDrawnTickLabelLength = tickLabelLength;                             }                 }                TextAnchor anchor = null;                TextAnchor rotationAnchor = null;                double angle = 0.0;                if (isVerticalTickLabels()) {                    anchor = TextAnchor.BOTTOM_CENTER;                    rotationAnchor = TextAnchor.BOTTOM_CENTER;                    if (edge == RectangleEdge.LEFT) {                        angle = -Math.PI / 2.0;                    }                    else {                        angle = Math.PI / 2.0;                    }                                    }                else {                    if (edge == RectangleEdge.LEFT) {                        anchor = TextAnchor.CENTER_RIGHT;                        rotationAnchor = TextAnchor.CENTER_RIGHT;                    }                    else {                        anchor = TextAnchor.CENTER_LEFT;                        rotationAnchor = TextAnchor.CENTER_LEFT;                    }                }                Tick tick = new NumberTick(                    new Double(currentTickValue), tickLabel, anchor, rotationAnchor, angle                );                ticks.add(tick);            }        }        return ticks;            }    /**     * Converts a value to a string, using the list of symbolic values.     *     * @param value  value to convert.     *     * @return the symbolic value.     */    public String valueToString(double value) {        String strToReturn;        try {            strToReturn = (String) this.symbolicValue.get((int) value);        }        catch (IndexOutOfBoundsException  ex) {            strToReturn =  new String("");        }        return strToReturn;    }    /**     * Draws the symbolic grid lines.     * <P>     * The colors are consecutively the color specified by     * <CODE>symbolicGridPaint<CODE>     * (<CODE>DEFAULT_SYMBOLIC_GRID_LINE_PAINT</CODE> by default) and white.     * or if <CODE>firstGridLineIsDark</CODE> is <CODE>true</CODE> white and     * the color specified by <CODE>symbolicGridPaint<CODE>.     *     * @param g2  the graphics device.     * @param drawArea  the area within which the chart should be drawn.     * @param plotArea  the area within which the plot should be drawn (a     *                  subset of the drawArea).     * @param firstGridLineIsDark   True: the first symbolic grid line take the     *      color of <CODE>symbolicGridPaint<CODE>.     *      False: the first symbolic grid line is white.     * @param ticks  a list of ticks.     */    public void drawSymbolicGridLinesVertical(Graphics2D g2, Rectangle2D drawArea,                                              Rectangle2D plotArea, boolean firstGridLineIsDark,                                              List ticks) {        this.symbolicGridLineList = new Vector(ticks.size());        boolean currentGridLineIsDark = firstGridLineIsDark;        double xx = plotArea.getX();        double yy1, yy2;        //gets the outline stroke width of the plot        double outlineStrokeWidth;        if (getPlot().getOutlineStroke() != null) {            outlineStrokeWidth = ((BasicStroke) getPlot().getOutlineStroke()).getLineWidth();        }        else {            outlineStrokeWidth = 1d;        }        Iterator iterator = ticks.iterator();        ValueTick tick;        Rectangle2D symbolicGridLine;        while (iterator.hasNext()) {            tick = (ValueTick) iterator.next();            yy1 = valueToJava2D(tick.getValue() + 0.5d, plotArea, RectangleEdge.LEFT);            yy2 = valueToJava2D(tick.getValue() - 0.5d, plotArea, RectangleEdge.LEFT);            if (currentGridLineIsDark) {                g2.setPaint(this.symbolicGridPaint);                //g2.setXORMode((Color) getSymbolicGridPaint());            }            else {                g2.setPaint(Color.white);                //g2.setXORMode(Color.white);            }            symbolicGridLine = new Rectangle2D.Double(xx + outlineStrokeWidth,                yy1, plotArea.getMaxX() - xx - outlineStrokeWidth, yy2 - yy1);            g2.fill(symbolicGridLine);            this.symbolicGridLineList.add(symbolicGridLine);            currentGridLineIsDark = !currentGridLineIsDark;        }        g2.setPaintMode();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -