Initial Multiport
authorBill Kuker <bkuker@billkuker.com>
Tue, 13 Sep 2011 14:37:28 +0000 (14:37 +0000)
committerBill Kuker <bkuker@billkuker.com>
Tue, 13 Sep 2011 14:37:28 +0000 (14:37 +0000)
src/com/billkuker/rocketry/motorsim/grain/MultiPort.java [new file with mode: 0644]

diff --git a/src/com/billkuker/rocketry/motorsim/grain/MultiPort.java b/src/com/billkuker/rocketry/motorsim/grain/MultiPort.java
new file mode 100644 (file)
index 0000000..98fe11f
--- /dev/null
@@ -0,0 +1,161 @@
+package com.billkuker.rocketry.motorsim.grain;\r
+\r
+import java.awt.Shape;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Ellipse2D;\r
+import java.beans.PropertyVetoException;\r
+\r
+import javax.measure.quantity.Angle;\r
+import javax.measure.quantity.Length;\r
+import javax.measure.unit.NonSI;\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.Validating;\r
+import com.billkuker.rocketry.motorsim.grain.util.BurningShape;\r
+import com.billkuker.rocketry.motorsim.grain.util.ExtrudedShapeGrain;\r
+import com.billkuker.rocketry.motorsim.visual.Editor;\r
+import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
+\r
+public class MultiPort extends ExtrudedShapeGrain implements Validating {\r
+       \r
+       private Amount<Length> oD = Amount.valueOf(30, SI.MILLIMETER);\r
+       \r
+       \r
+       private Amount<Length> coreD = Amount.valueOf(3, SI.MILLIMETER);\r
+       \r
+       private Amount<Length> r1D = Amount.valueOf(2, SI.MILLIMETER);\r
+       private Amount<Length> r1Offset = Amount.valueOf(5, SI.MILLIMETER);\r
+       private int r1Count = 4;\r
+       \r
+       private Amount<Length> r2D = Amount.valueOf(1, SI.MILLIMETER);\r
+       private Amount<Length> r2Offset = Amount.valueOf(10, SI.MILLIMETER);\r
+       private int r2Count = 8;\r
+\r
+       private Amount<Angle> ringTwoRot = Amount.valueOf(22.5, NonSI.DEGREE_ANGLE);\r
+       \r
+       @Override\r
+       public void validate() throws ValidationException {\r
+               // TODO Auto-generated method stub\r
+               \r
+       }\r
+       \r
+       public MultiPort(){\r
+               try {\r
+                       setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+               } catch (PropertyVetoException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               generateGeometry();\r
+       }\r
+       \r
+       private void generateGeometry(){\r
+               double odmm = oD.doubleValue(SI.MILLIMETER);\r
+               double cdmm = coreD.doubleValue(SI.MILLIMETER);\r
+               double r1dmm = r1D.doubleValue(SI.MILLIMETER);\r
+               double r1off = r1Offset.doubleValue(SI.MILLIMETER);\r
+               \r
+               double r2dmm = r2D.doubleValue(SI.MILLIMETER);\r
+               double r2off = r2Offset.doubleValue(SI.MILLIMETER);\r
+               \r
+               double r2rot = ringTwoRot.doubleValue(SI.RADIAN);\r
+               \r
+               xsection = new BurningShape();\r
+               Shape outside = new Ellipse2D.Double(-odmm/2, -odmm/2, odmm, odmm);\r
+               xsection.add(outside);\r
+               xsection.inhibit(outside);\r
+               xsection.subtract(new Ellipse2D.Double(-cdmm/2, -cdmm/2, cdmm, cdmm));\r
+               webThickness = null;\r
+               \r
+               for ( int i = 0; i < r1Count; i++ ){\r
+                       Shape port = new Ellipse2D.Double(r1off-r1dmm/2,-r1dmm/2,r1dmm,r1dmm);\r
+                       xsection.subtract(port, AffineTransform.getRotateInstance(i*(2.0*Math.PI/r1Count)));\r
+               }\r
+               \r
+               for ( int i = 0; i < r2Count; i++ ){\r
+                       Shape port = new Ellipse2D.Double(r2off-r2dmm/2,-r2dmm/2,r2dmm,r2dmm);\r
+                       xsection.subtract(port, AffineTransform.getRotateInstance(r2rot + i*(2.0*Math.PI/r2Count)));\r
+               }\r
+       }\r
+\r
+       \r
+       public static void main(String args[]){\r
+               Grain g;\r
+               new GrainPanel(g = new MultiPort()).showAsWindow();\r
+               new Editor(g).showAsWindow();\r
+       }\r
+\r
+       public Amount<Length> getoD() {\r
+               return oD;\r
+       }\r
+\r
+       public void setoD(Amount<Length> oD) {\r
+               this.oD = oD;\r
+       }\r
+\r
+       public Amount<Length> getCoreD() {\r
+               return coreD;\r
+       }\r
+\r
+       public void setCoreD(Amount<Length> coreD) {\r
+               this.coreD = coreD;\r
+       }\r
+\r
+       public Amount<Length> getR1D() {\r
+               return r1D;\r
+       }\r
+\r
+       public void setR1D(Amount<Length> r1d) {\r
+               r1D = r1d;\r
+       }\r
+\r
+       public Amount<Length> getR1Offset() {\r
+               return r1Offset;\r
+       }\r
+\r
+       public void setR1Offset(Amount<Length> r1Offset) {\r
+               this.r1Offset = r1Offset;\r
+       }\r
+\r
+       public int getR1Count() {\r
+               return r1Count;\r
+       }\r
+\r
+       public void setR1Count(int r1Count) {\r
+               this.r1Count = r1Count;\r
+       }\r
+\r
+       public Amount<Length> getR2D() {\r
+               return r2D;\r
+       }\r
+\r
+       public void setR2D(Amount<Length> r2d) {\r
+               r2D = r2d;\r
+       }\r
+\r
+       public Amount<Length> getR2Offset() {\r
+               return r2Offset;\r
+       }\r
+\r
+       public void setR2Offset(Amount<Length> r2Offset) {\r
+               this.r2Offset = r2Offset;\r
+       }\r
+\r
+       public int getR2Count() {\r
+               return r2Count;\r
+       }\r
+\r
+       public void setR2Count(int r2Count) {\r
+               this.r2Count = r2Count;\r
+       }\r
+\r
+       public Amount<Angle> getRingTwoRot() {\r
+               return ringTwoRot;\r
+       }\r
+\r
+       public void setRingTwoRot(Amount<Angle> ringTwoRot) {\r
+               this.ringTwoRot = ringTwoRot;\r
+       }\r
+}\r