geodetic computation file storage
authorplaa <plaa@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sun, 28 Aug 2011 14:57:08 +0000 (14:57 +0000)
committerplaa <plaa@180e2498-e6e9-4542-8430-84ac67f01cd8>
Sun, 28 Aug 2011 14:57:08 +0000 (14:57 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@166 180e2498-e6e9-4542-8430-84ac67f01cd8

fileformat.txt
src/net/sf/openrocket/file/openrocket/OpenRocketLoader.java
src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java

index 36fe9e17b5d4eabf27edb70d16daef64f2fcebdf..9e04dcfffc392a7bc469c1004f685e4d5dc7387a 100644 (file)
@@ -36,3 +36,6 @@ The following file format versions exist:
       motor definitions.  The digest uniquely identifies the
       functional characteristics of a particular thrust curve motor.
 
+1.3:  Introduced with OpenRocket 1.1.9.  Adds the <launchlongitude> and
+      <geodeticmethod> parameters to the simulation conditions element.
+
index 7719e0e2c4fbed9fe14d67430aea934464435426..4c5eb72a0ebd7a9967e53600f0e278dbb43f7c37 100644 (file)
@@ -74,6 +74,7 @@ import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.unit.UnitGroup;
 import net.sf.openrocket.util.BugException;
 import net.sf.openrocket.util.Coordinate;
+import net.sf.openrocket.util.GeodeticComputationStrategy;
 import net.sf.openrocket.util.LineStyle;
 import net.sf.openrocket.util.Reflection;
 
@@ -158,7 +159,7 @@ public class OpenRocketLoader extends RocketLoader {
 class DocumentConfig {
        
        /* Remember to update OpenRocketSaver as well! */
-       public static final String[] SUPPORTED_VERSIONS = { "0.9", "1.0", "1.1", "1.2" };
+       public static final String[] SUPPORTED_VERSIONS = { "0.9", "1.0", "1.1", "1.2", "1.3" };
        
 
        ////////  Component constructors
@@ -1289,6 +1290,8 @@ class SimulationConditionsHandler extends ElementHandler {
        
        public SimulationConditionsHandler(Rocket rocket) {
                conditions = new SimulationOptions(rocket);
+               // Set up default loading settings (which may differ from the new defaults)
+               conditions.setGeodeticComputation(GeodeticComputationStrategy.NONE);
        }
        
        public SimulationOptions getConditions() {
@@ -1364,6 +1367,20 @@ class SimulationConditionsHandler extends ElementHandler {
                        } else {
                                conditions.setLaunchLatitude(d);
                        }
+               } else if (element.equals("launchlongitude")) {
+                       if (Double.isNaN(d)) {
+                               warnings.add("Illegal launch longitude.");
+                       } else {
+                               conditions.setLaunchLongitude(d);
+                       }
+               } else if (element.equals("geodeticmethod")) {
+                       GeodeticComputationStrategy gcs =
+                                       (GeodeticComputationStrategy) DocumentConfig.findEnum(content, GeodeticComputationStrategy.class);
+                       if (gcs != null) {
+                               conditions.setGeodeticComputation(gcs);
+                       } else {
+                               warnings.add("Unknown geodetic computation method '" + content + "'");
+                       }
                } else if (element.equals("atmosphere")) {
                        atmosphereHandler.storeSettings(conditions, warnings);
                } else if (element.equals("timestep")) {
index bf23728448922b375910e2b25ee1ac37b64acdc3..6554a5375446b6dd9e6fccff9510d347cff05d7b 100644 (file)
@@ -193,6 +193,11 @@ public class OpenRocketSaver extends RocketSaver {
                 * Otherwise use version 1.0.
                 */
 
+               // Check if design has simulations defined (version 1.3)
+               if (document.getSimulationCount() > 0) {
+                       return FILE_VERSION_DIVISOR + 3;
+               }
+               
                // Check for motor definitions (version 1.2)
                Iterator<RocketComponent> iterator = document.getRocket().iterator();
                while (iterator.hasNext()) {
@@ -311,6 +316,8 @@ public class OpenRocketSaver extends RocketSaver {
                writeElement("windturbulence", cond.getWindTurbulenceIntensity());
                writeElement("launchaltitude", cond.getLaunchAltitude());
                writeElement("launchlatitude", cond.getLaunchLatitude());
+               writeElement("launchlongitude", cond.getLaunchLongitude());
+               writeElement("geodeticmethod", cond.getGeodeticComputation().name().toLowerCase());
                
                if (cond.isISAAtmosphere()) {
                        writeln("<atmosphere model=\"isa\"/>");