01: /*
02: * GeoTools - OpenSource mapping toolkit
03: * http://geotools.org
04: * (C) 2003-2006, Geotools Project Managment Committee (PMC)
05: * (C) 2000, Institut de Recherche pour le Développement
06: * (C) 1999, Pêches et Océans Canada
07: *
08: * This library is free software; you can redistribute it and/or
09: * modify it under the terms of the GNU Lesser General Public
10: * License as published by the Free Software Foundation; either
11: * version 2.1 of the License, or (at your option) any later version.
12: *
13: * This library is distributed in the hope that it will be useful,
14: * but WITHOUT ANY WARRANTY; without even the implied warranty of
15: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16: * Lesser General Public License for more details.
17: */
18: package org.geotools.axis;
19:
20: // Dependencies
21: import java.util.Locale;
22:
23: import org.geotools.resources.XMath;
24:
25: /**
26: * Itérateur balayant les barres et étiquettes de graduation d'un axe logarithmique.
27: * Cet itérateur retourne les positions des graduations à partir de la valeur minimale
28: * jusqu'à la valeur maximale.
29: *
30: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/extension/widgets-swing/src/main/java/org/geotools/axis/LogarithmicNumberIterator.java $
31: * @version $Id: LogarithmicNumberIterator.java 20883 2006-08-07 13:48:09Z jgarnett $
32: * @author Martin Desruisseaux
33: */
34: final class LogarithmicNumberIterator extends NumberIterator {
35: /**
36: * Scale and offset factors for {@link #currentPosition}
37: */
38: private double scale, offset;
39:
40: /**
41: * Construit un itérateur par défaut. La méthode {@link #init}
42: * <u>doit</u> être appelée avant que cet itérateur ne soit
43: * utilisable.
44: *
45: * @param locale Conventions à utiliser pour le formatage des nombres.
46: */
47: protected LogarithmicNumberIterator(final Locale locale) {
48: super (locale);
49: }
50:
51: /**
52: * Initialise l'itérateur.
53: *
54: * @param minimum Valeur minimale de la première graduation.
55: * @param maximum Valeur limite des graduations. La dernière
56: * graduation n'aura pas nécessairement cette valeur.
57: * @param visualLength Longueur visuelle de l'axe sur laquelle tracer la graduation.
58: * Cette longueur doit être exprimée en pixels ou en points.
59: * @param visualTickSpacing Espace à laisser visuellement entre deux marques de graduation.
60: * Cet espace doit être exprimé en pixels ou en points (1/72 de pouce).
61: */
62: protected void init(final double minimum, final double maximum,
63: final float visualLength, final float visualTickSpacing) {
64: final double logMin = XMath.log10(minimum);
65: final double logMax = XMath.log10(maximum);
66: super .init(logMin, logMax, visualLength, visualTickSpacing);
67: scale = (maximum - minimum) / (logMax - logMin);
68: offset = minimum - scale * logMin;
69: }
70:
71: /**
72: * Returns the position where to draw the current tick. The
73: * position is scaled from the graduation's minimum to maximum.
74: */
75: public double currentPosition() {
76: return super .currentPosition() * scale + offset;
77: }
78:
79: /**
80: * Retourne la valeur de la graduation courante. Cette méthode
81: * peut être appelée pour une graduation majeure ou mineure.
82: */
83: public double currentValue() {
84: return XMath.pow10(super.currentValue());
85: }
86: }
|