import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
\r
public class MultiPort extends ExtrudedShapeGrain implements Validating {\r
import com.billkuker.rocketry.motorsim.visual.GrainPanel;\r
\r
public class MultiPort extends ExtrudedShapeGrain implements Validating {\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
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
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
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
try {\r
setLength(Amount.valueOf(70, SI.MILLIMETER));\r
} catch (PropertyVetoException e) {\r
try {\r
setLength(Amount.valueOf(70, SI.MILLIMETER));\r
} catch (PropertyVetoException e) {\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
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
double r2dmm = r2D.doubleValue(SI.MILLIMETER);\r
double r2off = r2Offset.doubleValue(SI.MILLIMETER);\r
double r2dmm = r2D.doubleValue(SI.MILLIMETER);\r
double r2off = r2Offset.doubleValue(SI.MILLIMETER);\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.subtract(new Ellipse2D.Double(-cdmm/2, -cdmm/2, cdmm, cdmm));\r
+ xsection.subtract(new Ellipse2D.Double(-cdmm / 2, -cdmm / 2, cdmm, cdmm));\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
- 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