DGP - Stage overrides for CG and CP in Rocksim export
This commit is contained in:
parent
ff2bafb19d
commit
492aa66056
@ -39,11 +39,27 @@ public class RocketDesignDTO {
|
||||
private int threeDFlags = 0;
|
||||
@XmlElement(name = "ThreeDFlagsEdit")
|
||||
private int threeDFlagsEdit = 0;
|
||||
@XmlElement(name = "Stage3Mass")
|
||||
private double stage3Mass = 0d;
|
||||
@XmlElement(name = "Stage2Mass")
|
||||
private double stage2Mass = 0d;
|
||||
@XmlElement(name = "Stage1Mass")
|
||||
private double stage1Mass = 0d;
|
||||
@XmlElement(name = "Stage3CG")
|
||||
private double stage3CG = 0d;
|
||||
@XmlElement(name = "Stage2CGAlone")
|
||||
private double stage2CGAlone = 0d;
|
||||
@XmlElement(name = "Stage1CGAlone")
|
||||
private double stage1CGAlone = 0d;
|
||||
@XmlElement(name = "Stage321CG")
|
||||
private double stage321CG = 0d;
|
||||
@XmlElement(name = "Stage32CG")
|
||||
private double stage32CG = 0d;
|
||||
|
||||
@XmlElement(name = "CPCalcFlags")
|
||||
private String cpCalcFlags = "1";
|
||||
private int cpCalcFlags = 1;
|
||||
@XmlElement(name = "UseKnownMass")
|
||||
private String useKnownMass = "0";
|
||||
private int useKnownMass = 0;
|
||||
@XmlElement(name = "Stage3Parts")
|
||||
private StageDTO stage3 = new StageDTO();
|
||||
@XmlElement(name = "Stage2Parts", required = true, nillable = false)
|
||||
@ -93,4 +109,76 @@ public class RocketDesignDTO {
|
||||
public void setStage1(StageDTO theStage1) {
|
||||
stage1 = theStage1;
|
||||
}
|
||||
|
||||
public int getUseKnownMass() {
|
||||
return useKnownMass;
|
||||
}
|
||||
|
||||
public void setUseKnownMass(int useKnownMass) {
|
||||
this.useKnownMass = useKnownMass;
|
||||
}
|
||||
|
||||
public double getStage3Mass() {
|
||||
return stage3Mass;
|
||||
}
|
||||
|
||||
public void setStage3Mass(double stage3Mass) {
|
||||
this.stage3Mass = stage3Mass;
|
||||
}
|
||||
|
||||
public double getStage2Mass() {
|
||||
return stage2Mass;
|
||||
}
|
||||
|
||||
public void setStage2Mass(double stage2Mass) {
|
||||
this.stage2Mass = stage2Mass;
|
||||
}
|
||||
|
||||
public double getStage1Mass() {
|
||||
return stage1Mass;
|
||||
}
|
||||
|
||||
public void setStage1Mass(double stage1Mass) {
|
||||
this.stage1Mass = stage1Mass;
|
||||
}
|
||||
|
||||
public double getStage3CG() {
|
||||
return stage3CG;
|
||||
}
|
||||
|
||||
public void setStage3CG(double stage3CG) {
|
||||
this.stage3CG = stage3CG;
|
||||
}
|
||||
|
||||
public double getStage2CGAlone() {
|
||||
return stage2CGAlone;
|
||||
}
|
||||
|
||||
public void setStage2CGAlone(double stage2CGAlone) {
|
||||
this.stage2CGAlone = stage2CGAlone;
|
||||
}
|
||||
|
||||
public double getStage1CGAlone() {
|
||||
return stage1CGAlone;
|
||||
}
|
||||
|
||||
public void setStage1CGAlone(double stage1CGAlone) {
|
||||
this.stage1CGAlone = stage1CGAlone;
|
||||
}
|
||||
|
||||
public double getStage321CG() {
|
||||
return stage321CG;
|
||||
}
|
||||
|
||||
public void setStage321CG(double stage321CG) {
|
||||
this.stage321CG = stage321CG;
|
||||
}
|
||||
|
||||
public double getStage32CG() {
|
||||
return stage32CG;
|
||||
}
|
||||
|
||||
public void setStage32CG(double stage32CG) {
|
||||
this.stage32CG = stage32CG;
|
||||
}
|
||||
}
|
||||
|
@ -3,13 +3,13 @@ package net.sf.openrocket.file.rocksim.export;
|
||||
import net.sf.openrocket.document.OpenRocketDocument;
|
||||
import net.sf.openrocket.document.StorageOptions;
|
||||
import net.sf.openrocket.file.RocketSaver;
|
||||
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
|
||||
import net.sf.openrocket.logging.LogHelper;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.masscalc.BasicMassCalculator;
|
||||
import net.sf.openrocket.masscalc.MassCalculator;
|
||||
import net.sf.openrocket.rocketcomponent.Configuration;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
@ -19,7 +19,6 @@ import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class is responsible for converting an OpenRocket design to a Rocksim design.
|
||||
@ -92,47 +91,38 @@ public class RocksimSaver extends RocketSaver {
|
||||
|
||||
private RocketDesignDTO toRocketDesignDTO(Rocket rocket) {
|
||||
RocketDesignDTO result = new RocketDesignDTO();
|
||||
result.setName(rocket.getName());
|
||||
|
||||
MassCalculator massCalc = new BasicMassCalculator();
|
||||
|
||||
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) {
|
||||
result.setStage32CG(cg);
|
||||
}
|
||||
else {
|
||||
result.setStage3CG(cg);
|
||||
}
|
||||
|
||||
result.setName(rocket.getName());
|
||||
result.setStageCount(stageCount);
|
||||
if (stageCount > 0) {
|
||||
result.setStage3(toStageDTO(rocket.getChild(0).getStage()));
|
||||
result.setStage3(toStageDTO(rocket.getChild(0).getStage(), result, 3));
|
||||
}
|
||||
if (stageCount > 1) {
|
||||
result.setStage2(toStageDTO(rocket.getChild(1).getStage()));
|
||||
result.setStage2(toStageDTO(rocket.getChild(1).getStage(), result, 2));
|
||||
}
|
||||
if (stageCount > 2) {
|
||||
result.setStage1(toStageDTO(rocket.getChild(2).getStage()));
|
||||
result.setStage1(toStageDTO(rocket.getChild(2).getStage(), result, 1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private StageDTO toStageDTO(Stage stage) {
|
||||
StageDTO result = new StageDTO();
|
||||
|
||||
List<RocketComponent> children = stage.getChildren();
|
||||
for (int i = 0; i < children.size(); i++) {
|
||||
RocketComponent rocketComponents = children.get(i);
|
||||
if (rocketComponents instanceof NoseCone) {
|
||||
result.addExternalPart(toNoseConeDTO((NoseCone) rocketComponents));
|
||||
} else if (rocketComponents instanceof BodyTube) {
|
||||
result.addExternalPart(toBodyTubeDTO((BodyTube) rocketComponents));
|
||||
} else if (rocketComponents instanceof Transition) {
|
||||
result.addExternalPart(toTransitionDTO((Transition) rocketComponents));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
private StageDTO toStageDTO(Stage stage, RocketDesignDTO designDTO, int stageNumber) {
|
||||
return new StageDTO(stage, designDTO, stageNumber);
|
||||
}
|
||||
|
||||
private NoseConeDTO toNoseConeDTO(NoseCone nc) {
|
||||
return new NoseConeDTO(nc);
|
||||
}
|
||||
|
||||
private BodyTubeDTO toBodyTubeDTO(BodyTube bt) {
|
||||
return new BodyTubeDTO(bt);
|
||||
}
|
||||
|
||||
private TransitionDTO toTransitionDTO(Transition tran) {
|
||||
return new TransitionDTO(tran);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,11 @@
|
||||
package net.sf.openrocket.file.rocksim.export;
|
||||
|
||||
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import net.sf.openrocket.util.ArrayList;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
@ -28,6 +33,51 @@ public class StageDTO {
|
||||
public StageDTO() {
|
||||
}
|
||||
|
||||
public StageDTO(Stage stage, RocketDesignDTO design, int stageNumber) {
|
||||
|
||||
if (stageNumber == 3) {
|
||||
if (stage.isMassOverridden()) {
|
||||
design.setStage3Mass(stage.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
|
||||
design.setUseKnownMass(1);
|
||||
}
|
||||
if (stage.isCGOverridden()) {
|
||||
design.setStage3CG(stage.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
if (stageNumber == 2) {
|
||||
if (stage.isMassOverridden()) {
|
||||
design.setStage2Mass(stage.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
|
||||
design.setUseKnownMass(1);
|
||||
}
|
||||
if (stage.isCGOverridden()) {
|
||||
design.setStage2CGAlone(stage.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
if (stageNumber == 1) {
|
||||
if (stage.isMassOverridden()) {
|
||||
design.setStage1Mass(stage.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
|
||||
design.setUseKnownMass(1);
|
||||
}
|
||||
if (stage.isCGOverridden()) {
|
||||
design.setStage1CGAlone(stage.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
List<RocketComponent> children = stage.getChildren();
|
||||
for (int i = 0; i < children.size(); i++) {
|
||||
RocketComponent rocketComponents = children.get(i);
|
||||
if (rocketComponents instanceof NoseCone) {
|
||||
addExternalPart(toNoseConeDTO((NoseCone) rocketComponents));
|
||||
} else if (rocketComponents instanceof BodyTube) {
|
||||
addExternalPart(toBodyTubeDTO((BodyTube) rocketComponents));
|
||||
} else if (rocketComponents instanceof Transition) {
|
||||
addExternalPart(toTransitionDTO((Transition) rocketComponents));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<BasePartDTO> getExternalPart() {
|
||||
return externalPart;
|
||||
}
|
||||
@ -35,4 +85,16 @@ public class StageDTO {
|
||||
public void addExternalPart(BasePartDTO theExternalPartDTO) {
|
||||
externalPart.add(theExternalPartDTO);
|
||||
}
|
||||
|
||||
private NoseConeDTO toNoseConeDTO(NoseCone nc) {
|
||||
return new NoseConeDTO(nc);
|
||||
}
|
||||
|
||||
private BodyTubeDTO toBodyTubeDTO(BodyTube bt) {
|
||||
return new BodyTubeDTO(bt);
|
||||
}
|
||||
|
||||
private TransitionDTO toTransitionDTO(Transition tran) {
|
||||
return new TransitionDTO(tran);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user