From f9a2c2e1c17e4aeea0c7f4e816c2bbcd52dd43be Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Mon, 22 Nov 2010 14:09:55 +0000 Subject: [PATCH] Add all pressure graph --- .../visual/workbench/MotorEditor.java | 3 +- .../visual/workbench/MotorsEditor.java | 6 +- .../workbench/MultiMotorPressureChart.java | 75 +++++++++++++++++++ 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorPressureChart.java diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index 6224d6a..0047fcf 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -469,9 +469,10 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR tabs.add(bt = new BurnTab(), BURN_TAB); } + private static int idx; public static Motor defaultMotor() { Motor m = new Motor(); - m.setName("Example Motor"); + m.setName("New Motor " + ++idx); try { m.setFuel(FuelResolver.getFuel(new URI("motorsim:KNDX"))); } catch (Exception e) { diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java index b94aa08..05d9475 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java @@ -24,11 +24,13 @@ public class MotorsEditor extends MultiObjectEditor { private static final long serialVersionUID = 1L; MultiMotorThrustChart mbc = new MultiMotorThrustChart(); + MultiMotorPressureChart mpc = new MultiMotorPressureChart(); public MotorsEditor(JFrame f) { super(f, "Motor"); - addTab("Thrust Graphs", mbc); + addTab("All Thrust", mbc); + addTab("All Pressure", mpc); addCreator(new ObjectCreator() { @Override @@ -46,11 +48,13 @@ public class MotorsEditor extends MultiObjectEditor { @Override protected void objectAdded(Motor m, MotorEditor e){ e.addBurnWatcher(mbc); + e.addBurnWatcher(mpc); } @Override protected void objectRemoved(Motor m, MotorEditor e){ mbc.removeBurn(e.burn); + mpc.removeBurn(e.burn); } @Override diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorPressureChart.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorPressureChart.java new file mode 100644 index 0000000..874518f --- /dev/null +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorPressureChart.java @@ -0,0 +1,75 @@ +package com.billkuker.rocketry.motorsim.visual.workbench; + +import java.awt.BorderLayout; +import java.util.HashMap; + +import javax.measure.quantity.Duration; +import javax.measure.quantity.Pressure; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; +import javax.swing.JPanel; + +import org.jfree.chart.ChartFactory; +import org.jfree.chart.ChartPanel; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; + +import com.billkuker.rocketry.motorsim.Burn; +import com.billkuker.rocketry.motorsim.RocketScience; + +public class MultiMotorPressureChart extends JPanel implements BurnWatcher { + private static final long serialVersionUID = 1L; + + private XYSeriesCollection dataset = new XYSeriesCollection(); + + private HashMap burnToSeries = new HashMap(); + private Unit time; + private Unit pressureUnit; + + public MultiMotorPressureChart() { + this.setLayout(new BorderLayout()); + time = RocketScience.UnitPreference.getUnitPreference() + .getPreferredUnit(SI.SECOND); + pressureUnit = RocketScience.UnitPreference.getUnitPreference() + .getPreferredUnit(SI.PASCAL); + JFreeChart chart = ChartFactory.createXYLineChart( + "", // Title + "Time (" + time.toString() + ")", // x-axis Label + "Pressure (" + pressureUnit.toString() + ")", // y-axis Label + dataset, PlotOrientation.VERTICAL, // Plot Orientation + true, // Show Legend + true, // Use tool tips + false // Configure chart to generate URLs? + ); + add(new ChartPanel(chart)); + } + + public void addBurn(Burn b) { + XYSeries s = createSeries(b); + burnToSeries.put(b, s); + dataset.addSeries(s); + } + + private XYSeries createSeries(Burn b) { + XYSeries s = new XYSeries(b.getMotor().getName()); + for( Burn.Interval i : b.getData().values() ){ + s.add(i.time.doubleValue(time), i.chamberPressure.doubleValue(pressureUnit)); + } + return s; + } + + public void removeBurn(Burn b) { + XYSeries s = burnToSeries.get(b); + if (s == null) + return; + dataset.removeSeries(s); + } + + @Override + public void replace(Burn oldBurn, Burn newBurn) { + removeBurn(oldBurn); + addBurn(newBurn); + } +} -- 2.30.2