Added EndBurner with Punt
authorBill Kuker <bkuker@billkuker.com>
Sat, 1 May 2010 13:29:20 +0000 (13:29 +0000)
committerBill Kuker <bkuker@billkuker.com>
Sat, 1 May 2010 13:29:20 +0000 (13:29 +0000)
src/com/billkuker/rocketry/motorsim/grain/EndBurner.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/grain/util/RotatedShapeGrain.java
src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java

diff --git a/src/com/billkuker/rocketry/motorsim/grain/EndBurner.java b/src/com/billkuker/rocketry/motorsim/grain/EndBurner.java
new file mode 100644 (file)
index 0000000..70775e0
--- /dev/null
@@ -0,0 +1,90 @@
+package com.billkuker.rocketry.motorsim.grain;
+
+import java.awt.geom.Rectangle2D;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.measure.quantity.Length;
+import javax.measure.unit.SI;
+
+import org.jscience.physics.amount.Amount;
+
+import com.billkuker.rocketry.motorsim.Validating;
+import com.billkuker.rocketry.motorsim.grain.util.BurningShape;
+import com.billkuker.rocketry.motorsim.grain.util.RotatedShapeGrain;
+
+public class EndBurner extends RotatedShapeGrain implements Validating {
+
+       private Amount<Length> length = Amount.valueOf(70, SI.MILLIMETER);
+       private Amount<Length> oD = Amount.valueOf(30, SI.MILLIMETER);
+       private Amount<Length> puntDiameter = Amount.valueOf(10, SI.MILLIMETER);
+       private Amount<Length> puntDepth = Amount.valueOf(10, SI.MILLIMETER);
+       
+       private void generateGeometry(){
+               double len = length.doubleValue(SI.MILLIMETER);
+               double od = oD.doubleValue(SI.MILLIMETER);
+               double pdi = puntDiameter.doubleValue(SI.MILLIMETER);
+               double plen = puntDepth.doubleValue(SI.MILLIMETER);
+               
+               Rectangle2D.Double grain, punt, end;
+               grain = new Rectangle2D.Double(0,0,od/2.0,len);
+               punt = new Rectangle2D.Double(0,len-plen, pdi/2.0, plen);
+               end = new Rectangle2D.Double(0,len,od,0);
+               
+               shape = new BurningShape();
+               web = null;
+               
+               shape.add(grain);
+               shape.inhibit(grain);
+               shape.subtract(punt);
+               shape.subtract(end);
+       }
+       
+       public EndBurner(){
+               this.addPropertyChangeListener(new PropertyChangeListener(){
+                       @Override
+                       public void propertyChange(PropertyChangeEvent evt) {
+                               generateGeometry();
+                       }});
+               generateGeometry();
+       }
+       
+       @Override
+       public void validate() throws ValidationException {
+               // TODO Auto-generated method stub
+
+       }
+
+       public Amount<Length> getLength() {
+               return length;
+       }
+
+       public void setLength(Amount<Length> length) {
+               this.length = length;
+       }
+
+       public Amount<Length> getoD() {
+               return oD;
+       }
+
+       public void setoD(Amount<Length> oD) {
+               this.oD = oD;
+       }
+
+       public Amount<Length> getPuntDiameter() {
+               return puntDiameter;
+       }
+
+       public void setPuntDiameter(Amount<Length> puntDiameter) {
+               this.puntDiameter = puntDiameter;
+       }
+
+       public Amount<Length> getPuntDepth() {
+               return puntDepth;
+       }
+
+       public void setPuntDepth(Amount<Length> puntDepth) {
+               this.puntDepth = puntDepth;
+       }
+
+}
index 18f0f6231ad890f6358a0d76199ed1842474cfb1..20cd4e4f573399126a01ec98c26c67adcd67f6a9 100644 (file)
@@ -62,11 +62,11 @@ public abstract class RotatedShapeGrain implements Grain {
                double areaFlatteningError = .001;\r
        }\r
        \r
-       Quality quality = Quality.Low;\r
+       protected Quality quality = Quality.Low;\r
        \r
        protected BurningShape shape = new BurningShape();\r
        \r
-       Amount<Length> web = null;\r
+       protected Amount<Length> web = null;\r
        \r
        public Area getCrossSection(Amount<Length> regression) {\r
                Area ret = new Area();\r
index ec64bb2e2208b12bf608bb4813299bc7c8412637..0e814e200f6ca69feaed45a15aede805abb0012b 100644 (file)
@@ -50,6 +50,7 @@ import com.billkuker.rocketry.motorsim.fuel.KNSB;
 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
 import com.billkuker.rocketry.motorsim.grain.CSlot;\r
 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.EndBurner;\r
 import com.billkuker.rocketry.motorsim.grain.Finocyl;\r
 import com.billkuker.rocketry.motorsim.grain.Moonburner;\r
 import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
@@ -80,7 +81,7 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener {
 \r
        @SuppressWarnings("unchecked")\r
        private Class[] grainTypes = { CoredCylindricalGrain.class, Finocyl.class,\r
-                       Moonburner.class, RodAndTubeGrain.class, CSlot.class };\r
+                       Moonburner.class, RodAndTubeGrain.class, CSlot.class, EndBurner.class };\r
 \r
        @SuppressWarnings("unchecked")\r
        private Class[] fuelTypes = { KNSB.class, KNSU.class, KNER.class,\r