]> git.gag.com Git - sw/motorsim/blob - src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java
Renamed some things, added some new fuels
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / visual / CrappyEditor.java
1 package com.billkuker.rocketry.motorsim.visual;\r
2 \r
3 import java.awt.BorderLayout;\r
4 import java.awt.FlowLayout;\r
5 import java.awt.event.ActionEvent;\r
6 import java.awt.event.ActionListener;\r
7 import java.beans.PropertyVetoException;\r
8 import java.io.IOException;\r
9 \r
10 import javax.measure.unit.SI;\r
11 import javax.swing.ButtonGroup;\r
12 import javax.swing.JButton;\r
13 import javax.swing.JFrame;\r
14 import javax.swing.JPanel;\r
15 import javax.swing.JRadioButton;\r
16 import javax.swing.JTabbedPane;\r
17 import javax.swing.JTextArea;\r
18 import javax.swing.UIManager;\r
19 import javax.swing.UnsupportedLookAndFeelException;\r
20 import javax.swing.border.Border;\r
21 \r
22 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;\r
23 import org.fife.ui.rsyntaxtextarea.SyntaxConstants;\r
24 import org.jscience.physics.amount.Amount;\r
25 \r
26 import com.billkuker.rocketry.motorsim.Burn;\r
27 import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
28 import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
29 import com.billkuker.rocketry.motorsim.Motor;\r
30 import com.billkuker.rocketry.motorsim.RocketScience;\r
31 import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;\r
32 import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
33 import com.billkuker.rocketry.motorsim.fuel.EditableFuel;\r
34 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
35 import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
36 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
37 import com.billkuker.rocketry.motorsim.motors.kuker.PVC9;\r
38 \r
39 public class CrappyEditor extends JFrame {\r
40         JTabbedPane tabs;\r
41         JPanel editor;\r
42         //JTextArea text = new JTextArea();\r
43         RSyntaxTextArea text;\r
44         public CrappyEditor(){\r
45                 setDefaultCloseOperation(DISPOSE_ON_CLOSE);\r
46                 try {\r
47                         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\r
48                 } catch (Exception e1) {\r
49                         e1.printStackTrace();\r
50                 }\r
51 \r
52                 tabs = new JTabbedPane();\r
53                 editor = new JPanel();\r
54                 text = new RSyntaxTextArea();\r
55                 \r
56                 setTitle("MotorSim v0.1");\r
57                 setSize(1024, 768);\r
58                 \r
59                 setContentPane(tabs);\r
60                 \r
61                 text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);\r
62                 \r
63                 try {\r
64                         text.setText(MotorIO.writeMotor(defaultMotor()));\r
65                 } catch (IOException e) {\r
66                         e.printStackTrace();\r
67                 }\r
68                 \r
69                 editor.setLayout(new BorderLayout());\r
70                 editor.add(text, BorderLayout.CENTER);\r
71                 JPanel buttons = new JPanel(new FlowLayout());\r
72                 \r
73                 buttons.add(new JButton("Burn!"){\r
74                         {\r
75                                 addActionListener(new ActionListener(){\r
76                                         public void actionPerformed(ActionEvent arg0) {\r
77                                                 burn();\r
78                                         }\r
79                                 });\r
80                         }\r
81                 });\r
82                 \r
83                 {\r
84                         JRadioButton s, n;\r
85                         buttons.add(s = new JRadioButton("SI"));\r
86                         buttons.add(n = new JRadioButton("NonSI"));\r
87                         ButtonGroup g = new ButtonGroup();\r
88                         g.add(s);\r
89                         g.add(n);\r
90                         s.setSelected(true);\r
91                         s.addActionListener(new ActionListener(){\r
92                                 public void actionPerformed(ActionEvent arg0) {\r
93                                         UnitPreference.preference = UnitPreference.SI;  \r
94                                 }\r
95                         });\r
96                         n.addActionListener(new ActionListener(){\r
97                                 public void actionPerformed(ActionEvent arg0) {\r
98                                         UnitPreference.preference = UnitPreference.NONSI;       \r
99                                 }\r
100                         });\r
101                 }\r
102                 \r
103                 editor.add(buttons, BorderLayout.SOUTH);\r
104                 \r
105                 tabs.addTab("Edit", editor);\r
106                 \r
107                 \r
108         }\r
109         \r
110         private Motor defaultMotor(){\r
111                 Motor m = new Motor();\r
112                 m.setName("PVC9");\r
113                 m.setFuel(new KNSU());\r
114 \r
115                 CylindricalChamber c = new CylindricalChamber();\r
116                 c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
117                 c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
118                 m.setChamber(c);\r
119 \r
120                 CoredCylindricalGrain g = new CoredCylindricalGrain();\r
121                 try {\r
122                         g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
123                         g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
124                         g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
125                 } catch (PropertyVetoException v) {\r
126                         throw new Error(v);\r
127                 }\r
128 \r
129                 m.setGrain(new MultiGrain(g, 2));\r
130 \r
131                 ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
132                 n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
133                 n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
134                 n.setEfficiency(.87);\r
135                 m.setNozzle(n);\r
136                 \r
137                 return m;\r
138         }\r
139         \r
140         private void burn(){\r
141                 try {\r
142                         Motor m = MotorIO.readMotor(text.getText());\r
143                         Burn b = new Burn(m);\r
144                         tabs.addTab(m.getName() + " Output", new BurnPanel(b));\r
145                 } catch (IOException e) {\r
146                         e.printStackTrace();\r
147                 }\r
148         }\r
149         \r
150         public static void main(String args[]){\r
151                 new CrappyEditor().show();\r
152         }\r
153 }\r