blob: fedc201771fedd086ec4d6100b8aecde7dab5a55 [file] [log] [blame]
/*
* Copyright 2012 AndroidPlot.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.androidplot.xy;
import android.graphics.RectF;
import com.androidplot.util.ValPixConverter;
/**
* Calculates "stepping" values for a plot. These values are most commonly used for
* drawing grid lines on a graph.
*/
public class XYStepCalculator {
/**
* Convenience method - wraps other form of getStep().
* @param plot
* @param axisType
* @param rect
* @param minVal
* @param maxVal
* @return
*/
public static XYStep getStep(XYPlot plot, XYAxisType axisType, RectF rect, Number minVal, Number maxVal) {
XYStep step = null;
switch(axisType) {
case DOMAIN:
step = getStep(plot.getDomainStepMode(), rect.width(), plot.getDomainStepValue(), minVal, maxVal);
break;
case RANGE:
step = getStep(plot.getRangeStepMode(), rect.height(), plot.getRangeStepValue(), minVal, maxVal);
break;
}
return step;
}
public static XYStep getStep(XYStepMode typeXY, float plotPixelSize, double stepValue, Number minVal, Number maxVal) {
//XYStep step = new XYStep();
double stepVal = 0;
float stepPix = 0;
float stepCount = 0;
switch(typeXY) {
case INCREMENT_BY_VAL:
stepVal = stepValue;
stepPix = (float)(stepValue/ ValPixConverter.valPerPix(minVal.doubleValue(), maxVal.doubleValue(), plotPixelSize));
stepCount = plotPixelSize /stepPix;
break;
case INCREMENT_BY_PIXELS:
stepPix = new Double(stepValue).floatValue();
stepCount = plotPixelSize /stepPix;
stepVal = ValPixConverter.valPerPix(minVal.doubleValue(), maxVal.doubleValue(), plotPixelSize)*stepPix;
break;
case SUBDIVIDE:
stepCount = new Double(stepValue).floatValue();
stepPix = (plotPixelSize /(stepCount-1));
stepVal = ValPixConverter.valPerPix(minVal.doubleValue(), maxVal.doubleValue(), plotPixelSize)*stepPix;
break;
}
return new XYStep(stepCount, stepPix, stepVal);
}
}