+++ /dev/null
-package com.billkuker.rocketry.motorsim.visual.openRocket;\r
-\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.io.File;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Vector;\r
-\r
-import javax.measure.unit.SI;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JTable;\r
-import javax.swing.SwingUtilities;\r
-import javax.swing.table.AbstractTableModel;\r
-\r
-import net.sf.openrocket.document.OpenRocketDocument;\r
-import net.sf.openrocket.document.Simulation;\r
-import net.sf.openrocket.file.RocketLoadException;\r
-import net.sf.openrocket.file.openrocket.OpenRocketLoader;\r
-import net.sf.openrocket.gui.plot.PlotConfiguration;\r
-import net.sf.openrocket.gui.plot.SimulationPlotDialog;\r
-import net.sf.openrocket.gui.util.SwingPreferences;\r
-import net.sf.openrocket.l10n.ResourceBundleTranslator;\r
-import net.sf.openrocket.rocketcomponent.MotorMount;\r
-import net.sf.openrocket.rocketcomponent.RocketComponent;\r
-import net.sf.openrocket.simulation.exception.SimulationException;\r
-import net.sf.openrocket.startup.Application;\r
-import net.sf.openrocket.unit.UnitGroup;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-\r
-import com.billkuker.rocketry.motorsim.Burn;\r
-import com.billkuker.rocketry.motorsim.Motor;\r
-import com.billkuker.rocketry.motorsim.RocketScience;\r
-import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
-import com.billkuker.rocketry.motorsim.visual.workbench.BurnWatcher;\r
-\r
-public class RocketSimTable extends JScrollPane implements BurnWatcher,\r
- RocketScience.UnitPreferenceListener {\r
- static final long serialVersionUID = 1L;\r
-\r
- static {\r
- Application.setBaseTranslator(new ResourceBundleTranslator(\r
- "l10n.messages"));\r
- Application.setMotorSetDatabase(new OneMotorDatabase());\r
- Application.setPreferences(new SwingPreferences());\r
-\r
- }\r
-\r
- class Entry {\r
- Entry(Motor m, Simulation s, Burn b) {\r
- this.m = m;\r
- this.s = s;\r
- this.b = b;\r
- }\r
-\r
- boolean ready = false;\r
- Simulation s;\r
- Motor m;\r
- Burn b;\r
- }\r
-\r
- List<Entry> entries = new Vector<Entry>();\r
-\r
- class TM extends AbstractTableModel {\r
- private static final long serialVersionUID = 1L;\r
-\r
- @Override\r
- public String getColumnName(int col) {\r
- switch (col) {\r
- case 0:\r
- return "Motor";\r
- case 1:\r
- return "Apogee";\r
- case 2:\r
- return "Vmax";\r
- case 3:\r
- return "Vdeploy";\r
- case 4:\r
- return "Vground";\r
- case 5:\r
- return "Tapogee";\r
- case 6:\r
- return "Tflight";\r
- }\r
- return "??";\r
- }\r
-\r
- @Override\r
- public int getColumnCount() {\r
- return 7;\r
- }\r
-\r
- @Override\r
- public int getRowCount() {\r
- return entries.size();\r
- }\r
-\r
- @Override\r
- public Object getValueAt(int row, int col) {\r
- Entry e = entries.get(row);\r
- if (e == null)\r
- return "???";\r
- if (e.ready == false)\r
- return "...";\r
- switch (col) {\r
- case 0:\r
- return e.m.getName();\r
- case 1:\r
- return RocketScience.ammountToRoundedString(Amount.valueOf(e.s\r
- .getSimulatedData().getMaxAltitude(), SI.METER));\r
- case 2:\r
- return RocketScience.ammountToRoundedString(Amount.valueOf(e.s\r
- .getSimulatedData().getMaxVelocity(),\r
- SI.METERS_PER_SECOND));\r
- case 3:\r
- return RocketScience.ammountToRoundedString(Amount.valueOf(e.s\r
- .getSimulatedData().getDeploymentVelocity(),\r
- SI.METERS_PER_SECOND));\r
- case 4:\r
- return RocketScience.ammountToRoundedString(Amount.valueOf(e.s\r
- .getSimulatedData().getGroundHitVelocity(),\r
- SI.METERS_PER_SECOND));\r
- case 5:\r
- return RocketScience.ammountToRoundedString(Amount.valueOf(e.s\r
- .getSimulatedData().getTimeToApogee(), SI.SECOND));\r
- case 6:\r
- return RocketScience.ammountToRoundedString(Amount.valueOf(e.s\r
- .getSimulatedData().getFlightTime(), SI.SECOND));\r
- }\r
- return "??";\r
- }\r
-\r
- }\r
-\r
- private TM tm = new TM();\r
- private JTable table = new JTable(tm);\r
- private OpenRocketDocument doc;\r
-\r
- public RocketSimTable() {\r
- setViewportView(table);\r
- RocketScience.addUnitPreferenceListener(this);\r
- table.addMouseListener(new MouseAdapter() {\r
- public void mouseClicked(MouseEvent e) {\r
- if (e.getClickCount() == 2) {\r
- Entry entry = entries.get(table.getSelectedRow());\r
- SimulationPlotDialog.showPlot(SwingUtilities\r
- .getWindowAncestor(RocketSimTable.this), entry.s,\r
- PlotConfiguration.DEFAULT_CONFIGURATIONS[0]\r
- .resetUnits());\r
- }\r
- }\r
- });\r
- preferredUnitsChanged();\r
- }\r
-\r
- public void openRocket(File f) throws RocketLoadException {\r
- this.doc = new OpenRocketLoader().load(f);\r
- }\r
-\r
- private Entry toEntry(Burn b) {\r
- final Entry e = new Entry(b.getMotor(), doc.getSimulation(0).copy(), b);\r
- OneMotorDatabase.setBurn(b);\r
-\r
- e.s.getConfiguration().getMotorConfigurationID();\r
- Iterator<RocketComponent> iterator = doc.getRocket().iterator();\r
- while (iterator.hasNext()) {\r
- RocketComponent c = iterator.next();\r
- if (c instanceof MotorMount) {\r
- ((MotorMount) c).setMotorDelay(e.s.getConfiguration()\r
- .getMotorConfigurationID(), b.getMotor()\r
- .getEjectionDelay().doubleValue(SI.SECOND));\r
- }\r
- }\r
-\r
- tm.fireTableDataChanged();\r
- new Thread() {\r
- @Override\r
- public void run() {\r
- try {\r
- e.s.simulate();\r
- e.ready = true;\r
- tm.fireTableDataChanged();\r
- } catch (SimulationException e1) {\r
- e1.printStackTrace();\r
- }\r
-\r
- }\r
- }.start();\r
-\r
- return e;\r
- }\r
-\r
- @Override\r
- public void replace(Burn oldBurn, Burn newBurn) {\r
- if (doc == null) {\r
- return; // TODO, deal with changing rockets\r
- }\r
-\r
- if (oldBurn != null) {\r
- for (int i = 0; i < entries.size(); i++) {\r
- if (entries.get(i).b == oldBurn) {\r
- if (newBurn != null) {\r
- entries.set(i, toEntry(newBurn));\r
- } else {\r
- entries.remove(i);\r
- }\r
- break;\r
- }\r
- }\r
- } else {\r
- entries.add(toEntry(newBurn));\r
- }\r
- tm.fireTableDataChanged();\r
- }\r
-\r
- @Override\r
- public void preferredUnitsChanged() {\r
- tm.fireTableDataChanged();\r
- if (UnitPreference.getUnitPreference() == UnitPreference.NONSI) {\r
- System.err.println("NONSI");\r
- UnitGroup.setDefaultImperialUnits();\r
- } else {\r
- System.err.println("SI");\r
- UnitGroup.setDefaultMetricUnits();\r
- }\r
- }\r
-}\r