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

📄 categoryaxis.java

📁 这是一个segy数据显示程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
     * @param area  the data area.     * @param edge  the axis location.     *     * @return the coordinate.     */    public double getCategoryStart(int category, int categoryCount, Rectangle2D area,                                   RectangleEdge edge) {        double result = 0.0;        if ((edge == RectangleEdge.TOP) || (edge == RectangleEdge.BOTTOM)) {            result = area.getX() + area.getWidth() * getLowerMargin();        }        else if ((edge == RectangleEdge.LEFT) || (edge == RectangleEdge.RIGHT)) {            result = area.getMinY() + area.getHeight() * getLowerMargin();        }        double categorySize = calculateCategorySize(categoryCount, area, edge);        double categoryGapWidth = calculateCategoryGapSize(categoryCount, area, edge);        result = result + category * (categorySize + categoryGapWidth);        return result;    }    /**     * Returns the middle coordinate for the specified category.     *     * @param category  the category.     * @param categoryCount  the number of categories.     * @param area  the data area.     * @param edge  the axis location.     *     * @return the coordinate.     */    public double getCategoryMiddle(int category, int categoryCount, Rectangle2D area,                                    RectangleEdge edge) {        return getCategoryStart(category, categoryCount, area, edge)               + calculateCategorySize(categoryCount, area, edge) / 2;    }    /**     * Returns the end coordinate for the specified category.     *     * @param category  the category.     * @param categoryCount  the number of categories.     * @param area  the data area.     * @param edge  the axis location.     *     * @return the coordinate.     */    public double getCategoryEnd(int category, int categoryCount, Rectangle2D area,                                 RectangleEdge edge) {        return getCategoryStart(category, categoryCount, area, edge)               + calculateCategorySize(categoryCount, area, edge);    }    /**     * Calculates the size (width or height, depending on the location of the axis) of a category.     *     * @param categoryCount  the number of categories.     * @param area  the area within which the categories will be drawn.     * @param edge  the axis location.     *     * @return the category size.     */    protected double calculateCategorySize(int categoryCount, Rectangle2D area,                                           RectangleEdge edge) {        double result = 0.0;        double available = 0.0;        if ((edge == RectangleEdge.TOP) || (edge == RectangleEdge.BOTTOM)) {            available = area.getWidth();        }        else if ((edge == RectangleEdge.LEFT) || (edge == RectangleEdge.RIGHT)) {            available = area.getHeight();        }        if (categoryCount > 1) {            result = available * (1 - getLowerMargin() - getUpperMargin() - getCategoryMargin());            result = result / categoryCount;        }        else {            result = available * (1 - getLowerMargin() - getUpperMargin());        }        return result;    }    /**     * Calculates the size (width or height, depending on the location of the axis) of a category     * gap.     *     * @param categoryCount  the number of categories.     * @param area  the area within which the categories will be drawn.     * @param edge  the axis location.     *     * @return the category gap width.     */    protected double calculateCategoryGapSize(int categoryCount, Rectangle2D area,                                              RectangleEdge edge) {        double result = 0.0;        double available = 0.0;        if ((edge == RectangleEdge.TOP) || (edge == RectangleEdge.BOTTOM)) {            available = area.getWidth();        }        else if ((edge == RectangleEdge.LEFT) || (edge == RectangleEdge.RIGHT)) {            available = area.getHeight();        }        if (categoryCount > 1) {            result = available * getCategoryMargin() / (categoryCount - 1);        }        return result;    }    /**     * Estimates the space required for the axis, given a specific drawing area.     *     * @param g2  the graphics device (used to obtain font information).     * @param plot  the plot that the axis belongs to.     * @param plotArea  the area within which the axis should be drawn.     * @param edge  the axis location (top or bottom).     * @param space  the space already reserved.     *     * @return The space required to draw the axis.     */    public AxisSpace reserveSpace(Graphics2D g2, Plot plot, Rectangle2D plotArea,                                   RectangleEdge edge, AxisSpace space) {        // create a new space object if one wasn't supplied...        if (space == null) {            space = new AxisSpace();        }                // if the axis is not visible, no additional space is required...        if (!isVisible()) {            return space;        }        // calculate the max size of the tick labels (if visible)...        double tickLabelHeight = 0.0;        double tickLabelWidth = 0.0;        if (isTickLabelsVisible()) {            g2.setFont(getTickLabelFont());            AxisState state = new AxisState();            refreshTicks(g2, state, plotArea, plotArea, edge);            if (edge == RectangleEdge.TOP) {                tickLabelHeight = state.getMax();            }            else if (edge == RectangleEdge.BOTTOM) {                tickLabelHeight = state.getMax();            }            else if (edge == RectangleEdge.LEFT) {                tickLabelWidth = state.getMax();             }            else if (edge == RectangleEdge.RIGHT) {                tickLabelWidth = state.getMax();             }        }                // get the axis label size and update the space object...        Rectangle2D labelEnclosure = getLabelEnclosure(g2, edge);        double labelHeight = 0.0;        double labelWidth = 0.0;        if (RectangleEdge.isTopOrBottom(edge)) {            labelHeight = labelEnclosure.getHeight();            space.add(labelHeight + tickLabelHeight + this.categoryLabelPositionOffset, edge);        }        else if (RectangleEdge.isLeftOrRight(edge)) {            labelWidth = labelEnclosure.getWidth();            space.add(labelWidth + tickLabelWidth + this.categoryLabelPositionOffset, edge);        }        return space;    }    /**     * Configures the axis against the current plot.     */    public void configure() {        // nothing required    }    /**     * Draws the axis on a Java 2D graphics device (such as the screen or a printer).     *     * @param g2  the graphics device (<code>null</code> not permitted).     * @param cursor  the cursor location.     * @param plotArea  the area within which the axis should be drawn (<code>null</code> not      *                  permitted).     * @param dataArea  the area within which the plot is being drawn (<code>null</code> not      *                  permitted).     * @param edge  the location of the axis (<code>null</code> not permitted).     * @param plotState  collects information about the plot (<code>null</code> permitted).     *      * @return the axis state (never <code>null</code>).     */    public AxisState draw(Graphics2D g2,                           double cursor,                           Rectangle2D plotArea,                           Rectangle2D dataArea,                          RectangleEdge edge,                          PlotRenderingInfo plotState) {                if (logger.isDebugEnabled()) {            logger.debug("Entering draw() method, cursor = " + cursor);        }                // if the axis is not visible, don't draw it...        if (!isVisible()) {            return new AxisState(cursor);        }                if (isAxisLineVisible()) {            drawAxisLine(g2, cursor, dataArea, edge);        }        // draw the category labels and axis label        AxisState state = new AxisState(cursor);        state = drawCategoryLabels(g2, plotArea, dataArea, edge, state, plotState);        state = drawLabel(getLabel(), g2, plotArea, dataArea, edge, state);            return state;    }    /**     * Draws the category labels and returns the updated axis state.     *     * @param g2  the graphics device (<code>null</code> not permitted).     * @param plotArea  the plot area (<code>null</code> not permitted).     * @param dataArea  the area inside the axes (<code>null</code> not permitted).     * @param edge  the axis location (<code>null</code> not permitted).     * @param state  the axis state (<code>null</code> not permitted).     * @param plotState  collects information about the plot (<code>null</code> permitted).     *      * @return the updated axis state (never <code>null</code>).     */    protected AxisState drawCategoryLabels(Graphics2D g2,                                           Rectangle2D plotArea,                                           Rectangle2D dataArea,                                           RectangleEdge edge,                                           AxisState state,                                           PlotRenderingInfo plotState) {        if (logger.isDebugEnabled()) {            logger.debug("Entering drawCategoryLabels() method, cursor = " + state.getCursor());        }        if (state == null) {            throw new IllegalArgumentException("Null 'state' argument.");        }        if (isTickLabelsVisible()) {            g2.setFont(getTickLabelFont());            g2.setPaint(getTickLabelPaint());            List ticks = refreshTicks(g2, state, plotArea, dataArea, edge);            state.setTicks(ticks);                              int categoryIndex = 0;            Iterator iterator = ticks.iterator();            while (iterator.hasNext()) {                                CategoryTick tick = (CategoryTick) iterator.next();                g2.setPaint(getTickLabelPaint());                CategoryLabelPosition position = this.categoryLabelPositions.getLabelPosition(edge);                double x0 = 0.0;                double x1 = 0.0;                double y0 = 0.0;                double y1 = 0.0;                if (edge == RectangleEdge.TOP) {                    x0 = getCategoryStart(categoryIndex, ticks.size(), dataArea, edge);                    x1 = getCategoryEnd(categoryIndex, ticks.size(), dataArea, edge);                    y1 = state.getCursor() - this.categoryLabelPositionOffset;                    y0 = y1 - state.getMax();                }                else if (edge == RectangleEdge.BOTTOM) {                    x0 = getCategoryStart(categoryIndex, ticks.size(), dataArea, edge);                    x1 = getCategoryEnd(categoryIndex, ticks.size(), dataArea, edge);                     y0 = state.getCursor() + this.categoryLabelPositionOffset;                                       y1 = y0 + state.getMax();                }                else if (edge == RectangleEdge.LEFT) {                    y0 = getCategoryStart(categoryIndex, ticks.size(), dataArea, edge);                    y1 = getCategoryEnd(categoryIndex, ticks.size(), dataArea, edge);                    x1 = state.getCursor() - this.categoryLabelPositionOffset;                    x0 = x1 - state.getMax();                }                else if (edge == RectangleEdge.RIGHT) {                    y0 = getCategoryStart(categoryIndex, ticks.size(), dataArea, edge);                    y1 = getCategoryEnd(categoryIndex, ticks.size(), dataArea, edge);                    x0 = state.getCursor() + this.categoryLabelPositionOffset;                    x1 = x0 - state.getMax();                }                Rectangle2D area = new Rectangle2D.Double(x0, y0, (x1 - x0), (y1 - y0));                double[] anchorPoint = RectangleAnchor.coordinates(                    area, position.getCategoryAnchor()                );                TextBlock block = tick.getLabel();                block.draw(                    g2,                     (float) anchorPoint[0], (float) anchorPoint[1], position.getLabelAnchor(),                     (float) anchorPoint[0], (float) anchorPoint[1], position.getAngle()                );                Shape bounds = block.calculateBounds(                    g2, (float) anchorPoint[0], (float) anchorPoint[1], position.getLabelAnchor(),                     (float) anchorPoint[0], (float) anchorPoint[1], position.getAngle()                );                if (plotState != null) {                    EntityCollection entities = plotState.getOwner().getEntityCollection();                    if (entities != null) {                        String tooltip = (String) this.categoryLabelToolTips.get(                            tick.getCategory()                        );                        entities.addEntity(new TickLabelEntity(bounds, tooltip, null));                       }                }                categoryIndex++;            }            if (edge.equals(RectangleEdge.TOP)) {                double h = state.getMax();                state.cursorUp(h);            }            else if (edge.equals(RectangleEdge.BOTTOM)) {                double h = state.getMax();                state.cursorDown(h);            }            else if (edge == RectangleEdge.LEFT) {                double w = state.getMax();                state.cursorLeft(w);            }            else if (edge == RectangleEdge.RIGHT) {                double w = state.getMax();                state.cursorRight(w);            }        }        return state;    }    /**     * Creates a temporary list of ticks that can be used when drawing the axis.     *     * @param g2  the graphics device (used to get font measurements).     * @param state  the axis state.     * @param plotArea  the area where the plot and axes will be drawn.     * @param dataArea  the area inside the axes.     * @param edge  the location of the axis.     *      * @return A list of ticks.     */    public List refreshTicks(Graphics2D g2,                              AxisState state,                             Rectangle2D plotArea,                              Rectangle2D dataArea,

⌨️ 快捷键说明

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