From bc07d36b9661af3a0d7b4de3d8211b9a80f77f01 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Tue, 8 Sep 2009 20:49:34 +0000 Subject: [PATCH] Added C-Slot --- .../rocketry/motorsim/grain/CSlot.java | 111 ++++++++++++++++++ .../visual/workbench/MotorEditor.java | 3 +- 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 src/com/billkuker/rocketry/motorsim/grain/CSlot.java diff --git a/src/com/billkuker/rocketry/motorsim/grain/CSlot.java b/src/com/billkuker/rocketry/motorsim/grain/CSlot.java new file mode 100644 index 0000000..aa9fd62 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/grain/CSlot.java @@ -0,0 +1,111 @@ +package com.billkuker.rocketry.motorsim.grain; + +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; +import java.beans.PropertyVetoException; + +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.ExtrudedShapeGrain; +import com.billkuker.rocketry.motorsim.visual.Editor; +import com.billkuker.rocketry.motorsim.visual.GrainPanel; + +public class CSlot extends ExtrudedShapeGrain implements Validating { + + private Amount oD = Amount.valueOf(30, SI.MILLIMETER); + private Amount iD = Amount.valueOf(0, SI.MILLIMETER); + private Amount slotWidth = Amount.valueOf(5, SI.MILLIMETER); + private Amount slotDepth = Amount.valueOf(15, SI.MILLIMETER); + + public CSlot(){ + try { + setLength(Amount.valueOf(70, SI.MILLIMETER)); + } catch (PropertyVetoException e) { + e.printStackTrace(); + } + generateGeometry(); + } + + public Amount getOD() { + return oD; + } + + public void setOD(Amount od) throws PropertyVetoException { + this.oD = od; + generateGeometry(); + } + + public Amount getSlotWidth() { + return slotWidth; + } + + public void setSlotWidth(Amount slotWidth) { + this.slotWidth = slotWidth; + generateGeometry(); + } + + public Amount getSlotDepth() { + return slotDepth; + } + + public void setSlotDepth(Amount slotDepth) { + this.slotDepth = slotDepth; + generateGeometry(); + } + + + + + private void generateGeometry() { + double odmm = oD.doubleValue(SI.MILLIMETER); + double wmm = slotWidth.doubleValue(SI.MILLIMETER); + double dmm = slotDepth.doubleValue(SI.MILLIMETER); + xsection = new BurningShape(); + Shape outside = new Ellipse2D.Double(0, 0, odmm, odmm); + xsection.add(outside); + xsection.inhibit(outside); + + double ymm = odmm/2.0 - wmm/2.0; //The Y position of the slot + double xmm = odmm - dmm; + Rectangle2D.Double slot; + slot = new Rectangle2D.Double(xmm, ymm, dmm, wmm); + xsection.subtract(slot); + + double idmm = iD.doubleValue(SI.MILLIMETER); + double idymm = odmm/2.0 - idmm/2.0; + double idxmm = xmm - idmm/2.0; + Ellipse2D.Double id = new Ellipse2D.Double(idxmm, idymm, idmm, idmm); + xsection.subtract(id); + + webThickness = null; + } + + public Amount getID() { + return iD; + } + + public void setID(Amount id) { + iD = id; + generateGeometry(); + } + + public static void main(String args[]) throws Exception { + CSlot e = new CSlot(); + new Editor(e).showAsWindow(); + new GrainPanel(e).showAsWindow(); + } + + public void validate() throws ValidationException{ + if ( oD.equals(Amount.ZERO) ) + throw new ValidationException(this, "Invalid oD"); + if ( getLength().equals(Amount.ZERO) ) + throw new ValidationException(this, "Invalid Length"); + } + +} diff --git a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index e66ff57..58a086d 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -46,6 +46,7 @@ import com.billkuker.rocketry.motorsim.fuel.KNDX; import com.billkuker.rocketry.motorsim.fuel.KNER; 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.Finocyl; import com.billkuker.rocketry.motorsim.grain.Moonburner; @@ -77,7 +78,7 @@ public class MotorEditor extends JTabbedPane implements PropertyChangeListener { @SuppressWarnings("unchecked") private Class[] grainTypes = { CoredCylindricalGrain.class, Finocyl.class, - Moonburner.class, RodAndTubeGrain.class }; + Moonburner.class, RodAndTubeGrain.class, CSlot.class }; @SuppressWarnings("unchecked") private Class[] fuelTypes = { KNSB.class, KNSU.class, KNER.class, -- 2.47.2