Include grain in overall view
authorBill Kuker <bkuker@billkuker.com>
Mon, 8 Nov 2010 15:09:53 +0000 (15:09 +0000)
committerBill Kuker <bkuker@billkuker.com>
Mon, 8 Nov 2010 15:09:53 +0000 (15:09 +0000)
gui/com/billkuker/rocketry/motorsim/visual/HardwarePanel.java
gui/com/billkuker/rocketry/motorsim/visual/workbench/MotorEditor.java

index 7e95aa316d957f547144f9e777a1ea30b427e879..dff679ae35584a59fb4cef2875f282305e9f509e 100644 (file)
@@ -6,6 +6,7 @@ import java.awt.Graphics;
 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
@@ -20,29 +21,30 @@ import com.billkuker.rocketry.motorsim.Chamber;
 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
@@ -53,10 +55,14 @@ public class HardwarePanel extends JPanel {
 \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
@@ -80,9 +86,23 @@ public class HardwarePanel extends JPanel {
                \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
@@ -94,11 +114,7 @@ public class HardwarePanel extends JPanel {
        }\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
index 79c25453f522fbe4262a3d47cf065ec7343e6d4f..bd778cacf81b2fcc35a8db62f4cf0ff3cf8798f8 100644 (file)
@@ -265,8 +265,7 @@ public class MotorEditor extends JPanel implements PropertyChangeListener {
                        \r
                        if (hp != null)\r
                                remove(hp);\r
-                       setBottomComponent(hp = new HardwarePanel(motor.getNozzle(),\r
-                                       motor.getChamber()));\r
+                       setBottomComponent(hp = new HardwarePanel(motor));\r
                        if (motor.getNozzle() instanceof ChangeListening.Subject) {\r
                                ((ChangeListening.Subject) motor.getNozzle())\r
                                                .addPropertyChangeListener(MotorEditor.this);\r