DGP - added component serial numbers to allow Rocksim simulations to work correctly
authorrodinia814 <rodinia814@180e2498-e6e9-4542-8430-84ac67f01cd8>
Mon, 13 Feb 2012 02:31:24 +0000 (02:31 +0000)
committerrodinia814 <rodinia814@180e2498-e6e9-4542-8430-84ac67f01cd8>
Mon, 13 Feb 2012 02:31:24 +0000 (02:31 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@412 180e2498-e6e9-4542-8430-84ac67f01cd8

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

index d44ef1a27e0990475ad8a8662096e33bd421584a..9686b9794a481f5f08dadcc331274509f93a5dad 100644 (file)
@@ -30,6 +30,7 @@ public class RocksimCommonConstants {
     public static final String RADIAL_ANGLE = "RadialAngle";
     public static final String LOCATION_MODE = "LocationMode";
     public static final String FINISH_CODE = "FinishCode";
+    public static final String SERIAL_NUMBER = "SerialNo";
     public static final String LEN = "Len";
     public static final String OD = "OD";
     public static final String ID = "ID";
index 25aa750023cd3762ea65bf2d6b9eb2968d287b97..102f364377646ecd2e2fd45a09bb7a0627722e44 100644 (file)
@@ -24,6 +24,12 @@ import javax.xml.bind.annotation.XmlRootElement;
 @XmlAccessorType(XmlAccessType.FIELD)
 public abstract class BasePartDTO {
 
+    /**
+     * The very important Rocksim serial number.  Each component needs one.  This is not multi-thread safe.  Trying
+     * to save multiple files at the same time will have unpredictable results with respect to the serial numbering.
+     */
+    private static int currentSerialNumber = 1;
+
     @XmlElement(name = RocksimCommonConstants.KNOWN_MASS)
     private double knownMass = 0d;
     @XmlElement(name = RocksimCommonConstants.DENSITY)
@@ -54,11 +60,14 @@ public abstract class BasePartDTO {
     private double len = 0d;
     @XmlElement(name = RocksimCommonConstants.FINISH_CODE)
     private int finishCode = 0;
+    @XmlElement(name = RocksimCommonConstants.SERIAL_NUMBER)
+    private int serialNumber = -1;
 
     /**
      * Default constructor.
      */
     protected BasePartDTO() {
+        serialNumber = currentSerialNumber++;
     }
 
     /**
@@ -67,6 +76,7 @@ public abstract class BasePartDTO {
      * @param ec
      */
     protected BasePartDTO(RocketComponent ec) {
+        serialNumber = currentSerialNumber++;
         setCalcCG(ec.getCG().x * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
         setCalcMass(ec.getComponentMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
         setKnownCG(ec.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
@@ -257,4 +267,14 @@ public abstract class BasePartDTO {
         finishCode = theFinishCode;
     }
 
+    public static int getCurrentSerialNumber() {
+        return currentSerialNumber - 1;
+    }
+
+    /**
+     * Reset the serial number, which needs to happen after each file save.
+     */
+    public static void resetCurrentSerialNumber() {
+        currentSerialNumber = 0;
+    }
 }
index 10ecf38c3c43d032892c3d9ce486cc924fefbfb6..23adf20f71a0b2aa941adbb609e41edd00600837 100644 (file)
@@ -41,6 +41,8 @@ public class RocketDesignDTO {
     private int threeDFlags = 0;
     @XmlElement(name = "ThreeDFlagsEdit")
     private int threeDFlagsEdit = 0;
+    @XmlElement(name = "LastSerialNumber")
+    private int lastSerialNumber = -1;
     @XmlElement(name = "Stage3Mass")
     private double stage3Mass = 0d;
     @XmlElement(name = "Stage2Mass")
@@ -60,6 +62,8 @@ public class RocketDesignDTO {
 
     @XmlElement(name = "CPCalcFlags")
     private int cpCalcFlags = 1;
+    @XmlElement(name = "CPSimFlags")
+    private int cpSimFlags = 1;
     @XmlElement(name = "UseKnownMass")
     private int useKnownMass = 0;
     @XmlElement(name = "Stage3Parts")
@@ -186,4 +190,12 @@ public class RocketDesignDTO {
     public void setStage32CG(double stage32CG) {
         this.stage32CG = stage32CG;
     }
+
+    public int getLastSerialNumber() {
+        return lastSerialNumber;
+    }
+
+    public void setLastSerialNumber(int lastSerialNumber) {
+        this.lastSerialNumber = lastSerialNumber;
+    }
 }
index b4e78c8bac3b9fbbbae82053de4951da2a86fdf4..47e28bd5c5426c562fa561d5739bdfac171c5d50 100644 (file)
@@ -25,14 +25,15 @@ import java.io.StringWriter;
  */
 public class RocksimSaver extends RocketSaver {
 
-    /** The logger. */
+    /**
+     * The logger.
+     */
     private static final LogHelper log = Application.getLogger();
 
     /**
      * This method marshals an OpenRocketDocument (OR design) to Rocksim-compliant XML.
      *
-     * @param doc  the OR design
-     *
+     * @param doc the OR design
      * @return Rocksim-compliant XML
      */
     public String marshalToRocksim(OpenRocketDocument doc) {
@@ -71,8 +72,7 @@ public class RocksimSaver extends RocketSaver {
     /**
      * Root conversion method.  It iterates over all subcomponents.
      *
-     * @param doc  the OR design
-     *
+     * @param doc the OR design
      * @return a corresponding Rocksim representation
      */
     private RocksimDocumentDTO toRocksimDocumentDTO(OpenRocketDocument doc) {
@@ -94,16 +94,14 @@ public class RocksimSaver extends RocketSaver {
 
         MassCalculator massCalc = new BasicMassCalculator();
 
-            final double cg = massCalc.getCG(new Configuration(rocket), MassCalculator.MassCalcType.NO_MOTORS).x *
-                    RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH;
+        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) {
+        } else if (stageCount == 2) {
             result.setStage32CG(cg);
-        }
-        else {
+        } else {
             result.setStage3CG(cg);
         }
 
@@ -118,6 +116,9 @@ public class RocksimSaver extends RocketSaver {
         if (stageCount > 2) {
             result.setStage1(toStageDTO(rocket.getChild(2).getStage(), result, 1));
         }
+        //Set the last serial number element and reset it.
+        result.setLastSerialNumber(BasePartDTO.getCurrentSerialNumber());
+        BasePartDTO.resetCurrentSerialNumber();
         return result;
     }