package com.billkuker.rocketry.motorsim.grain;\r
\r
import java.awt.geom.Area;\r
+import java.beans.PropertyChangeListener;\r
import java.util.HashSet;\r
import java.util.Set;\r
\r
import org.jscience.physics.amount.Amount;\r
\r
import com.billkuker.rocketry.motorsim.Grain;\r
+import com.billkuker.rocketry.motorsim.MotorPart;\r
\r
-public class CompoundGrain implements Grain {\r
+public class CompoundGrain extends MotorPart implements Grain {\r
\r
private Set<Grain> grains = new HashSet<Grain>();\r
\r
public void add( Grain g ){\r
grains.add(g);\r
}\r
+ \r
+ public void addPropertyChangeListener(PropertyChangeListener listener) {\r
+ for ( Grain g : grains )\r
+ if ( g instanceof MotorPart )\r
+ ((MotorPart)g).addPropertyChangeListener(listener);\r
+ }\r
+\r
+ public void removePropertyChangeListener(PropertyChangeListener listener) {\r
+ for ( Grain g : grains )\r
+ if ( g instanceof MotorPart )\r
+ ((MotorPart)g).removePropertyChangeListener(listener);\r
+ }\r
\r
public Area getCrossSection(Amount<Length> regression) {\r
Area a = new Area();\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.grain;\r
+\r
+import java.beans.PropertyVetoException;\r
+\r
+import javax.measure.quantity.Length;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+\r
+import com.billkuker.rocketry.motorsim.Grain;\r
+\r
+public class RodAndTubeGrain extends CompoundGrain {\r
+ CoredCylindricalGrain rod, tube;\r
+ \r
+ public RodAndTubeGrain() {\r
+ try{\r
+ rod = new CoredCylindricalGrain();\r
+ rod.setInnerSurfaceInhibited(true);\r
+ rod.setID(Amount.valueOf(0, SI.MILLIMETER));\r
+ rod.setOD(Amount.valueOf(10, SI.MILLIMETER));\r
+ rod.setOuterSurfaceInhibited(false);\r
+ rod.setEndSurfaceInhibited(true);\r
+ \r
+ tube = new CoredCylindricalGrain();\r
+ tube.setInnerSurfaceInhibited(false);\r
+ tube.setID(Amount.valueOf(20, SI.MILLIMETER));\r
+ tube.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+ tube.setOuterSurfaceInhibited(true);\r
+ tube.setEndSurfaceInhibited(true);\r
+ } catch ( PropertyVetoException v ){\r
+ v.printStackTrace();\r
+ //I know these values are OK\r
+ }\r
+ \r
+ add(rod);\r
+ add(tube);\r
+ }\r
+\r
+ public Amount<Length> getRodDiameter() {\r
+ return rod.getOD();\r
+ }\r
+\r
+ public void setRodDiameter(Amount<Length> od) throws PropertyVetoException {\r
+ rod.setOD(od);\r
+ }\r
+\r
+ public Amount<Length> getTubeID() {\r
+ return tube.getID();\r
+ }\r
+\r
+ public void setTubeID(Amount<Length> id) throws PropertyVetoException {\r
+ tube.setID(id);\r
+ }\r
+ \r
+ public Amount<Length> getOd() {\r
+ return tube.getOD();\r
+ }\r
+\r
+ public void setOd(Amount<Length> od) throws PropertyVetoException {\r
+ tube.setOD(od);\r
+ }\r
+\r
+ public boolean isEndSurfaceInhibited() {\r
+ return rod.isEndSurfaceInhibited();\r
+ }\r
+\r
+ public void setEndSurfaceInhibited(boolean endSurfaceInhibited)\r
+ throws PropertyVetoException {\r
+ rod.setEndSurfaceInhibited(endSurfaceInhibited);\r
+ tube.setEndSurfaceInhibited(endSurfaceInhibited);\r
+ }\r
+\r
+ public Amount<Length> getLength() {\r
+ return rod.getLength();\r
+ }\r
+\r
+ public void setLength(Amount<Length> length) throws PropertyVetoException {\r
+ rod.setLength(length);\r
+ tube.setLength(length);\r
+ }\r
+\r
+}\r