From a2c7d4f7fe7abdbcad673baa4ed453d183d77c47 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Sat, 1 May 2010 13:29:20 +0000 Subject: [PATCH] Added EndBurner with Punt --- .../rocketry/motorsim/grain/EndBurner.java | 90 +++++++++++++++++++ .../grain/util/RotatedShapeGrain.java | 4 +- .../visual/workbench/MotorEditor.java | 3 +- 3 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 src/com/billkuker/rocketry/motorsim/grain/EndBurner.java diff --git a/src/com/billkuker/rocketry/motorsim/grain/EndBurner.java b/src/com/billkuker/rocketry/motorsim/grain/EndBurner.java new file mode 100644 index 0000000..70775e0 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/grain/EndBurner.java @@ -0,0 +1,90 @@ +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 = Amount.valueOf(70, SI.MILLIMETER); + private Amount oD = Amount.valueOf(30, SI.MILLIMETER); + private Amount puntDiameter = Amount.valueOf(10, SI.MILLIMETER); + private Amount 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 getLength() { + return length; + } + + public void setLength(Amount length) { + this.length = length; + } + + public Amount getoD() { + return oD; + } + + public void setoD(Amount oD) { + this.oD = oD; + } + + public Amount getPuntDiameter() { + return puntDiameter; + } + + public void setPuntDiameter(Amount puntDiameter) { + this.puntDiameter = puntDiameter; + } + + public Amount getPuntDepth() { + return puntDepth; + } + + public void setPuntDepth(Amount puntDepth) { + this.puntDepth = puntDepth; + } + +} diff --git a/src/com/billkuker/rocketry/motorsim/grain/util/RotatedShapeGrain.java b/src/com/billkuker/rocketry/motorsim/grain/util/RotatedShapeGrain.java index 18f0f62..20cd4e4 100644 --- a/src/com/billkuker/rocketry/motorsim/grain/util/RotatedShapeGrain.java +++ b/src/com/billkuker/rocketry/motorsim/grain/util/RotatedShapeGrain.java @@ -62,11 +62,11 @@ public abstract class RotatedShapeGrain implements Grain { double areaFlatteningError = .001; } - Quality quality = Quality.Low; + protected Quality quality = Quality.Low; protected BurningShape shape = new BurningShape(); - Amount web = null; + protected Amount web = null; public Area getCrossSection(Amount regression) { Area ret = new Area(); diff --git a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index ec64bb2..0e814e2 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -50,6 +50,7 @@ import com.billkuker.rocketry.motorsim.fuel.KNSB; import com.billkuker.rocketry.motorsim.fuel.KNSU; import com.billkuker.rocketry.motorsim.grain.CSlot; import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; +import com.billkuker.rocketry.motorsim.grain.EndBurner; import com.billkuker.rocketry.motorsim.grain.Finocyl; import com.billkuker.rocketry.motorsim.grain.Moonburner; import com.billkuker.rocketry.motorsim.grain.MultiGrain; @@ -80,7 +81,7 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { @SuppressWarnings("unchecked") private Class[] grainTypes = { CoredCylindricalGrain.class, Finocyl.class, - Moonburner.class, RodAndTubeGrain.class, CSlot.class }; + Moonburner.class, RodAndTubeGrain.class, CSlot.class, EndBurner.class }; @SuppressWarnings("unchecked") private Class[] fuelTypes = { KNSB.class, KNSU.class, KNER.class, -- 2.30.2