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)
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;
+ }
}
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;
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.
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 NoseConeDTO toNoseConeDTO(NoseCone nc) {
- return new NoseConeDTO(nc);
+ private StageDTO toStageDTO(Stage stage, RocketDesignDTO designDTO, int stageNumber) {
+ return new StageDTO(stage, designDTO, stageNumber);
}
- private BodyTubeDTO toBodyTubeDTO(BodyTube bt) {
- return new BodyTubeDTO(bt);
- }
-
- private TransitionDTO toTransitionDTO(Transition tran) {
- return new TransitionDTO(tran);
- }
}
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;
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;
}
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);
+ }
}