Add all pressure graph
authorBill Kuker <bkuker@billkuker.com>
Mon, 22 Nov 2010 14:09:55 +0000 (14:09 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 22 Nov 2010 14:09:55 +0000 (14:09 +0000)
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorsEditor.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MultiMotorPressureChart.java [new file with mode: 0644]

index 6224d6a2f4d4975ce771fb72014f9c5001be5040..0047fcfbc85d77b0a62315e9cbb734b2fb1b173e 100644 (file)
@@ -469,9 +469,10 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                tabs.add(bt = new BurnTab(), BURN_TAB);\r
        }\r
 \r
+       private static int idx;\r
        public static Motor defaultMotor() {\r
                Motor m = new Motor();\r
-               m.setName("Example Motor");\r
+               m.setName("New Motor " + ++idx);\r
                try {\r
                        m.setFuel(FuelResolver.getFuel(new URI("motorsim:KNDX")));\r
                } catch (Exception e) {\r
index b94aa082d191392fb3b7b1a0fd751be76714d1ab..05d947585d1248401f5081bec7ddd9cfb08c60a9 100644 (file)
@@ -24,11 +24,13 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
        private static final long serialVersionUID = 1L;\r
        \r
        MultiMotorThrustChart mbc = new MultiMotorThrustChart();\r
+       MultiMotorPressureChart mpc = new MultiMotorPressureChart();\r
 \r
        public MotorsEditor(JFrame f) {\r
                super(f, "Motor");\r
                \r
-               addTab("Thrust Graphs", mbc);\r
+               addTab("All Thrust", mbc);\r
+               addTab("All Pressure", mpc);\r
                \r
                addCreator(new ObjectCreator() {\r
                        @Override\r
@@ -46,11 +48,13 @@ public class MotorsEditor extends MultiObjectEditor<Motor, MotorEditor> {
        @Override\r
        protected void objectAdded(Motor m, MotorEditor e){\r
                e.addBurnWatcher(mbc);\r
+               e.addBurnWatcher(mpc);\r
        }\r
        \r
        @Override\r
        protected void objectRemoved(Motor m, MotorEditor e){\r
                mbc.removeBurn(e.burn);\r
+               mpc.removeBurn(e.burn);\r
        }\r
 \r
        @Override\r
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 (file)
index 0000000..874518f
--- /dev/null
@@ -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<Burn, XYSeries> burnToSeries = new HashMap<Burn, XYSeries>();
+       private Unit<Duration> time;
+       private Unit<Pressure> 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);
+       }
+}