KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > krysalis > jcharts > axisChart > axis > scale > UserDefinedScaleCalculator


1 /***********************************************************************************************
2  * Copyright 2002 (C) Nathaniel G. Auvil. All Rights Reserved.
3  *
4  * Redistribution and use of this software and associated documentation ("Software"), with or
5  * without modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain copyright statements and notices.
8  * Redistributions must also contain a copy of this document.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
11  * conditions and the following disclaimer in the documentation and/or other materials
12  * provided with the distribution.
13  *
14  * 3. The name "jCharts" or "Nathaniel G. Auvil" must not be used to endorse or promote
15  * products derived from this Software without prior written permission of Nathaniel G.
16  * Auvil. For written permission, please contact nathaniel_auvil@users.sourceforge.net
17  *
18  * 4. Products derived from this Software may not be called "jCharts" nor may "jCharts" appear
19  * in their names without prior written permission of Nathaniel G. Auvil. jCharts is a
20  * registered trademark of Nathaniel G. Auvil.
21  *
22  * 5. Due credit should be given to the jCharts Project (http://jcharts.sourceforge.net/).
23  *
24  * THIS SOFTWARE IS PROVIDED BY Nathaniel G. Auvil AND CONTRIBUTORS ``AS IS'' AND ANY
25  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
27  * jCharts OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
32  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
33  ************************************************************************************************/

34
35 package org.krysalis.jcharts.axisChart.axis.scale;
36
37
38 import org.krysalis.jcharts.axisChart.axis.scale.ScaleCalculator;
39
40
41 /*************************************************************************************
42  *
43  * @author Nathaniel Auvil, Mike Lissick
44  * @version $Id: UserDefinedScaleCalculator.java,v 1.1 2003/05/17 16:54:37 nathaniel_auvil Exp $
45  ************************************************************************************/

46 public class UserDefinedScaleCalculator extends ScaleCalculator
47 {
48    private double userDefinedMinimum;
49     private double userDefinedIncrement;
50
51
52     /****************************************************************************************
53      *
54      * It would seem to make sense to pass in the min and the max, but we want to allow
55      * people to use custom implementations which will be created when the AxisChart
56      * constructor gets called and we will not have looped the data to find the min
57      * and max yet. No sense in making people do that when we will do that already.
58      *
59      * @param userDefinedMinimum
60      * @param userDefinedIncrement
61      ***************************************************************************************/

62     public UserDefinedScaleCalculator( double userDefinedMinimum, double userDefinedIncrement )
63     {
64         this.userDefinedMinimum = userDefinedMinimum;
65         this.userDefinedIncrement = userDefinedIncrement;
66     }
67
68
69     /*********************************************************************************************
70      * Computes the axis increment WITHOUT taking into account the user specified rounding
71      * criteria and sets it to the super class increment variable. You can extend this class
72      * and override this method to compute you own scale.
73      *
74      ********************************************************************************************/

75     protected void computeIncrement()
76     {
77         super.increment = this.userDefinedIncrement;
78
79         double powerOfTen = Math.pow( 10, Math.abs( this.getRoundingPowerOfTen() ) );
80
81         //---round the increment according to user defined power
82
super.increment = super.round( super.increment, powerOfTen );
83
84         //---if we round this down to zero, force it to the power of ten.
85
//---for example, round to nearest 100, value = 35...would push down to 0 which is illegal.
86
if( super.increment == 0 )
87         {
88             super.increment = powerOfTen;
89         }
90
91         super.setMinValue( super.round( this.userDefinedMinimum, powerOfTen ) );
92         super.setMaxValue( super.getMinValue() + ( super.increment * super.getNumberOfScaleItems() ) );
93
94     }
95
96
97     /*********************************************************************************************
98      * Drives the computation of the axis increment and related values taking into account the
99      * user specified rounding criteria and sets it to the super class increment variable.
100      *
101      * So if you specify to round to the nearest 100 and give an increment of 2.5, the increment
102      * will become 100.
103      *
104      * @param numberOfScaleItems
105      ********************************************************************************************
106     public void roundScaleValues( double powerOfTen, int numberOfScaleItems )
107     {
108         //---round the increment according to user defined power
109         super.increment = super.round( super.increment, powerOfTen );
110
111         //---if we round this down to zero, force it to the power of ten.
112         //---for example, round to nearest 100, value = 35...would push down to 0 which is illegal.
113         if( super.increment == 0 )
114         {
115             super.increment = powerOfTen;
116         }
117
118         super.setMinValue( super.round( this.userDefinedMinimum, powerOfTen ) );
119         super.setMaxValue( super.getMinValue() + ( super.increment * numberOfScaleItems ) );
120     }
121     */

122 }
123
Popular Tags