Added EndBurner with Punt
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / grain / EndBurner.java
1 package com.billkuker.rocketry.motorsim.grain;
2
3 import java.awt.geom.Rectangle2D;
4 import java.beans.PropertyChangeEvent;
5 import java.beans.PropertyChangeListener;
6
7 import javax.measure.quantity.Length;
8 import javax.measure.unit.SI;
9
10 import org.jscience.physics.amount.Amount;
11
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;
15
16 public class EndBurner extends RotatedShapeGrain implements Validating {
17
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);
22         
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);
28                 
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);
33                 
34                 shape = new BurningShape();
35                 web = null;
36                 
37                 shape.add(grain);
38                 shape.inhibit(grain);
39                 shape.subtract(punt);
40                 shape.subtract(end);
41         }
42         
43         public EndBurner(){
44                 this.addPropertyChangeListener(new PropertyChangeListener(){
45                         @Override
46                         public void propertyChange(PropertyChangeEvent evt) {
47                                 generateGeometry();
48                         }});
49                 generateGeometry();
50         }
51         
52         @Override
53         public void validate() throws ValidationException {
54                 // TODO Auto-generated method stub
55
56         }
57
58         public Amount<Length> getLength() {
59                 return length;
60         }
61
62         public void setLength(Amount<Length> length) {
63                 this.length = length;
64         }
65
66         public Amount<Length> getoD() {
67                 return oD;
68         }
69
70         public void setoD(Amount<Length> oD) {
71                 this.oD = oD;
72         }
73
74         public Amount<Length> getPuntDiameter() {
75                 return puntDiameter;
76         }
77
78         public void setPuntDiameter(Amount<Length> puntDiameter) {
79                 this.puntDiameter = puntDiameter;
80         }
81
82         public Amount<Length> getPuntDepth() {
83                 return puntDepth;
84         }
85
86         public void setPuntDepth(Amount<Length> puntDepth) {
87                 this.puntDepth = puntDepth;
88         }
89
90 }