DGP - added component serial numbers to allow Rocksim simulations to work correctly
This commit is contained in:
parent
844f2de727
commit
f9d621d90a
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user