New panels.
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / grain / CoredCylindricalGrain.java
index 8727657ee5074b488906bd8c1356c4ece249185c..960cdaa9ba0ed62242b8cb5f9a7fb0eac3acfa44 100644 (file)
@@ -1,5 +1,13 @@
 package com.billkuker.rocketry.motorsim.grain;\r
 \r
+import java.awt.BasicStroke;\r
+import java.awt.Color;\r
+import java.awt.Graphics2D;\r
+import java.awt.Rectangle;\r
+import java.awt.Shape;\r
+import java.awt.geom.Ellipse2D;\r
+import java.awt.geom.Rectangle2D;\r
+\r
 import javax.measure.quantity.Area;\r
 import javax.measure.quantity.Length;\r
 import javax.measure.quantity.Volume;\r
@@ -11,7 +19,7 @@ import com.billkuker.rocketry.motorsim.Grain;
 import com.billkuker.rocketry.motorsim.validation.Validating;\r
 import com.billkuker.rocketry.motorsim.validation.ValidationException;\r
 \r
-public class CoredCylindricalGrain implements Grain, Validating {\r
+public class CoredCylindricalGrain implements Grain, Validating, Grain.Graphical {\r
 \r
        private Amount<Length> length, oD, iD;\r
        private boolean oInh = true, iInh = false, eInh = false;\r
@@ -156,7 +164,44 @@ public class CoredCylindricalGrain implements Grain, Validating {
                return iD;\r
        }\r
        \r
+       @Override\r
+       public java.awt.geom.Area getCrossSection(Amount<Length> regression){\r
+               double rmm = regression.doubleValue(SI.MILLIMETER);\r
+               double oDmm = oD.doubleValue(SI.MILLIMETER);\r
+               double iDmm = iD.doubleValue(SI.MILLIMETER);\r
+\r
+               if ( !oInh )\r
+                       oDmm -= 2.0 * rmm;\r
+               if ( !iInh )\r
+                       iDmm += 2.0 * rmm;\r
+               \r
+               Shape oDs = new Ellipse2D.Double(-oDmm/2.0, -oDmm/2.0, oDmm, oDmm);\r
+               Shape iDs = new Ellipse2D.Double(-iDmm/2.0, -iDmm/2.0, iDmm, iDmm);\r
+               \r
+               java.awt.geom.Area a = new java.awt.geom.Area(oDs);\r
+               a.subtract(new java.awt.geom.Area(iDs));\r
+               return a;\r
+       }\r
        \r
+       public java.awt.geom.Area getSideView(Amount<Length> regression){\r
+               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
+\r
+               if ( !oInh )\r
+                       oDmm -= 2.0 * rmm;\r
+               if ( !iInh )\r
+                       iDmm += 2.0 * rmm;\r
+               if ( !eInh )\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
+               return a;\r
+       }\r
        \r
 \r
 }\r