DGP - Stage overrides for CG and CP in Rocksim export

This commit is contained in:
Doug Pedrick 2012-01-10 05:36:53 +00:00
parent ff2bafb19d
commit 492aa66056
3 changed files with 177 additions and 37 deletions

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}