cleared some warnings
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / visual / HardwarePanel.java
1 package com.billkuker.rocketry.motorsim.visual;\r
2 \r
3 import java.awt.BasicStroke;\r
4 import java.awt.Color;\r
5 import java.awt.Graphics;\r
6 import java.awt.Graphics2D;\r
7 import java.awt.Rectangle;\r
8 import java.awt.Shape;\r
9 import java.beans.PropertyChangeEvent;\r
10 import java.beans.PropertyChangeListener;\r
11 \r
12 import javax.measure.unit.SI;\r
13 import javax.swing.JFrame;\r
14 import javax.swing.JPanel;\r
15 import javax.swing.WindowConstants;\r
16 \r
17 import org.jscience.physics.amount.Amount;\r
18 \r
19 import com.billkuker.rocketry.motorsim.Chamber;\r
20 import com.billkuker.rocketry.motorsim.ChangeListening;\r
21 import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
22 import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
23 import com.billkuker.rocketry.motorsim.Nozzle;\r
24 \r
25 public class HardwarePanel extends JPanel {\r
26         private static final long serialVersionUID = 1L;\r
27         private Nozzle nozzle;\r
28         private Chamber chamber;\r
29         \r
30         public HardwarePanel(Nozzle n, Chamber c){\r
31                 nozzle = n;\r
32                 chamber = c;\r
33                 if ( n instanceof ChangeListening.Subject ){\r
34                         ((ChangeListening.Subject)n).addPropertyChangeListener(new PropertyChangeListener(){\r
35                                 public void propertyChange(PropertyChangeEvent evt) {\r
36                                         repaint();\r
37                                 }\r
38                         });\r
39                 }\r
40                 if ( c instanceof ChangeListening.Subject ){\r
41                         ((ChangeListening.Subject)c).addPropertyChangeListener(new PropertyChangeListener(){\r
42                                 public void propertyChange(PropertyChangeEvent evt) {\r
43                                         repaint();\r
44                                 }\r
45                         });\r
46                 }\r
47         }\r
48         \r
49         public void paint(Graphics g){\r
50                 super.paint(g);\r
51                 Graphics2D g2d = (Graphics2D)g;\r
52                 g2d.translate(10, 10);\r
53 \r
54                 g2d.setColor(Color.black);\r
55                 \r
56                 Shape c = chamber.chamberShape();\r
57                 \r
58                 Shape n = nozzle.nozzleShape(((CylindricalChamber)chamber).getID());\r
59                 \r
60                 Rectangle cb = c.getBounds();\r
61                 Rectangle nb = n.getBounds();\r
62                 double w, h;\r
63                 w = Math.max(cb.getWidth(), nb.getWidth());\r
64                 h = cb.getHeight() + nb.getHeight();\r
65                 \r
66                 double mw, mh;\r
67                 mw = getHeight() - 10;\r
68                 mh = getWidth() - 10;\r
69                 \r
70                 double sw, sh, s;\r
71                 sw = mw / w;\r
72                 sh = mh / h;\r
73                 s = Math.min(sw, sh);\r
74                 \r
75                 g2d.rotate(-Math.PI / 2);\r
76                 \r
77                 g2d.translate(0, -cb.getY() - 5);\r
78                 g2d.scale(s, s);\r
79                 g2d.translate(-(getHeight()/(s*2)), 0);\r
80                 \r
81                 g2d.setStroke(new BasicStroke(1));\r
82                 g2d.draw( c );\r
83                 g2d.translate(0, cb.getHeight());\r
84                 \r
85                 g2d.draw(n);\r
86         }\r
87         \r
88         public void showAsWindow(){\r
89                 JFrame f = new JFrame();\r
90                 f.setSize(220,250);\r
91                 f.setContentPane(this);\r
92                 f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);\r
93                 f.setVisible(true);\r
94         }\r
95         \r
96         public static void main(String args[]) throws Exception{\r
97                 ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
98                 CylindricalChamber c = new CylindricalChamber();\r
99                 n.setThroatDiameter(Amount.valueOf(10, SI.MILLIMETER));\r
100                 n.setExitDiameter(Amount.valueOf(20, SI.MILLIMETER));\r
101                 //new Editor(n).showAsWindow();\r
102                 new HardwarePanel(n,c).showAsWindow();\r
103         }\r
104 }\r