From 8e989942d86627a7382ed65381870148905b0a2b Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Tue, 24 Jan 2012 15:33:59 +0000 Subject: [PATCH] Did the bits I needed so you can open a rocket AFTER you open motors and it still works. --- .../visual/openRocket/OneMotorDatabase.java | 2 + .../visual/openRocket/RocketSimTable.java | 54 ++++++++++++------- .../motorsim/visual/openRocket/Test.java | 6 ++- 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java index 0c6a69f..cdd31d6 100644 --- a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java +++ b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/OneMotorDatabase.java @@ -30,6 +30,8 @@ public class OneMotorDatabase implements MotorDatabase { static Coordinate cg[]; static double[] time; static double[] thrust; + + static Object lock = new Object(); static Motor motor = new Motor() { diff --git a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java index b267a46..445991c 100644 --- a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java +++ b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/RocketSimTable.java @@ -6,8 +6,10 @@ import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.Vector; import javax.measure.unit.SI; @@ -68,7 +70,6 @@ public class RocketSimTable extends JPanel implements BurnWatcher, Burn b; } - List entries = new Vector(); class TM extends AbstractTableModel { private static final long serialVersionUID = 1L; @@ -144,6 +145,8 @@ public class RocketSimTable extends JPanel implements BurnWatcher, private TM tm = new TM(); private JTable table = new JTable(tm); private OpenRocketDocument doc; + List entries = new Vector(); + Set burns = new HashSet(); public RocketSimTable() { setLayout(new BorderLayout()); @@ -200,32 +203,44 @@ public class RocketSimTable extends JPanel implements BurnWatcher, JLabel name = new JLabel("File: " + f.getAbsolutePath()); rocketInfo.add(name); add(rocketInfo, BorderLayout.NORTH); + + entries = new Vector(); + for ( Burn b : burns ){ + entries.add(toEntry(b)); + } + tm.fireTableDataChanged(); revalidate(); } - private Entry toEntry(Burn b) { + private Entry toEntry(final Burn b) { final Entry e = new Entry(b.getMotor(), doc.getSimulation(0).copy(), b); - OneMotorDatabase.setBurn(b); - - e.s.getConfiguration().getMotorConfigurationID(); - Iterator iterator = doc.getRocket().iterator(); - while (iterator.hasNext()) { - RocketComponent c = iterator.next(); - if (c instanceof MotorMount) { - ((MotorMount) c).setMotorDelay(e.s.getConfiguration() - .getMotorConfigurationID(), b.getMotor() - .getEjectionDelay().doubleValue(SI.SECOND)); - } - } - tm.fireTableDataChanged(); new Thread() { @Override public void run() { try { - e.s.simulate(); - e.ready = true; - tm.fireTableDataChanged(); + synchronized (OneMotorDatabase.lock) { + + OneMotorDatabase.setBurn(b); + + e.s.getConfiguration().getMotorConfigurationID(); + Iterator iterator = doc.getRocket() + .iterator(); + while (iterator.hasNext()) { + RocketComponent c = iterator.next(); + if (c instanceof MotorMount) { + ((MotorMount) c).setMotorDelay(e.s + .getConfiguration() + .getMotorConfigurationID(), b + .getMotor().getEjectionDelay() + .doubleValue(SI.SECOND)); + } + } + + e.s.simulate(); + e.ready = true; + tm.fireTableDataChanged(); + } } catch (SimulationException e1) { e1.printStackTrace(); } @@ -238,6 +253,9 @@ public class RocketSimTable extends JPanel implements BurnWatcher, @Override public void replace(Burn oldBurn, Burn newBurn) { + burns.add(newBurn); + burns.remove(oldBurn); + if (doc == null) { return; // TODO, deal with changing rockets } diff --git a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java index e4fb4f3..a1a2d19 100644 --- a/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java +++ b/gpl/com/billkuker/rocketry/motorsim/visual/openRocket/Test.java @@ -25,7 +25,7 @@ public class Test { frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); RocketSimTable st = new RocketSimTable(); - st.openRocket(new File("simple.ork")); + com.billkuker.rocketry.motorsim.Motor m = new PVC9(); m.setEjectionDelay(Amount.valueOf(1, SI.SECOND)); @@ -33,8 +33,12 @@ public class Test { b.burn(); st.replace(null, b); + st.openRocket(new File("simple.ork")); + frame.setContentPane(st); frame.setVisible(true); + + } -- 2.30.2