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 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";
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user