/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.chart.series; import java.util.Collections; import java.util.LinkedList; import java.util.List; import com.quantcomponents.chart.BaseAxis; import com.quantcomponents.chart.IAxis; import com.quantcomponents.chart.IMark; import com.quantcomponents.chart.IMarkScale; import com.quantcomponents.chart.IMarkScaleSelector; /** * * Axis for double values. * Used as Y axis in charts * */ public class DoubleAxis extends BaseAxis<Double> implements IAxis<Double> { private final boolean reverse; private final List<IMark<Double>> baseMarks; private final List<IMark<Double>> parentMarks; private final IMarkScale<Double> baseMarkScale; public DoubleAxis(boolean reverse, IMarkScaleSelector<Double> scaleSelector, Double rangeLow, Double rangeHigh, int pixelLow, int pixelHigh, int maxMarkNumber) { this.reverse = reverse; setRangeLow(rangeLow); setRangeHigh(rangeHigh); setPixelLow(pixelLow); setPixelHigh(pixelHigh); baseMarkScale = scaleSelector.markScale(getRangeHigh() - getRangeLow(), maxMarkNumber); baseMarks = new LinkedList<IMark<Double>>(); for (IMark<Double> mark = baseMarkScale.followingMark(getRangeLow()); mark != null && mark.getValue() < getRangeHigh(); mark = baseMarkScale.followingMark(mark.getValue())) { baseMarks.add(mark); } parentMarks = new LinkedList<IMark<Double>>(); IMarkScale<Double> parentMarkScale = baseMarkScale.parent(); for (IMark<Double> mark = parentMarkScale.followingMark(getRangeLow()); mark != null && mark.getValue() < getRangeHigh(); mark = parentMarkScale.followingMark(mark.getValue())) { parentMarks.add(mark); } } @Override public int calculatePixel(Double value) { int pixelDisplacement = (int) ((value - getRangeLow()) / (getRangeHigh() - getRangeLow()) * (getPixelHigh() - getPixelLow())); return reverse ? getPixelHigh() - pixelDisplacement : getPixelLow() + pixelDisplacement; } @Override public boolean isValid(Double abscissa) { return true; } @Override public List<IMark<Double>> baseMarks() { return Collections.unmodifiableList(baseMarks); } @Override public List<IMark<Double>> parentMarks() { return Collections.unmodifiableList(parentMarks); } @Override public IMarkScale<Double> baseMarkScale() { return baseMarkScale; } @Override public int getPointSize() { return 0; } }