/******************************************************************************* * Copyright (c) 2008-2011 SWTChart project. All rights reserved. * * This code is distributed under the terms of the Eclipse Public License v1.0 * which is available at http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.swtchart.internal.compress; import java.util.ArrayList; /** * A compressor for bar series data. */ public class CompressBarSeries extends Compress { /* * @see Compress#addNecessaryPlots(ArrayList, ArrayList, ArrayList) */ @Override protected void addNecessaryPlots(ArrayList<Double> xList, ArrayList<Double> yList, ArrayList<Integer> indexList) { double prevX = xSeries[0]; double maxY = Double.NaN; int prevIndex = 0; for (int i = 0; i < xSeries.length; i++) { if (xSeries[i] >= config.getXLowerValue()) { if (isInSameGridXAsPrevious(xSeries[i])) { if (maxY < ySeries[i]) { maxY = ySeries[i]; } } else { if (!Double.isNaN(maxY)) { addToList(xList, yList, indexList, prevX, maxY, prevIndex); } prevX = xSeries[i]; maxY = ySeries[i]; prevIndex = i; } } if (xSeries[i] > config.getXUpperValue()) { break; } } addToList(xList, yList, indexList, prevX, maxY, prevIndex); } /** * Checks if the given x coordinate is in the same grid as previous. * * @param x * the X coordinate * @return true if the given coordinate is in the same grid as previous */ private boolean isInSameGridXAsPrevious(double x) { int xGridIndex = (int) ((x - config.getXLowerValue()) / (config.getXUpperValue() - config.getXLowerValue()) * config .getWidthInPixel()); boolean isInSameGridAsPrevious = (xGridIndex == previousXGridIndex); previousXGridIndex = xGridIndex; return isInSameGridAsPrevious; } }