From 6fd96dfe6eaf4892db4769bde030cd08c9a62e5d Mon Sep 17 00:00:00 2001 From: rodinia814 Date: Tue, 10 Jan 2012 05:36:53 +0000 Subject: [PATCH] DGP - Stage overrides for CG and CP in Rocksim export git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@329 180e2498-e6e9-4542-8430-84ac67f01cd8 --- .../file/rocksim/export/RocketDesignDTO.java | 92 ++++++++++++++++++- .../file/rocksim/export/RocksimSaver.java | 60 +++++------- .../file/rocksim/export/StageDTO.java | 62 +++++++++++++ 3 files changed, 177 insertions(+), 37 deletions(-) diff --git a/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java index 85a04105..697b5af8 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java @@ -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; + } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java b/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java index 6ead5639..b4e78c8b 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java @@ -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 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); - } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/StageDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/StageDTO.java index e7094460..3146619c 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/StageDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/StageDTO.java @@ -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 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 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); + } } -- 2.39.5