1 package com.billkuker.rocketry.motorsim.visual;
\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
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.UIManager;
\r
19 import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
\r
20 import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
\r
21 import org.jscience.physics.amount.Amount;
\r
23 import com.billkuker.rocketry.motorsim.Burn;
\r
24 import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;
\r
25 import com.billkuker.rocketry.motorsim.CylindricalChamber;
\r
26 import com.billkuker.rocketry.motorsim.Motor;
\r
27 import com.billkuker.rocketry.motorsim.RocketScience.UnitPreference;
\r
28 import com.billkuker.rocketry.motorsim.fuel.KNSU;
\r
29 import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;
\r
30 import com.billkuker.rocketry.motorsim.grain.MultiGrain;
\r
31 import com.billkuker.rocketry.motorsim.io.MotorIO;
\r
32 import com.billkuker.rocketry.motorsim.motors.example.CSlot;
\r
33 import com.billkuker.rocketry.motorsim.motors.example.EndBurner;
\r
35 public class CrappyEditor extends JFrame {
\r
38 public CrappyEditor() {
\r
39 setTitle("MotorSim v0.3");
\r
41 setDefaultCloseOperation(DISPOSE_ON_CLOSE);
\r
44 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
\r
45 } catch (Exception e1) {
\r
46 e1.printStackTrace();
\r
48 tabs = new JTabbedPane();
\r
49 setContentPane(tabs);
\r
50 tabs.addTab("Edit", new Editor(defaultMotor()));
\r
54 private class Editor extends JPanel {
\r
55 RSyntaxTextArea text = new RSyntaxTextArea();
\r
58 setLayout(new BorderLayout());
\r
59 add(text, BorderLayout.CENTER);
\r
60 JPanel buttons = new JPanel(new FlowLayout());
\r
62 buttons.add(new JButton("Burn!") {
\r
64 addActionListener(new ActionListener() {
\r
65 public void actionPerformed(ActionEvent arg0) {
\r
74 buttons.add(s = new JRadioButton("SI"));
\r
75 buttons.add(n = new JRadioButton("NonSI"));
\r
76 ButtonGroup g = new ButtonGroup();
\r
79 s.setSelected(true);
\r
80 s.addActionListener(new ActionListener() {
\r
81 public void actionPerformed(ActionEvent arg0) {
\r
82 UnitPreference.preference = UnitPreference.SI;
\r
85 n.addActionListener(new ActionListener() {
\r
86 public void actionPerformed(ActionEvent arg0) {
\r
87 UnitPreference.preference = UnitPreference.NONSI;
\r
91 buttons.add(new JButton("End Burner Example") {
\r
93 addActionListener(new ActionListener() {
\r
94 public void actionPerformed(ActionEvent arg0) {
\r
95 tabs.addTab(getText(), new BurnPanel(new Burn(new EndBurner())));
\r
101 buttons.add(new JButton("C-Slot Example") {
\r
103 addActionListener(new ActionListener() {
\r
104 public void actionPerformed(ActionEvent arg0) {
\r
105 tabs.addTab(getText(), new BurnPanel(new Burn(new CSlot())));
\r
111 add(buttons, BorderLayout.SOUTH);
\r
112 text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);
\r
115 text.setText(MotorIO.writeMotor(m));
\r
116 } catch (IOException e) {
\r
117 e.printStackTrace();
\r
122 private void burn() {
\r
124 Motor m = MotorIO.readMotor(text.getText());
\r
125 Burn b = new Burn(m);
\r
126 tabs.addTab(m.getName() + " Output", new BurnPanel(b));
\r
127 } catch (IOException e) {
\r
128 e.printStackTrace();
\r
133 private Motor defaultMotor() {
\r
134 Motor m = new Motor();
\r
135 m.setName("Example Motor");
\r
136 m.setFuel(new KNSU());
\r
138 CylindricalChamber c = new CylindricalChamber();
\r
139 c.setLength(Amount.valueOf(200, SI.MILLIMETER));
\r
140 c.setID(Amount.valueOf(25, SI.MILLIMETER));
\r
143 CoredCylindricalGrain g = new CoredCylindricalGrain();
\r
145 g.setLength(Amount.valueOf(70, SI.MILLIMETER));
\r
146 g.setOD(Amount.valueOf(23.5, SI.MILLIMETER));
\r
147 g.setID(Amount.valueOf(7.9375, SI.MILLIMETER));
\r
148 } catch (PropertyVetoException v) {
\r
149 throw new Error(v);
\r
152 m.setGrain(new MultiGrain(g, 2));
\r
155 ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();
\r
156 n.setThroatDiameter(Amount.valueOf(7.962, SI.MILLIMETER));
\r
157 n.setExitDiameter(Amount.valueOf(13.79, SI.MILLIMETER));
\r
158 n.setEfficiency(.85);
\r
165 public static void main(String args[]) {
\r
166 new CrappyEditor().show();
\r