moved approx function to RocketScience.
authorBill Kuker <bkuker@billkuker.com>
Sun, 24 Oct 2010 18:07:53 +0000 (18:07 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sun, 24 Oct 2010 18:07:53 +0000 (18:07 +0000)
Made progress panel show % and regression

src/com/billkuker/rocketry/motorsim/RocketScience.java
src/com/billkuker/rocketry/motorsim/visual/BurnPanel.java
src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java

index c17f47100b5da744aa11a7d2c6d589ba6c3101cb..de6ceaf9000e61528efc1373c767071415f36a24 100644 (file)
@@ -1,5 +1,6 @@
 package com.billkuker.rocketry.motorsim;\r
 \r
+import java.text.DecimalFormat;\r
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
@@ -11,6 +12,8 @@ import javax.measure.unit.SI;
 import javax.measure.unit.Unit;\r
 import javax.measure.unit.UnitFormat;\r
 \r
+import org.jscience.physics.amount.Amount;\r
+\r
 public class RocketScience {\r
        public static Unit<Pressure> PSI = new ProductUnit<Pressure>(NonSI.POUND_FORCE.divide(NonSI.INCH.pow(2)));\r
        public static Unit<Impulse> NEWTON_SECOND = new ProductUnit<Impulse>(SI.NEWTON.times(SI.SECOND));\r
@@ -67,4 +70,22 @@ public class RocketScience {
                }\r
        }\r
 \r
+       @SuppressWarnings("unchecked")\r
+       public static <T extends Quantity> String approx(Amount<T> a) {\r
+               Unit<T> u = RocketScience.UnitPreference.preference.getPreferredUnit(a\r
+                               .getUnit());\r
+               double d = a.doubleValue(u);\r
+\r
+               DecimalFormat df;\r
+               if (Math.abs(d) < 10.0) {\r
+                       df = new DecimalFormat("#.##");\r
+               } else if (Math.abs(d) < 10.0) {\r
+                       df = new DecimalFormat("#.#");\r
+               } else {\r
+                       df = new DecimalFormat("#");\r
+               }\r
+\r
+               return df.format(d) + " " + u.toString();\r
+       }\r
+\r
 }\r
index 8158dd9a6ae470cb4991dc335962b81dc210c92d..a42aaa1ae947ab6e74f3762c962a8404d0159e52 100644 (file)
@@ -10,7 +10,6 @@ import javax.measure.quantity.Force;
 import javax.measure.quantity.Pressure;\r
 import javax.measure.quantity.Velocity;\r
 import javax.measure.unit.SI;\r
-import javax.measure.unit.Unit;\r
 import javax.swing.JFrame;\r
 import javax.swing.JLabel;\r
 import javax.swing.JPanel;\r
@@ -140,11 +139,11 @@ public class BurnPanel extends JPanel {
                        text.add(new JLabel("Max Pressure"));\r
                        \r
                        text.add(new JLabel(percent + "% " + new String(new char[]{cl}) + "-" +Math.round(averageThrust.doubleValue(SI.NEWTON))));\r
-                       text.add(new JLabel(approx(ns)));\r
-                       text.add(new JLabel(approx(isp)));                      \r
-                       text.add(new JLabel(approx(maxThrust)));\r
-                       text.add(new JLabel(approx(averageThrust)));\r
-                       text.add(new JLabel(approx(maxPressure)));\r
+                       text.add(new JLabel(RocketScience.approx(ns)));\r
+                       text.add(new JLabel(RocketScience.approx(isp)));                        \r
+                       text.add(new JLabel(RocketScience.approx(maxThrust)));\r
+                       text.add(new JLabel(RocketScience.approx(averageThrust)));\r
+                       text.add(new JLabel(RocketScience.approx(maxPressure)));\r
                        \r
                        add(text, BorderLayout.NORTH);\r
                        \r
@@ -156,14 +155,6 @@ public class BurnPanel extends JPanel {
 \r
        }\r
        \r
-       @SuppressWarnings("unchecked")\r
-       private String approx(Amount a){\r
-               Unit u = RocketScience.UnitPreference.preference.getPreferredUnit(a.getUnit());\r
-               double d = a.doubleValue(u);\r
-               long i = Math.round(d);\r
-               return i + " " + u.toString();\r
-       }\r
-       \r
        private class SL extends JSlider implements ChangeListener{\r
                private static final long serialVersionUID = 1L;\r
                private static final int STEPS = 80;\r
index 42769bc0c5f64bac61791313d9fb47d13c37500c..3ce6b11bc3cfa2ed9683edd6391b27ea9934a684 100644 (file)
@@ -13,6 +13,7 @@ import java.util.HashMap;
 import java.util.Map;\r
 import java.util.Vector;\r
 \r
+import javax.measure.quantity.Length;\r
 import javax.measure.unit.SI;\r
 import javax.swing.BoxLayout;\r
 import javax.swing.ComboBoxModel;\r
@@ -44,6 +45,7 @@ import com.billkuker.rocketry.motorsim.Fuel;
 import com.billkuker.rocketry.motorsim.Grain;\r
 import com.billkuker.rocketry.motorsim.Motor;\r
 import com.billkuker.rocketry.motorsim.Nozzle;\r
+import com.billkuker.rocketry.motorsim.RocketScience;\r
 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
 import com.billkuker.rocketry.motorsim.grain.CSlot;\r
 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
@@ -136,12 +138,19 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
                                        final Thread me = this;\r
                                        final JProgressBar bar = new JProgressBar(0, 100);\r
                                        add(bar, BorderLayout.NORTH);\r
+                                       final JLabel progress = new JLabel();\r
+                                       add(progress, BorderLayout.CENTER);\r
                                        try {\r
                                                final Burn b = new Burn(motor,\r
                                                                new Burn.BurnProgressListener() {\r
                                                                        @Override\r
                                                                        public void setProgress(float f) {\r
-                                                                               bar.setValue((int) (f * 100));\r
+                                                                               int pct = (int)(f*100);\r
+                                                                               bar.setValue(pct);\r
+                                                                               Amount<Length> web = motor.getGrain().webThickness();\r
+                                                                               Amount<Length> remaining = web.times(1.0 - f);\r
+                                                                               \r
+                                                                               progress.setText("Progress: " + pct + "% (" + RocketScience.approx(remaining) + " web thickness remaining)");\r
                                                                                if ( currentThread != me ){\r
                                                                                        throw new BurnCanceled();\r
                                                                                }\r