Made a crappy motor editor
authorBill Kuker <bkuker@billkuker.com>
Thu, 16 Apr 2009 14:42:59 +0000 (14:42 +0000)
committerBill Kuker <bkuker@billkuker.com>
Thu, 16 Apr 2009 14:42:59 +0000 (14:42 +0000)
.classpath
MotorIOTest.xml
XStreamMotor.xml [new file with mode: 0644]
rsyntaxtextarea.jar [new file with mode: 0644]
src/com/billkuker/rocketry/motorsim/io/MotorIO.java
src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java
src/com/billkuker/rocketry/motorsim/visual/CrappyEditor.java

index 3a22977ae6d175eebc36ec172b1088addd716146..189b53bd88d0f6455727bde3aea3fc3ca022416d 100644 (file)
@@ -9,6 +9,7 @@
        <classpathentry kind="lib" path="l2fprod-common-sheet.jar"/>\r
        <classpathentry kind="lib" path="xstream-1.3.jar"/>\r
        <classpathentry kind="lib" path="xpp3_min-1.1.4c.jar"/>\r
+       <classpathentry kind="lib" path="rsyntaxtextarea.jar"/>\r
        <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>\r
        <classpathentry kind="output" path="bin"/>\r
 </classpath>\r
index 786105e477e9af6a8fc04b81d84c79b7651438b9..ab983211e0c3d5f14c09b984778c4b0c0ad8d6d1 100644 (file)
@@ -1,5 +1,5 @@
 <object-stream>
-  <com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+  <com.billkuker.rocketry.motorsim.Motor>
     <chamber class="com.billkuker.rocketry.motorsim.CylindricalChamber">
       <length>200 mm</length>
       <iD>30 mm</iD>
@@ -27,6 +27,6 @@
     <fuel class="com.billkuker.rocketry.motorsim.fuel.KNSU">
       <t>English</t>
     </fuel>
-    <name>PVC9</name>
-  </com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+    <name>IOTestMotor</name>
+  </com.billkuker.rocketry.motorsim.Motor>
 </object-stream>
\ No newline at end of file
diff --git a/XStreamMotor.xml b/XStreamMotor.xml
new file mode 100644 (file)
index 0000000..786105e
--- /dev/null
@@ -0,0 +1,32 @@
+<object-stream>
+  <com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+    <chamber class="com.billkuker.rocketry.motorsim.CylindricalChamber">
+      <length>200 mm</length>
+      <iD>30 mm</iD>
+    </chamber>
+    <grain class="com.billkuker.rocketry.motorsim.grain.MultiGrain">
+      <grain class="com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain">
+        <foreEndInhibited>false</foreEndInhibited>
+        <aftEndInhibited>false</aftEndInhibited>
+        <length>70 mm</length>
+        <endLight>0 mm</endLight>
+        <oD>29 mm</oD>
+        <iD>8 mm</iD>
+        <outerSurfaceInhibited>true</outerSurfaceInhibited>
+        <innerSurfaceInhibited>false</innerSurfaceInhibited>
+      </grain>
+      <count>2</count>
+      <flush>1.0</flush>
+      <delay>0 mm</delay>
+    </grain>
+    <nozzle class="com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle">
+      <throatDiameter>7.9 mm</throatDiameter>
+      <exitDiameter>9 mm</exitDiameter>
+      <efficiency>0.87</efficiency>
+    </nozzle>
+    <fuel class="com.billkuker.rocketry.motorsim.fuel.KNSU">
+      <t>English</t>
+    </fuel>
+    <name>PVC9</name>
+  </com.billkuker.rocketry.motorsim.motors.kuker.PVC9>
+</object-stream>
\ No newline at end of file
diff --git a/rsyntaxtextarea.jar b/rsyntaxtextarea.jar
new file mode 100644 (file)
index 0000000..88cb369
Binary files /dev/null and b/rsyntaxtextarea.jar differ
index 602dae9d787f2053e9276673020f3a42fe5965b2..5342f12d1ffd881f10335bf4da323c64b4e8a21d 100644 (file)
@@ -1,12 +1,14 @@
 package com.billkuker.rocketry.motorsim.io;\r
 \r
+import java.beans.XMLDecoder;\r
 import java.io.File;\r
+import java.io.FileInputStream;\r
 import java.io.FileReader;\r
 import java.io.FileWriter;\r
-import java.io.IOError;\r
 import java.io.IOException;\r
 import java.io.ObjectInputStream;\r
 import java.io.ObjectOutputStream;\r
+import java.io.StringReader;\r
 import java.io.StringWriter;\r
 \r
 import org.jscience.physics.amount.Amount;\r
@@ -17,6 +19,7 @@ import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.converters.Converter;\r
 import com.thoughtworks.xstream.converters.MarshallingContext;\r
 import com.thoughtworks.xstream.converters.UnmarshallingContext;\r
+import com.thoughtworks.xstream.converters.javabean.JavaBeanConverter;\r
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;\r
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;\r
 \r
@@ -45,6 +48,7 @@ public class MotorIO {
                \r
        \r
        }\r
+\r
        \r
        private static XStream getXStream(){\r
                XStream xstream = new XStream();\r
@@ -52,6 +56,7 @@ public class MotorIO {
                xstream.omitField(MotorPart.class, "pcs");\r
                xstream.omitField(MotorPart.class, "vcs");\r
                xstream.registerConverter(new AmountConverter());\r
+               xstream.registerConverter(new JavaBeanConverter(xstream.getClassMapper(), "class"), -20); \r
                return xstream;\r
        }\r
        \r
@@ -64,14 +69,35 @@ public class MotorIO {
        }\r
        \r
        public static Motor readMotor(File f) throws IOException{\r
-               ObjectInputStream in = getXStream().createObjectInputStream(new FileReader(f));\r
+               FileReader fin = new FileReader(f);\r
+               ObjectInputStream in = getXStream().createObjectInputStream(fin);\r
                Motor m;\r
                try {\r
                        m = (Motor)in.readObject();\r
                } catch (ClassNotFoundException e) {\r
-                       throw new IOException("Can not read motor: Class not found.", e);\r
+                       throw new IOException("Class not found", e);\r
                }\r
                return m;\r
        }\r
        \r
+       public static String writeMotor(Motor m) throws IOException{\r
+               StringWriter sout = new StringWriter();\r
+               ObjectOutputStream out = getXStream().createObjectOutputStream(sout);\r
+               out.writeObject(m);\r
+               out.close();\r
+               sout.close();\r
+               return sout.toString();\r
+       }\r
+       \r
+       public static Motor readMotor(String s) throws IOException{\r
+               StringReader sin = new StringReader(s);\r
+               ObjectInputStream in = getXStream().createObjectInputStream(sin);\r
+               Motor m;\r
+               try {\r
+                       m = (Motor)in.readObject();\r
+               } catch (ClassNotFoundException e) {\r
+                       throw new IOException("Class not found", e);\r
+               }\r
+               return m;\r
+       }\r
 }\r
index efcd31fd302eb595c60c114284a6e1784a301353..786d0b054552fa9140dd543f69913161b883992e 100644 (file)
@@ -1,25 +1,57 @@
 package com.billkuker.rocketry.motorsim.test;\r
 \r
+import java.beans.PropertyVetoException;\r
 import java.io.File;\r
 \r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
 import org.junit.Test;\r
 \r
+import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
+import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
 import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
 import com.billkuker.rocketry.motorsim.io.MotorIO;\r
 import com.billkuker.rocketry.motorsim.motors.kuker.PVC9;\r
 \r
-\r
 public class MotorIOTest {\r
 \r
        @Test\r
-       public void testReadWrite() throws Exception{\r
-               Motor m = new PVC9();\r
+       public void testReadWrite() throws Exception {\r
+               Motor m = new Motor();\r
+               m.setName("IOTestMotor");\r
+               m.setFuel(new KNSU());\r
+\r
+               CylindricalChamber c = new CylindricalChamber();\r
+               c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+               c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+               m.setChamber(c);\r
+\r
+               CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+               try {\r
+                       g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+                       g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
+                       g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
+               } catch (PropertyVetoException v) {\r
+                       throw new Error(v);\r
+               }\r
+\r
+               m.setGrain(new MultiGrain(g, 2));\r
+\r
+               ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
+               n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
+               n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
+               n.setEfficiency(.87);\r
+               m.setNozzle(n);\r
+\r
                File f = new File("MotorIOTest.xml");\r
-               \r
+\r
                MotorIO.writeMotor(m, f);\r
-               \r
+\r
                Motor r = MotorIO.readMotor(f);\r
-               \r
-       \r
+\r
        }\r
 }\r
index 456682898bcf30589c0cf8bbe847028495a7fe9d..ec6072adf9c9a8f44b7fda0565defda7dff5d86e 100644 (file)
@@ -1,39 +1,69 @@
 package com.billkuker.rocketry.motorsim.visual;\r
 \r
 import java.awt.BorderLayout;\r
+import java.awt.FlowLayout;\r
 import java.awt.event.ActionEvent;\r
 import java.awt.event.ActionListener;\r
+import java.beans.PropertyVetoException;\r
 import java.io.IOException;\r
 \r
+import javax.measure.unit.SI;\r
 import javax.swing.JButton;\r
 import javax.swing.JFrame;\r
 import javax.swing.JPanel;\r
 import javax.swing.JTabbedPane;\r
 import javax.swing.JTextArea;\r
+import javax.swing.UIManager;\r
+import javax.swing.UnsupportedLookAndFeelException;\r
 import javax.swing.border.Border;\r
 \r
+import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;\r
+import org.fife.ui.rsyntaxtextarea.SyntaxConstants;\r
+import org.jscience.physics.amount.Amount;\r
+\r
 import com.billkuker.rocketry.motorsim.Burn;\r
-import com.billkuker.rocketry.motorsim.io.XStreamMotorIO;\r
+import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
+import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
+import com.billkuker.rocketry.motorsim.io.MotorIO;\r
 import com.billkuker.rocketry.motorsim.motors.kuker.PVC9;\r
 \r
 public class CrappyEditor extends JFrame {\r
-       JTabbedPane tabs = new JTabbedPane();\r
-       JPanel editor = new JPanel();\r
-       JTextArea text = new JTextArea();\r
+       JTabbedPane tabs;\r
+       JPanel editor;\r
+       //JTextArea text = new JTextArea();\r
+       RSyntaxTextArea text;\r
        public CrappyEditor(){\r
+               try {\r
+                       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());\r
+               } catch (Exception e1) {\r
+                       e1.printStackTrace();\r
+               }\r
+\r
+               tabs = new JTabbedPane();\r
+               editor = new JPanel();\r
+               text = new RSyntaxTextArea();\r
+               \r
+               setTitle("MotorSim v0.1");\r
                setSize(1024, 768);\r
                \r
                setContentPane(tabs);\r
                \r
+               text.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_XML);\r
+               \r
                try {\r
-                       text.setText(XStreamMotorIO.writeMotor(new PVC9()));\r
+                       text.setText(MotorIO.writeMotor(defaultMotor()));\r
                } catch (IOException e) {\r
                        e.printStackTrace();\r
                }\r
                \r
                editor.setLayout(new BorderLayout());\r
                editor.add(text, BorderLayout.CENTER);\r
-               editor.add(new JButton("Burn!"){\r
+               JPanel buttons = new JPanel(new FlowLayout());\r
+               buttons.add(new JButton("Burn!"){\r
                        {\r
                                addActionListener(new ActionListener(){\r
                                        public void actionPerformed(ActionEvent arg0) {\r
@@ -41,18 +71,50 @@ public class CrappyEditor extends JFrame {
                                        }\r
                                });\r
                        }\r
+               });\r
                        \r
-               }, BorderLayout.SOUTH);\r
+               editor.add(buttons, BorderLayout.SOUTH);\r
                \r
                tabs.addTab("Edit", editor);\r
                \r
                \r
        }\r
        \r
+       private Motor defaultMotor(){\r
+               Motor m = new Motor();\r
+               m.setName("PVC9");\r
+               m.setFuel(new KNSU());\r
+\r
+               CylindricalChamber c = new CylindricalChamber();\r
+               c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+               c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+               m.setChamber(c);\r
+\r
+               CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+               try {\r
+                       g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+                       g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
+                       g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
+               } catch (PropertyVetoException v) {\r
+                       throw new Error(v);\r
+               }\r
+\r
+               m.setGrain(new MultiGrain(g, 2));\r
+\r
+               ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
+               n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
+               n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
+               n.setEfficiency(.87);\r
+               m.setNozzle(n);\r
+               \r
+               return m;\r
+       }\r
+       \r
        private void burn(){\r
                try {\r
-                       Burn b = new Burn(XStreamMotorIO.readMotor(text.getText()));\r
-                       tabs.addTab("Burn", new BurnPanel(b));\r
+                       Motor m = MotorIO.readMotor(text.getText());\r
+                       Burn b = new Burn(m);\r
+                       tabs.addTab(m.getName() + " Output", new BurnPanel(b));\r
                } catch (IOException e) {\r
                        e.printStackTrace();\r
                }\r