import java.awt.Graphics2D;\r
import java.awt.Rectangle;\r
import java.awt.Shape;\r
+import java.awt.geom.Area;\r
import java.beans.PropertyChangeEvent;\r
import java.beans.PropertyChangeListener;\r
\r
import com.billkuker.rocketry.motorsim.ChangeListening;\r
import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
+import com.billkuker.rocketry.motorsim.Motor;\r
import com.billkuker.rocketry.motorsim.Nozzle;\r
+import com.billkuker.rocketry.motorsim.visual.workbench.MotorEditor;\r
\r
public class HardwarePanel extends JPanel {\r
private static final long serialVersionUID = 1L;\r
- private Nozzle nozzle;\r
- private Chamber chamber;\r
+ final Motor m;\r
\r
- public HardwarePanel(Nozzle n, Chamber c){\r
- nozzle = n;\r
- chamber = c;\r
- if ( n instanceof ChangeListening.Subject ){\r
- ((ChangeListening.Subject)n).addPropertyChangeListener(new PropertyChangeListener(){\r
- public void propertyChange(PropertyChangeEvent evt) {\r
- repaint();\r
- }\r
- });\r
+ \r
+ private PropertyChangeListener repainter = new PropertyChangeListener(){\r
+ public void propertyChange(PropertyChangeEvent evt) {\r
+ repaint();\r
+ }\r
+ };\r
+ \r
+ public HardwarePanel(Motor m){\r
+ this.m = m;\r
+ Nozzle nozzle = m.getNozzle();\r
+ Chamber chamber = m.getChamber();\r
+ if ( nozzle instanceof ChangeListening.Subject ){\r
+ ((ChangeListening.Subject)nozzle).addPropertyChangeListener(repainter);\r
}\r
- if ( c instanceof ChangeListening.Subject ){\r
- ((ChangeListening.Subject)c).addPropertyChangeListener(new PropertyChangeListener(){\r
- public void propertyChange(PropertyChangeEvent evt) {\r
- repaint();\r
- }\r
- });\r
+ if ( chamber instanceof ChangeListening.Subject ){\r
+ ((ChangeListening.Subject)chamber).addPropertyChangeListener(repainter);\r
}\r
}\r
\r
\r
g2d.setColor(Color.black);\r
\r
+ Nozzle nozzle = m.getNozzle();\r
+ Chamber chamber = m.getChamber();\r
+ \r
Shape c = chamber.chamberShape();\r
\r
Shape n = nozzle.nozzleShape(Amount.valueOf(c.getBounds().getWidth(), SI.MILLIMETER));\r
\r
+ \r
Rectangle cb = c.getBounds();\r
Rectangle nb = n.getBounds();\r
double w, h;\r
\r
g2d.setStroke(new BasicStroke(1));\r
g2d.draw( c );\r
+ \r
g2d.translate(0, cb.getHeight());\r
\r
g2d.draw(n);\r
+ \r
+ Shape grain = m.getGrain().getSideView(Amount.valueOf(0, SI.MILLIMETER));\r
+ Shape grain2 = m.getGrain().getSideView(Amount.valueOf(1, SI.MILLIMETER));\r
+ Area burning = new Area(grain);\r
+ burning.subtract(new Area(grain2));\r
+ Rectangle gb = grain.getBounds();\r
+ double x = -gb.getMaxX() + gb.getWidth()/2.0;\r
+ g2d.translate(x, -gb.getMaxY());\r
+ g2d.draw(grain);\r
+ g2d.setColor(Color.GRAY);\r
+ g2d.fill(grain);\r
+ g2d.setColor(Color.RED);\r
+ g2d.fill(burning);\r
}\r
\r
public void showAsWindow(){\r
}\r
\r
public static void main(String args[]) throws Exception{\r
- ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
- CylindricalChamber c = new CylindricalChamber();\r
- n.setThroatDiameter(Amount.valueOf(10, SI.MILLIMETER));\r
- n.setExitDiameter(Amount.valueOf(20, SI.MILLIMETER));\r
- //new Editor(n).showAsWindow();\r
- new HardwarePanel(n,c).showAsWindow();\r
+ Motor m = MotorEditor.defaultMotor();\r
+ new HardwarePanel(m).showAsWindow();\r
}\r
}\r