16224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/*
26224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Copyright 2012 AndroidPlot.com
36224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *
46224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    Licensed under the Apache License, Version 2.0 (the "License");
56224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    you may not use this file except in compliance with the License.
66224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    You may obtain a copy of the License at
76224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *
86224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *        http://www.apache.org/licenses/LICENSE-2.0
96224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *
106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    Unless required by applicable law or agreed to in writing, software
116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    distributed under the License is distributed on an "AS IS" BASIS,
126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    See the License for the specific language governing permissions and
146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    limitations under the License.
156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */
166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapackage com.androidplot.xy;
186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.Path;
206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.PointF;
216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/**
236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Renders a point as a line with the vertices marked.  Requires 2 or more points to
246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * be rendered.
256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */
266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapublic class StepRenderer extends LineAndPointRenderer<StepFormatter> {
286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public StepRenderer(XYPlot plot) {
306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        super(plot);
316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    protected void appendToPath(Path path, PointF thisPoint, PointF lastPoint) {
356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        //path.lineTo(thisPoint.x, thisPoint.y);
366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        path.lineTo(thisPoint.x, lastPoint.y);
386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        path.lineTo(thisPoint.x, thisPoint.y);
396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        //canvas.drawPoint(point.x, lastPoint.y, format.getVertexPaint());
406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        // next the vertical:
416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        //canvas.drawLine(point.x, lastPoint.y, point.x, point.y, format.getLinePaint());
426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala}
446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/*
456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapublic class StepRenderer extends XYSeriesRenderer<StepFormatter> {
466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private PointF lastPoint;
486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private boolean drawLinesEnabled = true;
506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private boolean drawPointsEnabled = true;
516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private XYAxisType stepAxis = XYAxisType.DOMAIN;
536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public StepRenderer(XYPlot plot) {
576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        super(plot);
586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void onRender(Canvas canvas, RectF plotArea) throws PlotRenderException {
626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        for(XYSeries series : getPlot().getSeriesListForRenderer(this.getClass())) {
666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            drawSeries(canvas, plotArea, series, getFormatter(series));
686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        //foreach(this.)
706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        //foreach()
716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void doDrawLegendIcon(Canvas canvas, RectF rect, String text, StepFormatter formatter) {
756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // horizontal icon:
766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        float centerY = rect.centerY();
776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        float centerX = rect.centerX();
786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        canvas.drawLine(rect.left, rect.top, rect.right, rect.bottom, formatter.getLinePaint());
796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        canvas.drawPoint(centerX, centerY, formatter.getVertexPaint());
806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        //canvas.drawRect(rect, formatter.getLinePaint());
816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private void drawSeries(Canvas canvas, RectF plotArea, XYSeries series, StepFormatter formatter) throws PlotRenderException {
866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        beginSeries(canvas, plotArea, formatter);
876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        //XYDataset series = bundle.getDataset();
886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        //int seriesIndex = bundle.getSeriesIndex();
896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        PointF thisPoint;
906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        for (int i = 0; i < series.size(); i++) {
916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            Number y = series.getY(i);
926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            Number x = series.getD(i);
936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            if (y != null && x != null) {
956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                thisPoint = ValPixConverter.valToPix(
976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        x,
986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        y,
996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        plotArea,
1006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        getPlot().getCalculatedMinX(),
1016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        getPlot().getCalculatedMaxX(),
1026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        getPlot().getCalculatedMinY(),
1036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        getPlot().getCalculatedMaxY());
1046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                //float pixX = ValPixConverter.valToPix(x.doubleValue(), getPlot().getCalculatedMinX().doubleValue(), getPlot().getCalculatedMaxX().doubleValue(), plotArea.width(), false) + (plotArea.left);
1056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                //float pixY = ValPixConverter.valToPix(y.doubleValue(), getPlot().getCalculatedMinY().doubleValue(), getPlot().getCalculatedMaxY().doubleValue(), plotArea.height(), true) + plotArea.top;
1066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                //thisPoint = new PointF(pixX, pixY);
1086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            } else {
1096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                thisPoint = null;
1106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            }
1116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            drawPoint(canvas, thisPoint, plotArea, formatter);
1126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
1136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        endSeries(canvas, plotArea, formatter);
1146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private void beginSeries(Canvas canvas, RectF plotArea, StepFormatter format) throws PlotRenderException {
1176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        lastPoint = null;
1186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private void drawPoint(Canvas canvas, PointF point, RectF plotArea, StepFormatter format) throws PlotRenderException {
1216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        if (lastPoint != null) {
1226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            if (point != null) {
1236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                switch(stepAxis) {
1256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                    case DOMAIN:
1266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        // first draw the horizontal line:
1276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        canvas.drawLine(lastPoint.x, lastPoint.y, point.x, lastPoint.y, format.getLinePaint());
1286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        canvas.drawPoint(point.x, lastPoint.y, format.getVertexPaint());
1296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        // next the vertical:
1306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        canvas.drawLine(point.x, lastPoint.y, point.x, point.y, format.getLinePaint());
1316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        break;
1326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                    case RANGE:
1336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        break;
1346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                }
1356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                //doDrawLine(canvas, lastPoint, point, plotArea, format);
1366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            }
1396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            drawLastPoint(canvas, plotArea, format);
1406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
1416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        lastPoint = point;
1436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private void endSeries(Canvas canvas, RectF plotArea, StepFormatter format) throws PlotRenderException {
1466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        if(lastPoint != null) {
1476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            drawLastPoint(canvas, plotArea, format);
1486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
1496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    protected void drawLastPoint(Canvas canvas, RectF plotArea, StepFormatter format) throws PlotRenderException {
1526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        canvas.drawPoint(lastPoint.x, lastPoint.y, format.getVertexPaint());
1536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public XYAxisType getStepAxis() {
1576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        return stepAxis;
1586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void setStepAxis(XYAxisType stepAxis) {
1616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        this.stepAxis = stepAxis;
1626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala}
1646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala*/
165