diff options
Diffstat (limited to 'micropeak/MicroGraph.java')
-rw-r--r-- | micropeak/MicroGraph.java | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/micropeak/MicroGraph.java b/micropeak/MicroGraph.java new file mode 100644 index 00000000..aac14b9a --- /dev/null +++ b/micropeak/MicroGraph.java @@ -0,0 +1,105 @@ +/* + * Copyright © 2012 Keith Packard <keithp@keithp.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.micropeak; + +import java.io.*; +import java.util.ArrayList; + +import java.awt.*; +import javax.swing.*; +import org.altusmetrum.AltosLib.*; + +import org.jfree.ui.*; +import org.jfree.chart.*; +import org.jfree.chart.plot.*; +import org.jfree.chart.axis.*; +import org.jfree.chart.renderer.*; +import org.jfree.chart.renderer.xy.*; +import org.jfree.chart.labels.*; +import org.jfree.data.xy.*; +import org.jfree.data.*; + +public class MicroGraph { + + XYPlot plot; + JFreeChart chart; + ChartPanel panel; + NumberAxis xAxis; + XYSeries heightSeries; + XYSeries speedSeries; + XYSeries accelSeries; + + MicroData data; + + public JPanel panel() { + return panel; + } + + private void addSeries(XYSeries series, int index, String label, String units) { + XYSeriesCollection dataset = new XYSeriesCollection(series); + NumberAxis axis = new NumberAxis(String.format("%s (%s)", label, units)); + XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false); + + renderer.setPlot(plot); + renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator(String.format("{1}s: {2}%s ({0})", units), + new java.text.DecimalFormat("0.00"), + new java.text.DecimalFormat("0.00"))); + plot.setRangeAxis(index, axis); + plot.setDataset(index, dataset); + plot.setRenderer(index, renderer); + plot.mapDatasetToRangeAxis(index, index); + } + + public MicroGraph(MicroData data) { + + this.data = data; + + heightSeries = new XYSeries("Height"); + speedSeries = new XYSeries("Speed"); + accelSeries = new XYSeries("Acceleration"); + + for (int i = 0; i < data.pressures.length; i++) { + double x = data.time(i); + heightSeries.add(x, data.height(i)); + speedSeries.add(x, data.speed(i)); + accelSeries.add(x, data.acceleration(i)); + } + + xAxis = new NumberAxis("Time (s)"); + + xAxis.setAutoRangeIncludesZero(true); + + plot = new XYPlot(); + plot.setDomainAxis(xAxis); + plot.setOrientation(PlotOrientation.VERTICAL); + plot.setDomainPannable(true); + plot.setRangePannable(true); + + addSeries(heightSeries, 0, "Height", "m"); + addSeries(speedSeries, 1, "Speed", "m/s"); + addSeries(accelSeries, 2, "Acceleration", "m/s²"); + + chart = new JFreeChart("Flight", JFreeChart.DEFAULT_TITLE_FONT, + plot, true); + + ChartUtilities.applyCurrentTheme(chart); + panel = new ChartPanel(chart); + panel.setMouseWheelEnabled(true); + panel.setPreferredSize(new java.awt.Dimension(800, 500)); + } +}
\ No newline at end of file |