DGP - added component serial numbers to allow Rocksim simulations to work correctly

This commit is contained in:
Doug Pedrick 2012-02-13 02:31:24 +00:00
parent 844f2de727
commit f9d621d90a
4 changed files with 45 additions and 11 deletions

View File

@ -30,6 +30,7 @@ public class RocksimCommonConstants {
public static final String RADIAL_ANGLE = "RadialAngle"; public static final String RADIAL_ANGLE = "RadialAngle";
public static final String LOCATION_MODE = "LocationMode"; public static final String LOCATION_MODE = "LocationMode";
public static final String FINISH_CODE = "FinishCode"; public static final String FINISH_CODE = "FinishCode";
public static final String SERIAL_NUMBER = "SerialNo";
public static final String LEN = "Len"; public static final String LEN = "Len";
public static final String OD = "OD"; public static final String OD = "OD";
public static final String ID = "ID"; public static final String ID = "ID";

View File

@ -24,6 +24,12 @@ import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
public abstract class BasePartDTO { 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) @XmlElement(name = RocksimCommonConstants.KNOWN_MASS)
private double knownMass = 0d; private double knownMass = 0d;
@XmlElement(name = RocksimCommonConstants.DENSITY) @XmlElement(name = RocksimCommonConstants.DENSITY)
@ -54,11 +60,14 @@ public abstract class BasePartDTO {
private double len = 0d; private double len = 0d;
@XmlElement(name = RocksimCommonConstants.FINISH_CODE) @XmlElement(name = RocksimCommonConstants.FINISH_CODE)
private int finishCode = 0; private int finishCode = 0;
@XmlElement(name = RocksimCommonConstants.SERIAL_NUMBER)
private int serialNumber = -1;
/** /**
* Default constructor. * Default constructor.
*/ */
protected BasePartDTO() { protected BasePartDTO() {
serialNumber = currentSerialNumber++;
} }
/** /**
@ -67,6 +76,7 @@ public abstract class BasePartDTO {
* @param ec * @param ec
*/ */
protected BasePartDTO(RocketComponent ec) { protected BasePartDTO(RocketComponent ec) {
serialNumber = currentSerialNumber++;
setCalcCG(ec.getCG().x * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH); setCalcCG(ec.getCG().x * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
setCalcMass(ec.getComponentMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS); setCalcMass(ec.getComponentMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
setKnownCG(ec.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH); setKnownCG(ec.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
@ -257,4 +267,14 @@ public abstract class BasePartDTO {
finishCode = theFinishCode; 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;
}
} }

View File

@ -41,6 +41,8 @@ public class RocketDesignDTO {
private int threeDFlags = 0; private int threeDFlags = 0;
@XmlElement(name = "ThreeDFlagsEdit") @XmlElement(name = "ThreeDFlagsEdit")
private int threeDFlagsEdit = 0; private int threeDFlagsEdit = 0;
@XmlElement(name = "LastSerialNumber")
private int lastSerialNumber = -1;
@XmlElement(name = "Stage3Mass") @XmlElement(name = "Stage3Mass")
private double stage3Mass = 0d; private double stage3Mass = 0d;
@XmlElement(name = "Stage2Mass") @XmlElement(name = "Stage2Mass")
@ -60,6 +62,8 @@ public class RocketDesignDTO {
@XmlElement(name = "CPCalcFlags") @XmlElement(name = "CPCalcFlags")
private int cpCalcFlags = 1; private int cpCalcFlags = 1;
@XmlElement(name = "CPSimFlags")
private int cpSimFlags = 1;
@XmlElement(name = "UseKnownMass") @XmlElement(name = "UseKnownMass")
private int useKnownMass = 0; private int useKnownMass = 0;
@XmlElement(name = "Stage3Parts") @XmlElement(name = "Stage3Parts")
@ -186,4 +190,12 @@ public class RocketDesignDTO {
public void setStage32CG(double stage32CG) { public void setStage32CG(double stage32CG) {
this.stage32CG = stage32CG; this.stage32CG = stage32CG;
} }
public int getLastSerialNumber() {
return lastSerialNumber;
}
public void setLastSerialNumber(int lastSerialNumber) {
this.lastSerialNumber = lastSerialNumber;
}
} }

View File

@ -25,14 +25,15 @@ import java.io.StringWriter;
*/ */
public class RocksimSaver extends RocketSaver { public class RocksimSaver extends RocketSaver {
/** The logger. */ /**
* The logger.
*/
private static final LogHelper log = Application.getLogger(); private static final LogHelper log = Application.getLogger();
/** /**
* This method marshals an OpenRocketDocument (OR design) to Rocksim-compliant XML. * 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 * @return Rocksim-compliant XML
*/ */
public String marshalToRocksim(OpenRocketDocument doc) { public String marshalToRocksim(OpenRocketDocument doc) {
@ -71,8 +72,7 @@ public class RocksimSaver extends RocketSaver {
/** /**
* Root conversion method. It iterates over all subcomponents. * Root conversion method. It iterates over all subcomponents.
* *
* @param doc the OR design * @param doc the OR design
*
* @return a corresponding Rocksim representation * @return a corresponding Rocksim representation
*/ */
private RocksimDocumentDTO toRocksimDocumentDTO(OpenRocketDocument doc) { private RocksimDocumentDTO toRocksimDocumentDTO(OpenRocketDocument doc) {
@ -94,16 +94,14 @@ public class RocksimSaver extends RocketSaver {
MassCalculator massCalc = new BasicMassCalculator(); MassCalculator massCalc = new BasicMassCalculator();
final double cg = massCalc.getCG(new Configuration(rocket), MassCalculator.MassCalcType.NO_MOTORS).x * final double cg = massCalc.getCG(new Configuration(rocket), MassCalculator.MassCalcType.NO_MOTORS).x *
RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH; RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH;
int stageCount = rocket.getStageCount(); int stageCount = rocket.getStageCount();
if (stageCount == 3) { if (stageCount == 3) {
result.setStage321CG(cg); result.setStage321CG(cg);
} } else if (stageCount == 2) {
else if (stageCount == 2) {
result.setStage32CG(cg); result.setStage32CG(cg);
} } else {
else {
result.setStage3CG(cg); result.setStage3CG(cg);
} }
@ -118,6 +116,9 @@ public class RocksimSaver extends RocketSaver {
if (stageCount > 2) { if (stageCount > 2) {
result.setStage1(toStageDTO(rocket.getChild(2).getStage(), result, 1)); 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; return result;
} }