From da2508f6cc2176a96d7b35ca8f958253b4a51186 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Mon, 8 Nov 2010 15:09:53 +0000 Subject: [PATCH] Include grain in overall view --- .../motorsim/visual/HardwarePanel.java | 62 ++++++++++++------- .../visual/workbench/MotorEditor.java | 3 +- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/gui/com/billkuker/rocketry/motorsim/visual/HardwarePanel.java b/gui/com/billkuker/rocketry/motorsim/visual/HardwarePanel.java index 7e95aa3..dff679a 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/HardwarePanel.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/HardwarePanel.java @@ -6,6 +6,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; +import java.awt.geom.Area; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -20,29 +21,30 @@ import com.billkuker.rocketry.motorsim.Chamber; import com.billkuker.rocketry.motorsim.ChangeListening; import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; import com.billkuker.rocketry.motorsim.CylindricalChamber; +import com.billkuker.rocketry.motorsim.Motor; import com.billkuker.rocketry.motorsim.Nozzle; +import com.billkuker.rocketry.motorsim.visual.workbench.MotorEditor; public class HardwarePanel extends JPanel { private static final long serialVersionUID = 1L; - private Nozzle nozzle; - private Chamber chamber; + final Motor m; - public HardwarePanel(Nozzle n, Chamber c){ - nozzle = n; - chamber = c; - if ( n instanceof ChangeListening.Subject ){ - ((ChangeListening.Subject)n).addPropertyChangeListener(new PropertyChangeListener(){ - public void propertyChange(PropertyChangeEvent evt) { - repaint(); - } - }); + + private PropertyChangeListener repainter = new PropertyChangeListener(){ + public void propertyChange(PropertyChangeEvent evt) { + repaint(); + } + }; + + public HardwarePanel(Motor m){ + this.m = m; + Nozzle nozzle = m.getNozzle(); + Chamber chamber = m.getChamber(); + if ( nozzle instanceof ChangeListening.Subject ){ + ((ChangeListening.Subject)nozzle).addPropertyChangeListener(repainter); } - if ( c instanceof ChangeListening.Subject ){ - ((ChangeListening.Subject)c).addPropertyChangeListener(new PropertyChangeListener(){ - public void propertyChange(PropertyChangeEvent evt) { - repaint(); - } - }); + if ( chamber instanceof ChangeListening.Subject ){ + ((ChangeListening.Subject)chamber).addPropertyChangeListener(repainter); } } @@ -53,10 +55,14 @@ public class HardwarePanel extends JPanel { g2d.setColor(Color.black); + Nozzle nozzle = m.getNozzle(); + Chamber chamber = m.getChamber(); + Shape c = chamber.chamberShape(); Shape n = nozzle.nozzleShape(Amount.valueOf(c.getBounds().getWidth(), SI.MILLIMETER)); + Rectangle cb = c.getBounds(); Rectangle nb = n.getBounds(); double w, h; @@ -80,9 +86,23 @@ public class HardwarePanel extends JPanel { g2d.setStroke(new BasicStroke(1)); g2d.draw( c ); + g2d.translate(0, cb.getHeight()); g2d.draw(n); + + Shape grain = m.getGrain().getSideView(Amount.valueOf(0, SI.MILLIMETER)); + Shape grain2 = m.getGrain().getSideView(Amount.valueOf(1, SI.MILLIMETER)); + Area burning = new Area(grain); + burning.subtract(new Area(grain2)); + Rectangle gb = grain.getBounds(); + double x = -gb.getMaxX() + gb.getWidth()/2.0; + g2d.translate(x, -gb.getMaxY()); + g2d.draw(grain); + g2d.setColor(Color.GRAY); + g2d.fill(grain); + g2d.setColor(Color.RED); + g2d.fill(burning); } public void showAsWindow(){ @@ -94,11 +114,7 @@ public class HardwarePanel extends JPanel { } public static void main(String args[]) throws Exception{ - ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); - CylindricalChamber c = new CylindricalChamber(); - n.setThroatDiameter(Amount.valueOf(10, SI.MILLIMETER)); - n.setExitDiameter(Amount.valueOf(20, SI.MILLIMETER)); - //new Editor(n).showAsWindow(); - new HardwarePanel(n,c).showAsWindow(); + Motor m = MotorEditor.defaultMotor(); + new HardwarePanel(m).showAsWindow(); } } diff --git a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java index 79c2545..bd778ca 100644 --- a/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java +++ b/gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java @@ -265,8 +265,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener { if (hp != null) remove(hp); - setBottomComponent(hp = new HardwarePanel(motor.getNozzle(), - motor.getChamber())); + setBottomComponent(hp = new HardwarePanel(motor)); if (motor.getNozzle() instanceof ChangeListening.Subject) { ((ChangeListening.Subject) motor.getNozzle()) .addPropertyChangeListener(MotorEditor.this); -- 2.47.2