1 package com.billkuker.rocketry.motorsim.grain;
3 import java.awt.geom.Rectangle2D;
4 import java.beans.PropertyChangeEvent;
5 import java.beans.PropertyChangeListener;
7 import javax.measure.quantity.Length;
8 import javax.measure.unit.SI;
10 import org.jscience.physics.amount.Amount;
12 import com.billkuker.rocketry.motorsim.Validating;
13 import com.billkuker.rocketry.motorsim.grain.util.BurningShape;
14 import com.billkuker.rocketry.motorsim.grain.util.RotatedShapeGrain;
16 public class EndBurner extends RotatedShapeGrain implements Validating {
18 private Amount<Length> length = Amount.valueOf(70, SI.MILLIMETER);
19 private Amount<Length> oD = Amount.valueOf(30, SI.MILLIMETER);
20 private Amount<Length> puntDiameter = Amount.valueOf(10, SI.MILLIMETER);
21 private Amount<Length> puntDepth = Amount.valueOf(10, SI.MILLIMETER);
23 private void generateGeometry(){
24 double len = length.doubleValue(SI.MILLIMETER);
25 double od = oD.doubleValue(SI.MILLIMETER);
26 double pdi = puntDiameter.doubleValue(SI.MILLIMETER);
27 double plen = puntDepth.doubleValue(SI.MILLIMETER);
29 Rectangle2D.Double grain, punt, end;
30 grain = new Rectangle2D.Double(0,0,od/2.0,len);
31 punt = new Rectangle2D.Double(0,len-plen, pdi/2.0, plen);
32 end = new Rectangle2D.Double(0,len,od,0);
34 shape = new BurningShape();
44 this.addPropertyChangeListener(new PropertyChangeListener(){
46 public void propertyChange(PropertyChangeEvent evt) {
53 public void validate() throws ValidationException {
54 if ( oD.equals(Amount.ZERO) )
55 throw new ValidationException(this, "Invalid oD");
56 if ( getLength().equals(Amount.ZERO) )
57 throw new ValidationException(this, "Invalid Length");
58 if ( puntDiameter.isGreaterThan(oD) )
59 throw new ValidationException(this, "puntDiameter > oD");
60 if ( puntDepth.isGreaterThan(length) )
61 throw new ValidationException(this, "puntDepth > length");
64 public Amount<Length> getLength() {
68 public void setLength(Amount<Length> length) {
72 public Amount<Length> getOD() {
76 public void setOD(Amount<Length> oD) {
80 public Amount<Length> getPuntDiameter() {
84 public void setPuntDiameter(Amount<Length> puntDiameter) {
85 this.puntDiameter = puntDiameter;
88 public Amount<Length> getPuntDepth() {
92 public void setPuntDepth(Amount<Length> puntDepth) {
93 this.puntDepth = puntDepth;