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.JTextArea;
\r
18 import javax.swing.UIManager;
\r
19 import javax.swing.UnsupportedLookAndFeelException;
\r
20 import javax.swing.border.Border;
\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
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
39 public class CrappyEditor extends JFrame {
\r
42 //JTextArea text = new JTextArea();
\r
43 RSyntaxTextArea text;
\r
44 public CrappyEditor(){
\r
45 setDefaultCloseOperation(DISPOSE_ON_CLOSE);
\r
47 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
\r
48 } catch (Exception e1) {
\r
49 e1.printStackTrace();
\r
52 tabs = new JTabbedPane();
\r
53 editor = new JPanel();
\r
54 text = new RSyntaxTextArea();
\r
56 setTitle("MotorSim v0.1");
\r
59 setContentPane(tabs);
\r
61 text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);
\r
64 text.setText(MotorIO.writeMotor(defaultMotor()));
\r
65 } catch (IOException e) {
\r
66 e.printStackTrace();
\r
69 editor.setLayout(new BorderLayout());
\r
70 editor.add(text, BorderLayout.CENTER);
\r
71 JPanel buttons = new JPanel(new FlowLayout());
\r
73 buttons.add(new JButton("Burn!"){
\r
75 addActionListener(new ActionListener(){
\r
76 public void actionPerformed(ActionEvent arg0) {
\r
85 buttons.add(s = new JRadioButton("SI"));
\r
86 buttons.add(n = new JRadioButton("NonSI"));
\r
87 ButtonGroup g = new ButtonGroup();
\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
96 n.addActionListener(new ActionListener(){
\r
97 public void actionPerformed(ActionEvent arg0) {
\r
98 UnitPreference.preference = UnitPreference.NONSI;
\r
103 editor.add(buttons, BorderLayout.SOUTH);
\r
105 tabs.addTab("Edit", editor);
\r
110 private Motor defaultMotor(){
\r
111 Motor m = new Motor();
\r
113 m.setFuel(new KNSU());
\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
120 CoredCylindricalGrain g = new CoredCylindricalGrain();
\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
129 m.setGrain(new MultiGrain(g, 2));
\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
140 private void burn(){
\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
150 public static void main(String args[]){
\r
151 new CrappyEditor().show();
\r