DGP - Stage overrides for CG and CP in Rocksim export
authorrodinia814 <rodinia814@180e2498-e6e9-4542-8430-84ac67f01cd8>
Tue, 10 Jan 2012 05:36:53 +0000 (05:36 +0000)
committerrodinia814 <rodinia814@180e2498-e6e9-4542-8430-84ac67f01cd8>
Tue, 10 Jan 2012 05:36:53 +0000 (05:36 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@329 180e2498-e6e9-4542-8430-84ac67f01cd8

core/src/net/sf/openrocket/file/rocksim/export/RocketDesignDTO.java
core/src/net/sf/openrocket/file/rocksim/export/RocksimSaver.java
core/src/net/sf/openrocket/file/rocksim/export/StageDTO.java

index 85a04105010b57ec5d3f25eda588da4b2491351c..697b5af82338e11fa3a2615024022c0b4977787d 100644 (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;
+    }
 }
index 6ead563917785fb8dc69f088e5c3b4a9cc21a764..b4e78c8bac3b9fbbbae82053de4951da2a86fdf4 100644 (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 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);
-    }
 }
index e70944600510ac5ddb5757dc96bc5780a95e05ac..3146619c9899ee64d3f7079718ae3f6ea1711c54 100644 (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);
+    }
 }