1 package com.billkuker.rocketry.motorsim.visual.workbench;
3 import java.awt.BorderLayout;
4 import java.util.HashMap;
6 import javax.measure.quantity.Duration;
7 import javax.measure.quantity.Pressure;
8 import javax.measure.unit.SI;
9 import javax.measure.unit.Unit;
10 import javax.swing.JPanel;
12 import org.jfree.chart.ChartFactory;
13 import org.jfree.chart.ChartPanel;
14 import org.jfree.chart.JFreeChart;
15 import org.jfree.chart.plot.PlotOrientation;
16 import org.jfree.data.xy.XYSeries;
17 import org.jfree.data.xy.XYSeriesCollection;
19 import com.billkuker.rocketry.motorsim.Burn;
20 import com.billkuker.rocketry.motorsim.RocketScience;
22 public class MultiMotorPressureChart extends JPanel implements BurnWatcher {
23 private static final long serialVersionUID = 1L;
25 private XYSeriesCollection dataset = new XYSeriesCollection();
27 private HashMap<Burn, XYSeries> burnToSeries = new HashMap<Burn, XYSeries>();
28 private Unit<Duration> time;
29 private Unit<Pressure> pressureUnit;
31 public MultiMotorPressureChart() {
32 this.setLayout(new BorderLayout());
33 time = RocketScience.UnitPreference.getUnitPreference()
34 .getPreferredUnit(SI.SECOND);
35 pressureUnit = RocketScience.UnitPreference.getUnitPreference()
36 .getPreferredUnit(SI.PASCAL);
37 JFreeChart chart = ChartFactory.createXYLineChart(
39 "Time (" + time.toString() + ")", // x-axis Label
40 "Pressure (" + pressureUnit.toString() + ")", // y-axis Label
41 dataset, PlotOrientation.VERTICAL, // Plot Orientation
43 true, // Use tool tips
44 false // Configure chart to generate URLs?
46 add(new ChartPanel(chart));
49 public void addBurn(Burn b) {
50 XYSeries s = createSeries(b);
51 burnToSeries.put(b, s);
55 private XYSeries createSeries(Burn b) {
56 XYSeries s = new XYSeries(b.getMotor().getName());
57 for( Burn.Interval i : b.getData().values() ){
58 s.add(i.time.doubleValue(time), i.chamberPressure.doubleValue(pressureUnit));
63 public void removeBurn(Burn b) {
64 XYSeries s = burnToSeries.get(b);
67 dataset.removeSeries(s);
71 public void replace(Burn oldBurn, Burn newBurn) {