--- /dev/null
+package com.billkuker.rocketry.motorsim.grain;
+
+import java.awt.geom.Rectangle2D;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.measure.quantity.Length;
+import javax.measure.unit.SI;
+
+import org.jscience.physics.amount.Amount;
+
+import com.billkuker.rocketry.motorsim.Validating;
+import com.billkuker.rocketry.motorsim.grain.util.BurningShape;
+import com.billkuker.rocketry.motorsim.grain.util.RotatedShapeGrain;
+
+public class EndBurner extends RotatedShapeGrain implements Validating {
+
+ private Amount<Length> length = Amount.valueOf(70, SI.MILLIMETER);
+ private Amount<Length> oD = Amount.valueOf(30, SI.MILLIMETER);
+ private Amount<Length> puntDiameter = Amount.valueOf(10, SI.MILLIMETER);
+ private Amount<Length> puntDepth = Amount.valueOf(10, SI.MILLIMETER);
+
+ private void generateGeometry(){
+ double len = length.doubleValue(SI.MILLIMETER);
+ double od = oD.doubleValue(SI.MILLIMETER);
+ double pdi = puntDiameter.doubleValue(SI.MILLIMETER);
+ double plen = puntDepth.doubleValue(SI.MILLIMETER);
+
+ Rectangle2D.Double grain, punt, end;
+ grain = new Rectangle2D.Double(0,0,od/2.0,len);
+ punt = new Rectangle2D.Double(0,len-plen, pdi/2.0, plen);
+ end = new Rectangle2D.Double(0,len,od,0);
+
+ shape = new BurningShape();
+ web = null;
+
+ shape.add(grain);
+ shape.inhibit(grain);
+ shape.subtract(punt);
+ shape.subtract(end);
+ }
+
+ public EndBurner(){
+ this.addPropertyChangeListener(new PropertyChangeListener(){
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ generateGeometry();
+ }});
+ generateGeometry();
+ }
+
+ @Override
+ public void validate() throws ValidationException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Amount<Length> getLength() {
+ return length;
+ }
+
+ public void setLength(Amount<Length> length) {
+ this.length = length;
+ }
+
+ public Amount<Length> getoD() {
+ return oD;
+ }
+
+ public void setoD(Amount<Length> oD) {
+ this.oD = oD;
+ }
+
+ public Amount<Length> getPuntDiameter() {
+ return puntDiameter;
+ }
+
+ public void setPuntDiameter(Amount<Length> puntDiameter) {
+ this.puntDiameter = puntDiameter;
+ }
+
+ public Amount<Length> getPuntDepth() {
+ return puntDepth;
+ }
+
+ public void setPuntDepth(Amount<Length> puntDepth) {
+ this.puntDepth = puntDepth;
+ }
+
+}
import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
import com.billkuker.rocketry.motorsim.grain.CSlot;\r
import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.EndBurner;\r
import com.billkuker.rocketry.motorsim.grain.Finocyl;\r
import com.billkuker.rocketry.motorsim.grain.Moonburner;\r
import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
\r
@SuppressWarnings("unchecked")\r
private Class[] grainTypes = { CoredCylindricalGrain.class, Finocyl.class,\r
- Moonburner.class, RodAndTubeGrain.class, CSlot.class };\r
+ Moonburner.class, RodAndTubeGrain.class, CSlot.class, EndBurner.class };\r
\r
@SuppressWarnings("unchecked")\r
private Class[] fuelTypes = { KNSB.class, KNSU.class, KNER.class,\r