geodetic computation file storage

This commit is contained in:
Sampo Niskanen 2011-08-28 14:57:08 +00:00
parent f4f59fdd6f
commit 7c1d459de4
3 changed files with 28 additions and 1 deletions

View File

@ -36,3 +36,6 @@ The following file format versions exist:
motor definitions. The digest uniquely identifies the motor definitions. The digest uniquely identifies the
functional characteristics of a particular thrust curve motor. 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.

View File

@ -74,6 +74,7 @@ import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.BugException;
import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.GeodeticComputationStrategy;
import net.sf.openrocket.util.LineStyle; import net.sf.openrocket.util.LineStyle;
import net.sf.openrocket.util.Reflection; import net.sf.openrocket.util.Reflection;
@ -158,7 +159,7 @@ public class OpenRocketLoader extends RocketLoader {
class DocumentConfig { class DocumentConfig {
/* Remember to update OpenRocketSaver as well! */ /* 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 //////// Component constructors
@ -1289,6 +1290,8 @@ class SimulationConditionsHandler extends ElementHandler {
public SimulationConditionsHandler(Rocket rocket) { public SimulationConditionsHandler(Rocket rocket) {
conditions = new SimulationOptions(rocket); conditions = new SimulationOptions(rocket);
// Set up default loading settings (which may differ from the new defaults)
conditions.setGeodeticComputation(GeodeticComputationStrategy.NONE);
} }
public SimulationOptions getConditions() { public SimulationOptions getConditions() {
@ -1364,6 +1367,20 @@ class SimulationConditionsHandler extends ElementHandler {
} else { } else {
conditions.setLaunchLatitude(d); 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")) { } else if (element.equals("atmosphere")) {
atmosphereHandler.storeSettings(conditions, warnings); atmosphereHandler.storeSettings(conditions, warnings);
} else if (element.equals("timestep")) { } else if (element.equals("timestep")) {

View File

@ -193,6 +193,11 @@ public class OpenRocketSaver extends RocketSaver {
* Otherwise use version 1.0. * 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) // Check for motor definitions (version 1.2)
Iterator<RocketComponent> iterator = document.getRocket().iterator(); Iterator<RocketComponent> iterator = document.getRocket().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@ -311,6 +316,8 @@ public class OpenRocketSaver extends RocketSaver {
writeElement("windturbulence", cond.getWindTurbulenceIntensity()); writeElement("windturbulence", cond.getWindTurbulenceIntensity());
writeElement("launchaltitude", cond.getLaunchAltitude()); writeElement("launchaltitude", cond.getLaunchAltitude());
writeElement("launchlatitude", cond.getLaunchLatitude()); writeElement("launchlatitude", cond.getLaunchLatitude());
writeElement("launchlongitude", cond.getLaunchLongitude());
writeElement("geodeticmethod", cond.getGeodeticComputation().name().toLowerCase());
if (cond.isISAAtmosphere()) { if (cond.isISAAtmosphere()) {
writeln("<atmosphere model=\"isa\"/>"); writeln("<atmosphere model=\"isa\"/>");