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.2");
\r
41 setDefaultCloseOperation(DISPOSE_ON_CLOSE);
\r
45 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
\r
46 } catch (Exception e1) {
\r
47 e1.printStackTrace();
\r
49 tabs = new JTabbedPane();
\r
50 setContentPane(tabs);
\r
51 tabs.addTab("Edit", new Editor(defaultMotor()));
\r
55 private class Editor extends JPanel {
\r
56 RSyntaxTextArea text = new RSyntaxTextArea();
\r
59 setLayout(new BorderLayout());
\r
60 add(text, BorderLayout.CENTER);
\r
61 JPanel buttons = new JPanel(new FlowLayout());
\r
63 buttons.add(new JButton("Burn!") {
\r
65 addActionListener(new ActionListener() {
\r
66 public void actionPerformed(ActionEvent arg0) {
\r
75 buttons.add(s = new JRadioButton("SI"));
\r
76 buttons.add(n = new JRadioButton("NonSI"));
\r
77 ButtonGroup g = new ButtonGroup();
\r
80 s.setSelected(true);
\r
81 s.addActionListener(new ActionListener() {
\r
82 public void actionPerformed(ActionEvent arg0) {
\r
83 UnitPreference.preference = UnitPreference.SI;
\r
86 n.addActionListener(new ActionListener() {
\r
87 public void actionPerformed(ActionEvent arg0) {
\r
88 UnitPreference.preference = UnitPreference.NONSI;
\r
92 buttons.add(new JButton("End Burner Example") {
\r
94 addActionListener(new ActionListener() {
\r
95 public void actionPerformed(ActionEvent arg0) {
\r
96 tabs.addTab(getText(), new BurnPanel(new Burn(new EndBurner())));
\r
102 buttons.add(new JButton("C-Slot Example") {
\r
104 addActionListener(new ActionListener() {
\r
105 public void actionPerformed(ActionEvent arg0) {
\r
106 tabs.addTab(getText(), new BurnPanel(new Burn(new CSlot())));
\r
112 add(buttons, BorderLayout.SOUTH);
\r
113 text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);
\r
116 text.setText(MotorIO.writeMotor(m));
\r
117 } catch (IOException e) {
\r
118 e.printStackTrace();
\r
123 private void burn() {
\r
125 Motor m = MotorIO.readMotor(text.getText());
\r
126 Burn b = new Burn(m);
\r
127 tabs.addTab(m.getName() + " Output", new BurnPanel(b));
\r
128 } catch (IOException e) {
\r
129 e.printStackTrace();
\r
134 private Motor defaultMotor() {
\r
135 Motor m = new Motor();
\r
137 m.setFuel(new KNSU());
\r
139 CylindricalChamber c = new CylindricalChamber();
\r
140 c.setLength(Amount.valueOf(200, SI.MILLIMETER));
\r
141 c.setID(Amount.valueOf(25, SI.MILLIMETER));
\r
144 CoredCylindricalGrain g = new CoredCylindricalGrain();
\r
146 g.setLength(Amount.valueOf(70, SI.MILLIMETER));
\r
147 g.setOD(Amount.valueOf(23.5, SI.MILLIMETER));
\r
148 g.setID(Amount.valueOf(7.9375, SI.MILLIMETER));
\r
149 } catch (PropertyVetoException v) {
\r
150 throw new Error(v);
\r
153 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