    001/* ===========================================================
    002 * Orson Charts : a 3D chart library for the Java(tm) platform
    003 * ===========================================================
    004 *
    005 * (C)opyright 2013-2016, by Object Refinery Limited.  All rights reserved.
    006 *
    007 * http://www.object-refinery.com/orsoncharts/index.html
    008 *
    009 * This program is free software: you can redistribute it and/or modify
    010 * it under the terms of the GNU General Public License as published by
    011 * the Free Software Foundation, either version 3 of the License, or
    012 * (at your option) any later version.
    013 *
    014 * This program is distributed in the hope that it will be useful,
    015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    017 * GNU General Public License for more details.
    018 *
    019 * You should have received a copy of the GNU General Public License
    020 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    021 *
    022 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    023 * Other names may be trademarks of their respective owners.]
    024 *
    025 * If you do not wish to be bound by the terms of the GPL, an alternative
    026 * commercial license can be purchased.  For details, please see visit the
    027 * Orson Charts home page:
    028 *
    029 * http://www.object-refinery.com/orsoncharts/index.html
    030 *
    031 */
    032
    033package com.orsoncharts.marker;
    034
    035import java.awt.geom.Point2D;
    036
    037/**
    038 * A data object that represents a line within a {@link MarkerData} structure.
    039 *
    040 * @since 1.2
    041 */
    042public class MarkerLine {
    043
    044    /** The relative position along the axis (in the range 0.0 to 1.0). */
    045    private double pos;
    046
    047    /**
    048     * A flag indicating whether or not the line is pegged at the boundary of
    049     * the axis.  If the line is pegged, then it is not drawn (since it lies
    050     * outside the visible range of the chart.
    051     */
    052    private boolean pegged;
    053
    054    /** The vertex index for the start of the line. */
    055    private int v0;
    056
    057    /** The vertex index for the end of the line. */
    058    private int v1;
    059
    060    /** The projected start point. */
    061    private Point2D startPoint;
    062
    063    /** The projected end point. */
    064    private Point2D endPoint;
    065
    066    /**
    067     * Creates a new marker line.
    068     *
    069     * @param pos  the relative position (in the range 0.0 to 1.0).
    070     * @param pegged  a flag indicating whether or not the line has been
    071     *     pegged to the end of the range.
    072     */
    073    public MarkerLine(double pos, boolean pegged) {
    074        this(pos, pegged, -1, -1);
    075    }
    076
    077    /**
    078     * Creates a new marker line with vertex indices.
    079     *
    080     * @param pos  the relative position (in the range 0.0 to 1.0).
    081     * @param pegged  a flag indicating whether or not the line has been
    082     *     pegged to the end of the range.
    083     * @param v0  the index of the first vertex.
    084     * @param v1  the index of the second vertex.
    085     */
    086    public MarkerLine(double pos, boolean pegged, int v0, int v1) {
    087        this.pos = pos;
    088        this.pegged = pegged;
    089        this.v0 = v0;
    090        this.v1 = v1;
    091        this.startPoint = null;
    092        this.endPoint = null;
    093    }
    094
    095    /**
    096     * Returns the relative position of the line along the axis.
    097     *
    098     * @return The relative position of the line along the axis.
    099     */
    100    public double getPos() {
    101        return this.pos;
    102    }
    103
    104    /**
    105     * Returns {@code true} if the line is pegged, and {@code false}
    106     * otherwise.  This is used for range markers to indicate that the value
    107     * represented by the line falls outside the current axis range, so the
    108     * line has been moved to the nearest axis boundary ("pegged" to the axis
    109     * range).
    110     *
    111     * @return A boolean.
    112     */
    113    public boolean isPegged() {
    114        return this.pegged;
    115    }
    116
    117    /**
    118     * Returns the index of the vertex for the start of the line.
    119     *
    120     * @return The index.
    121     */
    122    public int getV0() {
    123        return this.v0;
    124    }
    125
    126    /**
    127     * Sets the index of the vertex for the start of the line.
    128     *
    129     * @param v0  the index.
    130     */
    131    public void setV0(int v0) {
    132        this.v0 = v0;
    133    }
    134
    135    /**
    136     * Returns the index of the vertex for the end of the line.
    137     *
    138     * @return The index.
    139     */
    140    public int getV1() {
    141        return this.v1;
    142    }
    143
    144    /**
    145     * Sets the index of the vertex for the end of the line.
    146     *
    147     * @param v1  the index.
    148     */
    149    public void setV1(int v1) {
    150        this.v1 = v1;
    151    }
    152
    153    /**
    154     * Returns the projected starting point for the line.
    155     *
    156     * @return The projected starting point (possibly {@code null}).
    157     */
    158    Point2D getStartPoint() {
    159        return this.startPoint;
    160    }
    161
    162    /**
    163     * Sets the projected starting point for the line.
    164     *
    165     * @param pt  the projected point.
    166     */
    167    public void setStartPoint(Point2D pt) {
    168        this.startPoint = pt;
    169    }
    170
    171    /**
    172     * Returns the projected ending point for the line.
    173     *
    174     * @return The projected ending point (possibly {@code null}).
    175     */
    176    Point2D getEndPoint() {
    177        return this.endPoint;
    178    }
    179
    180    /**
    181     * Sets the projected ending point for the line.
    182     *
    183     * @param pt  the projected point.
    184     */
    185    public void setEndPoint(Point2D pt) {
    186        this.endPoint = pt;
    187    }
    188
    189}