Regenerate multiport geometry
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / grain / MultiPort.java
index 98fe11fd0cb94c35bf7c1a5ec225e5a1eb6ae897..3307924971885e1a6046d8e86172fd8860349569 100644 (file)
@@ -20,29 +20,30 @@ import com.billkuker.rocketry.motorsim.visual.Editor;
 import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
 \r
 public class MultiPort extends ExtrudedShapeGrain implements Validating {\r
-       \r
+\r
+       private boolean inhibitOutside = true;\r
+\r
        private Amount<Length> oD = Amount.valueOf(30, SI.MILLIMETER);\r
-       \r
-       \r
+\r
        private Amount<Length> coreD = Amount.valueOf(3, SI.MILLIMETER);\r
-       \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
+\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
+\r
        @Override\r
        public void validate() throws ValidationException {\r
                // TODO Auto-generated method stub\r
-               \r
+\r
        }\r
-       \r
-       public MultiPort(){\r
+\r
+       public MultiPort() {\r
                try {\r
                        setLength(Amount.valueOf(70, SI.MILLIMETER));\r
                } catch (PropertyVetoException e) {\r
@@ -50,38 +51,48 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
                }\r
                generateGeometry();\r
        }\r
-       \r
-       private void generateGeometry(){\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
+\r
                double r2dmm = r2D.doubleValue(SI.MILLIMETER);\r
                double r2off = r2Offset.doubleValue(SI.MILLIMETER);\r
-               \r
+\r
                double r2rot = ringTwoRot.doubleValue(SI.RADIAN);\r
-               \r
+\r
                xsection = new BurningShape();\r
-               Shape outside = new Ellipse2D.Double(-odmm/2, -odmm/2, odmm, odmm);\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
+\r
+               if (isInhibitOutside())\r
+                       xsection.inhibit(outside);\r
+\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
+               for (int i = 0; i < r1Count; i++) {\r
+                       Shape port = new Ellipse2D.Double(r1off - r1dmm / 2, -r1dmm / 2,\r
+                                       r1dmm, r1dmm);\r
+                       xsection.subtract(\r
+                                       port,\r
+                                       AffineTransform.getRotateInstance(i\r
+                                                       * (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
+               for (int i = 0; i < r2Count; i++) {\r
+                       Shape port = new Ellipse2D.Double(r2off - r2dmm / 2, -r2dmm / 2,\r
+                                       r2dmm, r2dmm);\r
+                       xsection.subtract(\r
+                                       port,\r
+                                       AffineTransform.getRotateInstance(r2rot + i\r
+                                                       * (2.0 * Math.PI / r2Count)));\r
                }\r
        }\r
 \r
-       \r
-       public static void main(String args[]){\r
+       public static void main(String args[]) {\r
                Grain g;\r
                new GrainPanel(g = new MultiPort()).showAsWindow();\r
                new Editor(g).showAsWindow();\r
@@ -93,6 +104,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setoD(Amount<Length> oD) {\r
                this.oD = oD;\r
+               generateGeometry();\r
        }\r
 \r
        public Amount<Length> getCoreD() {\r
@@ -101,6 +113,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setCoreD(Amount<Length> coreD) {\r
                this.coreD = coreD;\r
+               generateGeometry();\r
        }\r
 \r
        public Amount<Length> getR1D() {\r
@@ -109,6 +122,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setR1D(Amount<Length> r1d) {\r
                r1D = r1d;\r
+               generateGeometry();\r
        }\r
 \r
        public Amount<Length> getR1Offset() {\r
@@ -117,6 +131,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setR1Offset(Amount<Length> r1Offset) {\r
                this.r1Offset = r1Offset;\r
+               generateGeometry();\r
        }\r
 \r
        public int getR1Count() {\r
@@ -125,6 +140,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setR1Count(int r1Count) {\r
                this.r1Count = r1Count;\r
+               generateGeometry();\r
        }\r
 \r
        public Amount<Length> getR2D() {\r
@@ -133,6 +149,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setR2D(Amount<Length> r2d) {\r
                r2D = r2d;\r
+               generateGeometry();\r
        }\r
 \r
        public Amount<Length> getR2Offset() {\r
@@ -141,6 +158,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setR2Offset(Amount<Length> r2Offset) {\r
                this.r2Offset = r2Offset;\r
+               generateGeometry();\r
        }\r
 \r
        public int getR2Count() {\r
@@ -149,6 +167,7 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setR2Count(int r2Count) {\r
                this.r2Count = r2Count;\r
+               generateGeometry();\r
        }\r
 \r
        public Amount<Angle> getRingTwoRot() {\r
@@ -157,5 +176,15 @@ public class MultiPort extends ExtrudedShapeGrain implements Validating {
 \r
        public void setRingTwoRot(Amount<Angle> ringTwoRot) {\r
                this.ringTwoRot = ringTwoRot;\r
+               generateGeometry();\r
+       }\r
+\r
+       public boolean isInhibitOutside() {\r
+               return inhibitOutside;\r
+       }\r
+\r
+       public void setInhibitOutside(boolean inhibitOutside) {\r
+               this.inhibitOutside = inhibitOutside;\r
+               generateGeometry();\r
        }\r
 }\r