Add a delay to motor
authorBill Kuker <bkuker@billkuker.com>
Sun, 22 Jan 2012 02:21:45 +0000 (02:21 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sun, 22 Jan 2012 02:21:45 +0000 (02:21 +0000)
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java
src/com/billkuker/rocketry/motorsim/Motor.java
src/com/billkuker/rocketry/motorsim/io/ENGExporter.java

index 65febeb0bea93238b6be7df1b7f28de69ef8b205..9264cf209fcadcda0113524b08c2ac9c116b63c8 100644 (file)
@@ -16,6 +16,7 @@ import java.net.URI;
 import java.util.List;\r
 import java.util.Vector;\r
 \r
+import javax.measure.quantity.Duration;\r
 import javax.measure.unit.SI;\r
 import javax.swing.Box;\r
 import javax.swing.BoxLayout;\r
@@ -412,6 +413,46 @@ public class MotorEditor extends JPanel implements PropertyChangeListener, FuelR
                        });\r
                        \r
                        \r
+                       \r
+                       \r
+                       l = new JLabel("Delay:");\r
+                       l.setAlignmentX(LEFT_ALIGNMENT);\r
+                       nameAndFuel.add(l);\r
+                       nameAndFuel.add(new JTextField(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND))) {\r
+                               private static final long serialVersionUID = 1L;\r
+                               {\r
+                                       setAlignmentX(LEFT_ALIGNMENT);\r
+                                       setMinimumSize(new Dimension(200, 20));\r
+                                       setMaximumSize(new Dimension(Short.MAX_VALUE, 20));\r
+                                       final JTextField t = this;\r
+                                       addFocusListener(new FocusListener() {\r
+\r
+                                               @Override\r
+                                               public void focusLost(FocusEvent e) {\r
+                                                       try {\r
+                                                               String n = t.getText();\r
+                                                               double d = Double.parseDouble(n);\r
+                                                               Amount<Duration> delay = Amount.valueOf(d, SI.SECOND);\r
+                                                               if ( delay != motor.getEjectionDelay() ){\r
+                                                                       motor.setEjectionDelay(delay);\r
+                                                               }\r
+                                                       } catch ( Exception ex ){\r
+                                                               log.warn(e);\r
+                                                               setText(Double.toString(motor.getEjectionDelay().doubleValue(SI.SECOND)));\r
+                                                       }\r
+                                               }\r
+\r
+                                               @Override\r
+                                               public void focusGained(FocusEvent e) {\r
+\r
+                                               }\r
+                                       });\r
+\r
+                               }\r
+                       });\r
+                       \r
+                       \r
+                       \r
                        nameAndFuel.add(Box.createVerticalGlue());\r
                        parts.add(nameAndFuel);\r
                        \r
index 11872a6e0f0602229e925d9d6bfb5709b3689892..817b9da6c3ccbeff5aaaa1f2736080b7ce77b963 100644 (file)
@@ -1,5 +1,6 @@
 package com.billkuker.rocketry.motorsim;\r
 \r
+import javax.measure.quantity.Duration;\r
 import javax.measure.unit.SI;\r
 \r
 import org.jscience.physics.amount.Amount;\r
@@ -10,6 +11,7 @@ public class Motor implements Validating{
        private Nozzle nozzle;\r
        private Fuel fuel;\r
        private String name;\r
+       private Amount<Duration> ejectionDelay = Amount.valueOf(5, SI.SECOND);\r
        \r
        public void validate() throws ValidationException {\r
                if ( chamber.chamberVolume().isLessThan(grain.volume(Amount.valueOf(0, SI.MILLIMETER)))){\r
@@ -64,4 +66,12 @@ public class Motor implements Validating{
        public void setName(String name) {\r
                this.name = name;\r
        }\r
+\r
+       public Amount<Duration> getEjectionDelay() {\r
+               return ejectionDelay;\r
+       }\r
+\r
+       public void setEjectionDelay(Amount<Duration> ejectionDelay) {\r
+               this.ejectionDelay = ejectionDelay;\r
+       }\r
 }\r
index ce3250057faf2e2acf2b1883b36bb0108d5dca2a..bd59bc93728804e8297937878bfae5574bcb3df7 100644 (file)
@@ -52,8 +52,11 @@ public class ENGExporter {
                                                b.getMotor().getFuel().getDensityRatio())).to(
                                SI.KILOGRAM);
                double wt = prop.doubleValue(SI.KILOGRAM);
+               
+               double delay = b.getMotor().getEjectionDelay().doubleValue(SI.SECOND);
+               String delayString = Integer.toString((int)delay);
 
-               out.append(nf.format(dia) + " " + nf.format(len) + " 0-0-0 "
+               out.append(nf.format(dia) + " " + nf.format(len) + " " + delayString + "-0-0 "
                                + nf.format(wt) + " " + nf.format(wt + 0.1) + " MF\n");
 
                GraphSimplifier<Duration, Force> gs = null;