001: /*
002: JOpenChart Java Charting Library and Toolkit
003: Copyright (C) 2001 Sebastian Müller
004: http://jopenchart.sourceforge.net
005:
006: This library is free software; you can redistribute it and/or
007: modify it under the terms of the GNU Lesser General Public
008: License as published by the Free Software Foundation; either
009: version 2.1 of the License, or (at your option) any later version.
010:
011: This library is distributed in the hope that it will be useful,
012: but WITHOUT ANY WARRANTY; without even the implied warranty of
013: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: Lesser General Public License for more details.
015:
016: You should have received a copy of the GNU Lesser General Public
017: License along with this library; if not, write to the Free Software
018: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019:
020: Axis.java
021: Created on 30. Juni 2001, 22:27
022: */
023:
024: package de.progra.charting;
025:
026: import de.progra.charting.model.ChartDataModelConstraints;
027:
028: /**
029: * The CoordSystem contains two or possibly three Axis objects for the x-axis
030: * and the at most two y-axis.
031: * @author mueller
032: * @version 1.0
033: */
034: public class Axis {
035:
036: /** Defines a horizontal x-axis. */
037: public final static int HORIZONTAL = 1;
038:
039: /** Defines a vertical y-axis. */
040: public final static int VERTICAL = 2;
041:
042: /** Defines a logarithmic scale. */
043: public final static int LOGARITHMIC = 3;
044:
045: /** Defines a linear scale. */
046: public final static int LINEAR = 4;
047:
048: /** The axis' alignment. */
049: private int align = HORIZONTAL;
050:
051: ChartDataModelConstraints constraints;
052:
053: int length = Integer.MAX_VALUE;
054:
055: /** Creates new Axis.
056: * @param align the alignment of the axis.
057: * @param c the ChartDataModelConstraints
058: */
059: public Axis(int align, ChartDataModelConstraints c) {
060:
061: if (align == HORIZONTAL || align == VERTICAL)
062: this .align = align;
063:
064: this .constraints = c;
065: }
066:
067: /** Returns the alignment of the axis.
068: * @return the alignment constant: <CODE>Axis.VERTICAL</CODE> or <CODE>Axis.HORIZONTAL</CODE>
069: */
070: public int getAlignment() {
071: return align;
072: }
073:
074: /** Sets the Pixel length of the axis.
075: * @param length the length in pixel
076: */
077: public void setLength(int length) {
078: this .length = length;
079: }
080:
081: /** Returns length of the axis in pixels.
082: * @return the length in pixels
083: */
084: public int getLength() {
085: return length;
086: }
087:
088: /** Returns the point on the axis for a specific value.
089: * If the axis is a x-axis and the column values are not numeric,
090: * this isn't needed since then the axis can be divided into
091: * equally long parts. This is a relative pixel distance to
092: * the starting pixel of the axis.
093: * @param value the double value to compute the pixel distance for
094: * @return the pixel distance for the given value relative to the start of the axis
095: */
096: public double getPixelForValue(double value) {
097: // if scale == linear
098: if (getAlignment() == Axis.VERTICAL) {
099: return (value - constraints.getMinimumValue().doubleValue())
100: / getPointToPixelRatio();
101: } else {
102: return (value - constraints.getMinimumColumnValue())
103: / getPointToPixelRatio();
104: }
105: }
106:
107: /** Returns the ratio between a value unit and the screen pixels.
108: * This is only useful for linear scales.
109: * @return the ratio points / pixel length for the axis.
110: */
111: public double getPointToPixelRatio() {
112: //System.out.println("** constraints.getMaximumColumnValue() = "+constraints.getMaximumColumnValue());
113: if (getAlignment() == Axis.VERTICAL) {
114:
115: return (constraints.getMaximumValue().doubleValue() - constraints
116: .getMinimumValue().doubleValue())
117: / length;
118: } else
119: return (constraints.getMaximumColumnValue() - constraints
120: .getMinimumColumnValue())
121: / length;
122: }
123: }
|