From: Bill Kuker Date: Thu, 16 Apr 2009 14:42:59 +0000 (+0000) Subject: Made a crappy motor editor X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=ffe4319cadeeb7fd10d251187ab1b5c315e91738;p=sw%2Fmotorsim Made a crappy motor editor --- diff --git a/.classpath b/.classpath index 3a22977..189b53b 100644 --- a/.classpath +++ b/.classpath @@ -9,6 +9,7 @@ + diff --git a/MotorIOTest.xml b/MotorIOTest.xml index 786105e..ab98321 100644 --- a/MotorIOTest.xml +++ b/MotorIOTest.xml @@ -1,5 +1,5 @@ - + 200 mm 30 mm @@ -27,6 +27,6 @@ English - PVC9 - + IOTestMotor + \ No newline at end of file diff --git a/XStreamMotor.xml b/XStreamMotor.xml new file mode 100644 index 0000000..786105e --- /dev/null +++ b/XStreamMotor.xml @@ -0,0 +1,32 @@ + + + + 200 mm + 30 mm + + + + false + false + 70 mm + 0 mm + 29 mm + 8 mm + true + false + + 2 + 1.0 + 0 mm + + + 7.9 mm + 9 mm + 0.87 + + + English + + PVC9 + + \ No newline at end of file diff --git a/rsyntaxtextarea.jar b/rsyntaxtextarea.jar new file mode 100644 index 0000000..88cb369 Binary files /dev/null and b/rsyntaxtextarea.jar differ diff --git a/src/com/billkuker/rocketry/motorsim/io/MotorIO.java b/src/com/billkuker/rocketry/motorsim/io/MotorIO.java index 602dae9..5342f12 100644 --- a/src/com/billkuker/rocketry/motorsim/io/MotorIO.java +++ b/src/com/billkuker/rocketry/motorsim/io/MotorIO.java @@ -1,12 +1,14 @@ package com.billkuker.rocketry.motorsim.io; +import java.beans.XMLDecoder; import java.io.File; +import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; -import java.io.IOError; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.StringReader; import java.io.StringWriter; import org.jscience.physics.amount.Amount; @@ -17,6 +19,7 @@ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.converters.javabean.JavaBeanConverter; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; @@ -45,6 +48,7 @@ public class MotorIO { } + private static XStream getXStream(){ XStream xstream = new XStream(); @@ -52,6 +56,7 @@ public class MotorIO { xstream.omitField(MotorPart.class, "pcs"); xstream.omitField(MotorPart.class, "vcs"); xstream.registerConverter(new AmountConverter()); + xstream.registerConverter(new JavaBeanConverter(xstream.getClassMapper(), "class"), -20); return xstream; } @@ -64,14 +69,35 @@ public class MotorIO { } public static Motor readMotor(File f) throws IOException{ - ObjectInputStream in = getXStream().createObjectInputStream(new FileReader(f)); + FileReader fin = new FileReader(f); + ObjectInputStream in = getXStream().createObjectInputStream(fin); Motor m; try { m = (Motor)in.readObject(); } catch (ClassNotFoundException e) { - throw new IOException("Can not read motor: Class not found.", e); + throw new IOException("Class not found", e); } return m; } + public static String writeMotor(Motor m) throws IOException{ + StringWriter sout = new StringWriter(); + ObjectOutputStream out = getXStream().createObjectOutputStream(sout); + out.writeObject(m); + out.close(); + sout.close(); + return sout.toString(); + } + + public static Motor readMotor(String s) throws IOException{ + StringReader sin = new StringReader(s); + ObjectInputStream in = getXStream().createObjectInputStream(sin); + Motor m; + try { + m = (Motor)in.readObject(); + } catch (ClassNotFoundException e) { + throw new IOException("Class not found", e); + } + return m; + } } diff --git a/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java b/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java index efcd31f..786d0b0 100644 --- a/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java +++ b/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java @@ -1,25 +1,57 @@ package com.billkuker.rocketry.motorsim.test; +import java.beans.PropertyVetoException; import java.io.File; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; import org.junit.Test; +import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; +import com.billkuker.rocketry.motorsim.CylindricalChamber; import com.billkuker.rocketry.motorsim.Motor; +import com.billkuker.rocketry.motorsim.fuel.KNSU; +import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; +import com.billkuker.rocketry.motorsim.grain.MultiGrain; import com.billkuker.rocketry.motorsim.io.MotorIO; import com.billkuker.rocketry.motorsim.motors.kuker.PVC9; - public class MotorIOTest { @Test - public void testReadWrite() throws Exception{ - Motor m = new PVC9(); + public void testReadWrite() throws Exception { + Motor m = new Motor(); + m.setName("IOTestMotor"); + m.setFuel(new KNSU()); + + CylindricalChamber c = new CylindricalChamber(); + c.setLength(Amount.valueOf(200, SI.MILLIMETER)); + c.setID(Amount.valueOf(30, SI.MILLIMETER)); + m.setChamber(c); + + CoredCylindricalGrain g = new CoredCylindricalGrain(); + try { + g.setLength(Amount.valueOf(70, SI.MILLIMETER)); + g.setOD(Amount.valueOf(29, SI.MILLIMETER)); + g.setID(Amount.valueOf(8, SI.MILLIMETER)); + } catch (PropertyVetoException v) { + throw new Error(v); + } + + m.setGrain(new MultiGrain(g, 2)); + + ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); + n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER)); + n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER)); + n.setEfficiency(.87); + m.setNozzle(n); + File f = new File("MotorIOTest.xml"); - + MotorIO.writeMotor(m, f); - + Motor r = MotorIO.readMotor(f); - - + } } diff --git a/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java b/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java index 4566828..ec6072a 100644 --- a/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java +++ b/src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java @@ -1,39 +1,69 @@ package com.billkuker.rocketry.motorsim.visual; import java.awt.BorderLayout; +import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.beans.PropertyVetoException; import java.io.IOException; +import javax.measure.unit.SI; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JTextArea; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.Border; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; +import org.jscience.physics.amount.Amount; + import com.billkuker.rocketry.motorsim.Burn; -import com.billkuker.rocketry.motorsim.io.XStreamMotorIO; +import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; +import com.billkuker.rocketry.motorsim.CylindricalChamber; +import com.billkuker.rocketry.motorsim.Motor; +import com.billkuker.rocketry.motorsim.fuel.KNSU; +import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; +import com.billkuker.rocketry.motorsim.grain.MultiGrain; +import com.billkuker.rocketry.motorsim.io.MotorIO; import com.billkuker.rocketry.motorsim.motors.kuker.PVC9; public class CrappyEditor extends JFrame { - JTabbedPane tabs = new JTabbedPane(); - JPanel editor = new JPanel(); - JTextArea text = new JTextArea(); + JTabbedPane tabs; + JPanel editor; + //JTextArea text = new JTextArea(); + RSyntaxTextArea text; public CrappyEditor(){ + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e1) { + e1.printStackTrace(); + } + + tabs = new JTabbedPane(); + editor = new JPanel(); + text = new RSyntaxTextArea(); + + setTitle("MotorSim v0.1"); setSize(1024, 768); setContentPane(tabs); + text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML); + try { - text.setText(XStreamMotorIO.writeMotor(new PVC9())); + text.setText(MotorIO.writeMotor(defaultMotor())); } catch (IOException e) { e.printStackTrace(); } editor.setLayout(new BorderLayout()); editor.add(text, BorderLayout.CENTER); - editor.add(new JButton("Burn!"){ + JPanel buttons = new JPanel(new FlowLayout()); + buttons.add(new JButton("Burn!"){ { addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { @@ -41,18 +71,50 @@ public class CrappyEditor extends JFrame { } }); } + }); - }, BorderLayout.SOUTH); + editor.add(buttons, BorderLayout.SOUTH); tabs.addTab("Edit", editor); } + private Motor defaultMotor(){ + Motor m = new Motor(); + m.setName("PVC9"); + m.setFuel(new KNSU()); + + CylindricalChamber c = new CylindricalChamber(); + c.setLength(Amount.valueOf(200, SI.MILLIMETER)); + c.setID(Amount.valueOf(30, SI.MILLIMETER)); + m.setChamber(c); + + CoredCylindricalGrain g = new CoredCylindricalGrain(); + try { + g.setLength(Amount.valueOf(70, SI.MILLIMETER)); + g.setOD(Amount.valueOf(29, SI.MILLIMETER)); + g.setID(Amount.valueOf(8, SI.MILLIMETER)); + } catch (PropertyVetoException v) { + throw new Error(v); + } + + m.setGrain(new MultiGrain(g, 2)); + + ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); + n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER)); + n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER)); + n.setEfficiency(.87); + m.setNozzle(n); + + return m; + } + private void burn(){ try { - Burn b = new Burn(XStreamMotorIO.readMotor(text.getText())); - tabs.addTab("Burn", new BurnPanel(b)); + Motor m = MotorIO.readMotor(text.getText()); + Burn b = new Burn(m); + tabs.addTab(m.getName() + " Output", new BurnPanel(b)); } catch (IOException e) { e.printStackTrace(); }