From: rodinia814 Date: Mon, 13 Feb 2012 02:31:24 +0000 (+0000) Subject: DGP - added component serial numbers to allow Rocksim simulations to work correctly X-Git-Tag: upstream/12.03~1^2~59 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=4f24d24d80cc9c909d8cc875ce357ccfbff1952b;p=debian%2Fopenrocket DGP - added component serial numbers to allow Rocksim simulations to work correctly git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@412 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java b/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java index d44ef1a2..9686b979 100644 --- a/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java +++ b/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java @@ -30,6 +30,7 @@ public class RocksimCommonConstants { public static final String RADIAL_ANGLE = "RadialAngle"; public static final String LOCATION_MODE = "LocationMode"; public static final String FINISH_CODE = "FinishCode"; + public static final String SERIAL_NUMBER = "SerialNo"; public static final String LEN = "Len"; public static final String OD = "OD"; public static final String ID = "ID"; diff --git a/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java index 25aa7500..102f3643 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/BasePartDTO.java @@ -24,6 +24,12 @@ import javax.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.FIELD) public abstract class BasePartDTO { + /** + * The very important Rocksim serial number. Each component needs one. This is not multi-thread safe. Trying + * to save multiple files at the same time will have unpredictable results with respect to the serial numbering. + */ + private static int currentSerialNumber = 1; + @XmlElement(name = RocksimCommonConstants.KNOWN_MASS) private double knownMass = 0d; @XmlElement(name = RocksimCommonConstants.DENSITY) @@ -54,11 +60,14 @@ public abstract class BasePartDTO { private double len = 0d; @XmlElement(name = RocksimCommonConstants.FINISH_CODE) private int finishCode = 0; + @XmlElement(name = RocksimCommonConstants.SERIAL_NUMBER) + private int serialNumber = -1; /** * Default constructor. */ protected BasePartDTO() { + serialNumber = currentSerialNumber++; } /** @@ -67,6 +76,7 @@ public abstract class BasePartDTO { * @param ec */ protected BasePartDTO(RocketComponent ec) { + serialNumber = currentSerialNumber++; setCalcCG(ec.getCG().x * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH); setCalcMass(ec.getComponentMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS); setKnownCG(ec.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH); @@ -257,4 +267,14 @@ public abstract class BasePartDTO { finishCode = theFinishCode; } + public static int getCurrentSerialNumber() { + return currentSerialNumber - 1; + } + + /** + * Reset the serial number, which needs to happen after each file save. + */ + public static void resetCurrentSerialNumber() { + currentSerialNumber = 0; + } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java index 10ecf38c..23adf20f 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java @@ -41,6 +41,8 @@ public class RocketDesignDTO { private int threeDFlags = 0; @XmlElement(name = "ThreeDFlagsEdit") private int threeDFlagsEdit = 0; + @XmlElement(name = "LastSerialNumber") + private int lastSerialNumber = -1; @XmlElement(name = "Stage3Mass") private double stage3Mass = 0d; @XmlElement(name = "Stage2Mass") @@ -60,6 +62,8 @@ public class RocketDesignDTO { @XmlElement(name = "CPCalcFlags") private int cpCalcFlags = 1; + @XmlElement(name = "CPSimFlags") + private int cpSimFlags = 1; @XmlElement(name = "UseKnownMass") private int useKnownMass = 0; @XmlElement(name = "Stage3Parts") @@ -186,4 +190,12 @@ public class RocketDesignDTO { public void setStage32CG(double stage32CG) { this.stage32CG = stage32CG; } + + public int getLastSerialNumber() { + return lastSerialNumber; + } + + public void setLastSerialNumber(int lastSerialNumber) { + this.lastSerialNumber = lastSerialNumber; + } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java b/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java index b4e78c8b..47e28bd5 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java @@ -25,14 +25,15 @@ import java.io.StringWriter; */ public class RocksimSaver extends RocketSaver { - /** The logger. */ + /** + * The logger. + */ private static final LogHelper log = Application.getLogger(); /** * This method marshals an OpenRocketDocument (OR design) to Rocksim-compliant XML. * - * @param doc the OR design - * + * @param doc the OR design * @return Rocksim-compliant XML */ public String marshalToRocksim(OpenRocketDocument doc) { @@ -71,8 +72,7 @@ public class RocksimSaver extends RocketSaver { /** * Root conversion method. It iterates over all subcomponents. * - * @param doc the OR design - * + * @param doc the OR design * @return a corresponding Rocksim representation */ private RocksimDocumentDTO toRocksimDocumentDTO(OpenRocketDocument doc) { @@ -94,16 +94,14 @@ public class RocksimSaver extends RocketSaver { MassCalculator massCalc = new BasicMassCalculator(); - final double cg = massCalc.getCG(new Configuration(rocket), MassCalculator.MassCalcType.NO_MOTORS).x * - RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH; + final double cg = massCalc.getCG(new Configuration(rocket), MassCalculator.MassCalcType.NO_MOTORS).x * + RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH; int stageCount = rocket.getStageCount(); if (stageCount == 3) { result.setStage321CG(cg); - } - else if (stageCount == 2) { + } else if (stageCount == 2) { result.setStage32CG(cg); - } - else { + } else { result.setStage3CG(cg); } @@ -118,6 +116,9 @@ public class RocksimSaver extends RocketSaver { if (stageCount > 2) { result.setStage1(toStageDTO(rocket.getChild(2).getStage(), result, 1)); } + //Set the last serial number element and reset it. + result.setLastSerialNumber(BasePartDTO.getCurrentSerialNumber()); + BasePartDTO.resetCurrentSerialNumber(); return result; }