]> git.gag.com Git - sw/motorsim/commitdiff
Added extrudedGrain superclass
authorBill Kuker <bkuker@billkuker.com>
Mon, 13 Apr 2009 01:52:23 +0000 (01:52 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 13 Apr 2009 01:52:23 +0000 (01:52 +0000)
src/com/billkuker/rocketry/motorsim/grain/CoredCylindricalGrain.java
src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/grain/RodAndTubeGrain.java

index 9ba8f97e98c3507676036ea4e27920c7b8c6e951..e7fdbf4f24f8891744f03eb04352e954237a8dbc 100644 (file)
@@ -12,26 +12,29 @@ import javax.measure.unit.SI;
 \r
 import org.jscience.physics.amount.Amount;\r
 \r
+import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;\r
+\r
 import com.billkuker.rocketry.motorsim.Grain;\r
 import com.billkuker.rocketry.motorsim.MotorPart;\r
+import com.billkuker.rocketry.motorsim.visual.Editor;\r
+import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
 \r
 \r
-public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart.Validating {\r
+public class CoredCylindricalGrain extends ExtrudedGrain implements MotorPart.Validating {\r
 \r
-       private Amount<Length> length, oD, iD;\r
-       private boolean outerSurfaceInhibited = true, innerSurfaceInhibited = false, endSurfaceInhibited = false;\r
+       private Amount<Length> oD, iD;\r
+       private boolean outerSurfaceInhibited = true, innerSurfaceInhibited = false;\r
 \r
        public CoredCylindricalGrain() {\r
-               length = Amount.valueOf(100, SI.MILLIMETER);\r
+\r
                oD = Amount.valueOf(30, SI.MILLIMETER);\r
                iD = Amount.valueOf(10, SI.MILLIMETER);\r
        }\r
        \r
-       \r
+       @Deprecated\r
        public void inhibit(boolean in, boolean out, boolean end){\r
                outerSurfaceInhibited = out;\r
                innerSurfaceInhibited = in;\r
-               endSurfaceInhibited = end;\r
        }\r
 \r
        @Override\r
@@ -39,10 +42,7 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                Amount<Length> zero = Amount.valueOf(0, SI.MILLIMETER);\r
                \r
                //Calculated regressed length\r
-               Amount<Length> cLength = length;\r
-               if ( !endSurfaceInhibited ){\r
-                       cLength = cLength.minus(regression.times(2));\r
-               }\r
+               Amount<Length> cLength = regressedLength(regression);\r
                \r
                //Calculate regressed iD\r
                Amount<Length> cID = iD;\r
@@ -69,7 +69,7 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                \r
                Amount<Area> ends = (cOD.divide(2).pow(2).times(Math.PI)).minus(cID.divide(2).pow(2).times(Math.PI)).times(2).to(SI.SQUARE_METRE);\r
                \r
-               Amount<Area> total = inner.times(innerSurfaceInhibited?0:1).plus(outer.times(outerSurfaceInhibited?0:1)).plus(ends.times(endSurfaceInhibited?0:1));\r
+               Amount<Area> total = inner.times(innerSurfaceInhibited?0:1).plus(outer.times(outerSurfaceInhibited?0:1)).plus(ends.times(numberOfBurningEnds()));\r
                \r
                return total;\r
        }\r
@@ -79,10 +79,7 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                Amount<Length> zero = Amount.valueOf(0, SI.MILLIMETER);\r
                \r
                //Calculated regressed length\r
-               Amount<Length> cLength = length;\r
-               if ( !endSurfaceInhibited ){\r
-                       cLength = cLength.minus(regression.times(2));\r
-               }\r
+               Amount<Length> cLength = regressedLength(regression);\r
                \r
                //Calculate regressed iD\r
                Amount<Length> cID = iD;\r
@@ -109,13 +106,6 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                return end.times(cLength).to(SI.CUBIC_METRE);\r
        }\r
 \r
-       public void setLength(Amount<Length> length) throws PropertyVetoException {\r
-               fireVetoableChange("length", this.length, length);\r
-               Amount<Length> old = this.length;\r
-               this.length = length;\r
-               firePropertyChange("length", old, length);\r
-       }\r
-\r
        public void setOD(Amount<Length> od) throws PropertyVetoException {\r
                fireVetoableChange("od", this.oD, od);\r
                Amount<Length> old = this.oD;\r
@@ -135,20 +125,20 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                        throw new ValidationException(this, "Invalid iD");\r
                if ( oD.equals(Amount.ZERO) )\r
                        throw new ValidationException(this, "Invalid oD");\r
-               if ( length.equals(Amount.ZERO) )\r
+               if ( getLength().equals(Amount.ZERO) )\r
                        throw new ValidationException(this, "Invalid Length");\r
                if ( iD.isGreaterThan(oD) )\r
                        throw new ValidationException(this, "iD > oD");\r
                \r
-               if ( innerSurfaceInhibited && outerSurfaceInhibited && endSurfaceInhibited )\r
+               if ( innerSurfaceInhibited && outerSurfaceInhibited )\r
                        throw new ValidationException(this, "No exposed grain surface");\r
                \r
        }\r
 \r
        @Override\r
        public Amount<Length> webThickness() {\r
-               if ( innerSurfaceInhibited && outerSurfaceInhibited && endSurfaceInhibited ){\r
-                       return oD;\r
+               if ( innerSurfaceInhibited && outerSurfaceInhibited ){\r
+                       return oD; //TODO gotta move this to the end\r
                }\r
                \r
                Amount<Length> radial = null;\r
@@ -159,8 +149,8 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                \r
                Amount<Length> axial = null;\r
                \r
-               if ( !endSurfaceInhibited )\r
-                       axial = length.divide(2);\r
+               if ( numberOfBurningEnds() != 0 )\r
+                       axial = getLength().divide(numberOfBurningEnds());\r
                \r
                if ( axial == null )\r
                        return radial;\r
@@ -171,10 +161,6 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                return axial;\r
        }\r
 \r
-       public Amount<Length> getLength() {\r
-               return length;\r
-       }\r
-\r
        public Amount<Length> getOD() {\r
                return oD;\r
        }\r
@@ -206,18 +192,24 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                double rmm = regression.doubleValue(SI.MILLIMETER);\r
                double oDmm = oD.doubleValue(SI.MILLIMETER);\r
                double iDmm = iD.doubleValue(SI.MILLIMETER);\r
-               double lmm = length.doubleValue(SI.MILLIMETER);\r
+               double lmm = regressedLength(regression).doubleValue(SI.MILLIMETER);\r
+               double length = getLength().doubleValue(SI.MILLIMETER);\r
 \r
                if ( !outerSurfaceInhibited )\r
                        oDmm -= 2.0 * rmm;\r
                if ( !innerSurfaceInhibited )\r
                        iDmm += 2.0 * rmm;\r
-               if ( !endSurfaceInhibited )\r
-                       lmm -= 2.0 * rmm;\r
                \r
                java.awt.geom.Area a = new java.awt.geom.Area();\r
-               a.add( new java.awt.geom.Area(new Rectangle2D.Double(-oDmm/2,-lmm/2,oDmm, lmm)));\r
-               a.subtract( new java.awt.geom.Area(new Rectangle2D.Double(-iDmm/2,-lmm/2,iDmm, lmm)));\r
+               \r
+               double top = -lmm/2;\r
+               if ( isForeEndInhibited() && !isAftEndInhibited() )\r
+                       top = -length/2;\r
+               else if ( isAftEndInhibited() && !isForeEndInhibited() )\r
+                       top = length-lmm;\r
+               \r
+               a.add( new java.awt.geom.Area(new Rectangle2D.Double(-oDmm/2,top,oDmm, lmm)));\r
+               a.subtract( new java.awt.geom.Area(new Rectangle2D.Double(-iDmm/2,-length/2,iDmm, length)));\r
                \r
                return a;\r
        }\r
@@ -248,18 +240,12 @@ public class CoredCylindricalGrain extends MotorPart implements Grain, MotorPart
                firePropertyChange("innerSurfaceInhibited", old, innerSurfaceInhibited);\r
        }\r
 \r
-\r
-       public boolean isEndSurfaceInhibited() {\r
-               return endSurfaceInhibited;\r
+       public static void main(String args[]) throws Exception {\r
+               CoredCylindricalGrain e = new CoredCylindricalGrain();\r
+               new Editor(e).show();\r
+               new GrainPanel(e).show();\r
        }\r
 \r
-\r
-       public void setEndSurfaceInhibited(boolean endSurfaceInhibited) throws PropertyVetoException {\r
-               fireVetoableChange("endSurfaceInhibited", this.endSurfaceInhibited, endSurfaceInhibited);\r
-               boolean old = this.endSurfaceInhibited;\r
-               this.endSurfaceInhibited = endSurfaceInhibited;\r
-               firePropertyChange("endSurfaceInhibited", old, endSurfaceInhibited);\r
-       }\r
        \r
 \r
 }\r
diff --git a/src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java b/src/com/billkuker/rocketry/motorsim/grain/ExtrudedGrain.java
new file mode 100644 (file)
index 0000000..81b0563
--- /dev/null
@@ -0,0 +1,58 @@
+package com.billkuker.rocketry.motorsim.grain;\r
+\r
+import java.beans.PropertyVetoException;\r
+\r
+import javax.measure.quantity.Length;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Grain;\r
+import com.billkuker.rocketry.motorsim.MotorPart;\r
+\r
+public abstract class ExtrudedGrain extends MotorPart implements Grain {\r
+       private boolean foreEndInhibited = false;\r
+       private boolean aftEndInhibited = false;\r
+       private Amount<Length> length = Amount.valueOf(100, SI.MILLIMETER);\r
+       \r
+       protected int numberOfBurningEnds(){\r
+               return (foreEndInhibited?0:1) + (aftEndInhibited?0:1);\r
+       }\r
+       \r
+       protected Amount<Length> regressedLength(Amount<Length> regression){\r
+               return length.minus(regression.times(numberOfBurningEnds()));\r
+       }\r
+\r
+       public boolean isForeEndInhibited() {\r
+               return foreEndInhibited;\r
+       }\r
+\r
+       public void setForeEndInhibited(boolean foreEndInhibited)throws PropertyVetoException {\r
+               fireVetoableChange("foreEndInhibited", this.foreEndInhibited, foreEndInhibited);\r
+               boolean old = this.foreEndInhibited;\r
+               this.foreEndInhibited = foreEndInhibited;\r
+               firePropertyChange("foreEndInhibited", old, foreEndInhibited);\r
+       }\r
+\r
+       public boolean isAftEndInhibited() {\r
+               return aftEndInhibited;\r
+       }\r
+\r
+       public void setAftEndInhibited(boolean aftEndInhibited) throws PropertyVetoException {\r
+               fireVetoableChange("aftEndInhibited", this.aftEndInhibited, aftEndInhibited);\r
+               boolean old = this.aftEndInhibited;\r
+               this.aftEndInhibited = aftEndInhibited;\r
+               firePropertyChange("aftEndInhibited", old, aftEndInhibited);\r
+       }\r
+\r
+       public Amount<Length> getLength() {\r
+               return length;\r
+       }\r
+\r
+       public void setLength(Amount<Length> length) throws PropertyVetoException {\r
+               fireVetoableChange("length", this.length, length);\r
+               Amount<Length> old = this.length;\r
+               this.length = length;\r
+               firePropertyChange("length", old, length);\r
+       }\r
+}\r
index 2ae00f44b966c6b3b516004fd22cbd472f7d1ab3..bf35bb8e17741891d19a33b8f5a9b03d7d114647 100644 (file)
@@ -8,6 +8,8 @@ import javax.measure.unit.SI;
 import org.jscience.physics.amount.Amount;\r
 \r
 import com.billkuker.rocketry.motorsim.Grain;\r
+import com.billkuker.rocketry.motorsim.visual.Editor;\r
+import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
 \r
 public class RodAndTubeGrain extends CompoundGrain {\r
        CoredCylindricalGrain rod, tube;\r
@@ -19,14 +21,15 @@ public class RodAndTubeGrain extends CompoundGrain {
                        rod.setID(Amount.valueOf(0, SI.MILLIMETER));\r
                        rod.setOD(Amount.valueOf(10, SI.MILLIMETER));\r
                        rod.setOuterSurfaceInhibited(false);\r
-                       rod.setEndSurfaceInhibited(true);\r
+                       rod.setForeEndInhibited(true);\r
+                       rod.setAftEndInhibited(true);\r
                        \r
                        tube = new CoredCylindricalGrain();\r
                        tube.setInnerSurfaceInhibited(false);\r
                        tube.setID(Amount.valueOf(20, SI.MILLIMETER));\r
                        tube.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
-                       tube.setOuterSurfaceInhibited(true);\r
-                       tube.setEndSurfaceInhibited(true);\r
+                       tube.setForeEndInhibited(true);\r
+                       tube.setAftEndInhibited(true);\r
                } catch ( PropertyVetoException v ){\r
                        v.printStackTrace();\r
                        //I know these values are OK\r
@@ -60,16 +63,6 @@ public class RodAndTubeGrain extends CompoundGrain {
                tube.setOD(od);\r
        }\r
 \r
-       public boolean isEndSurfaceInhibited() {\r
-               return rod.isEndSurfaceInhibited();\r
-       }\r
-\r
-       public void setEndSurfaceInhibited(boolean endSurfaceInhibited)\r
-                       throws PropertyVetoException {\r
-               rod.setEndSurfaceInhibited(endSurfaceInhibited);\r
-               tube.setEndSurfaceInhibited(endSurfaceInhibited);\r
-       }\r
-\r
        public Amount<Length> getLength() {\r
                return rod.getLength();\r
        }\r
@@ -79,4 +72,30 @@ public class RodAndTubeGrain extends CompoundGrain {
                tube.setLength(length);\r
        }\r
 \r
+       public boolean isAftEndInhibited() {\r
+               return rod.isAftEndInhibited();\r
+       }\r
+\r
+       public boolean isForeEndInhibited() {\r
+               return rod.isForeEndInhibited();\r
+       }\r
+\r
+       public void setAftEndInhibited(boolean aftEndInhibited)\r
+                       throws PropertyVetoException {\r
+               rod.setAftEndInhibited(aftEndInhibited);\r
+               tube.setAftEndInhibited(aftEndInhibited);\r
+       }\r
+\r
+       public void setForeEndInhibited(boolean foreEndInhibited)\r
+                       throws PropertyVetoException {\r
+               rod.setForeEndInhibited(foreEndInhibited);\r
+               tube.setForeEndInhibited(foreEndInhibited);\r
+       }\r
+\r
+\r
+       public static void main(String args[]) throws Exception {\r
+               Grain g = new RodAndTubeGrain();\r
+               new Editor(g).show();\r
+               new GrainPanel(g).show();\r
+       }\r
 }\r