DGP - MassObject tweak
[debian/openrocket] / core / src / net / sf / openrocket / file / rocksim / export / BasePartDTO.java
1 package net.sf.openrocket.file.rocksim.export;
2
3 import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
4 import net.sf.openrocket.file.rocksim.RocksimDensityType;
5 import net.sf.openrocket.file.rocksim.RocksimFinishCode;
6 import net.sf.openrocket.file.rocksim.RocksimLocationMode;
7 import net.sf.openrocket.file.rocksim.importt.BaseHandler;
8 import net.sf.openrocket.rocketcomponent.ExternalComponent;
9 import net.sf.openrocket.rocketcomponent.FinSet;
10 import net.sf.openrocket.rocketcomponent.RecoveryDevice;
11 import net.sf.openrocket.rocketcomponent.RingComponent;
12 import net.sf.openrocket.rocketcomponent.RocketComponent;
13 import net.sf.openrocket.rocketcomponent.StructuralComponent;
14
15 import javax.xml.bind.annotation.XmlAccessType;
16 import javax.xml.bind.annotation.XmlAccessorType;
17 import javax.xml.bind.annotation.XmlElement;
18 import javax.xml.bind.annotation.XmlRootElement;
19
20 /**
21  * The base class for all OpenRocket to Rocksim conversions.
22  */
23 @XmlRootElement
24 @XmlAccessorType(XmlAccessType.FIELD)
25 public abstract class BasePartDTO {
26
27     @XmlElement(name = RocksimCommonConstants.KNOWN_MASS)
28     private double knownMass = 0d;
29     @XmlElement(name = RocksimCommonConstants.DENSITY)
30     private double density = 0d;
31     @XmlElement(name = RocksimCommonConstants.MATERIAL)
32     private String material = "";
33     @XmlElement(name = RocksimCommonConstants.NAME)
34     private String name = "";
35     @XmlElement(name = RocksimCommonConstants.KNOWN_CG)
36     private double knownCG = 0;
37     @XmlElement(name = RocksimCommonConstants.USE_KNOWN_CG)
38     private int useKnownCG = 1;
39     @XmlElement(name = RocksimCommonConstants.XB)
40     private double xb = 0;
41     @XmlElement(name = RocksimCommonConstants.CALC_MASS)
42     private double calcMass = 0d;
43     @XmlElement(name = RocksimCommonConstants.CALC_CG)
44     private double calcCG = 0d;
45     @XmlElement(name = RocksimCommonConstants.DENSITY_TYPE)
46     private int densityType = 0;
47     @XmlElement(name = RocksimCommonConstants.RADIAL_LOC)
48     private double radialLoc = 0;
49     @XmlElement(name = RocksimCommonConstants.RADIAL_ANGLE)
50     private double radialAngle = 0;
51     @XmlElement(name = RocksimCommonConstants.LOCATION_MODE)
52     private int locationMode = 0;
53     @XmlElement(name = RocksimCommonConstants.LEN, required = false, nillable = false)
54     private double len = 0d;
55     @XmlElement(name = RocksimCommonConstants.FINISH_CODE)
56     private int finishCode = 0;
57
58     /**
59      * Default constructor.
60      */
61     protected BasePartDTO() {
62     }
63
64     /**
65      * Copy constructor of sorts, that performs all common conversions for components.
66      *
67      * @param ec
68      */
69     protected BasePartDTO(RocketComponent ec) {
70         setCalcCG(ec.getCG().x * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
71         setCalcMass(ec.getComponentMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
72         setKnownCG(ec.getOverrideCGX() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
73         setKnownMass(ec.getMass() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_MASS);
74
75         if (! (ec instanceof FinSet)) {
76             setLen(ec.getLength() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
77         }
78         setUseKnownCG(ec.isCGOverridden() || ec.isMassOverridden() ? 1 : 0);
79         setName(ec.getName());
80
81         setXb(ec.getPositionValue() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
82
83         //When the relative position is BOTTOM, the position location of the bottom edge of the component is +
84         //to the right of the bottom of the parent, and - to the left.
85         //But in Rocksim, it's + to the left and - to the right
86         if (ec.getRelativePosition().equals(RocketComponent.Position.BOTTOM)) {
87             setXb((-1 * ec.getPositionValue()) * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
88         }
89         else if (ec.getRelativePosition().equals(RocketComponent.Position.MIDDLE)) {
90             //Mapped to TOP, so adjust accordingly
91             setXb((ec.getPositionValue() + (ec.getParent().getLength() - ec.getLength()) /2)* RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
92         }
93
94         if (ec instanceof ExternalComponent) {
95             ExternalComponent comp = (ExternalComponent) ec;
96             setLocationMode(RocksimLocationMode.toCode(comp.getRelativePosition()));
97
98             setDensity(comp.getMaterial().getDensity() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_BULK_DENSITY);
99             setDensityType(RocksimDensityType.toCode(comp.getMaterial().getType()));
100             String material = comp.getMaterial().getName();
101             if (material.startsWith(BaseHandler.ROCKSIM_MATERIAL_PREFIX)) {
102                 material = material.substring(BaseHandler.ROCKSIM_MATERIAL_PREFIX.length());
103             }
104             setMaterial(material);
105
106             setFinishCode(RocksimFinishCode.toCode(comp.getFinish()));
107         }
108         else if (ec instanceof StructuralComponent) {
109             StructuralComponent comp = (StructuralComponent) ec;
110
111             setLocationMode(RocksimLocationMode.toCode(comp.getRelativePosition()));
112             setDensity(comp.getMaterial().getDensity() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_BULK_DENSITY);
113             setDensityType(RocksimDensityType.toCode(comp.getMaterial().getType()));
114             String material = comp.getMaterial().getName();
115             if (material.startsWith(BaseHandler.ROCKSIM_MATERIAL_PREFIX)) {
116                 material = material.substring(BaseHandler.ROCKSIM_MATERIAL_PREFIX.length());
117             }
118             setMaterial(material);
119         }
120         else if (ec instanceof RecoveryDevice) {
121             RecoveryDevice comp = (RecoveryDevice) ec;
122
123             setLocationMode(RocksimLocationMode.toCode(comp.getRelativePosition()));
124             setDensity(comp.getMaterial().getDensity() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_SURFACE_DENSITY);
125             setDensityType(RocksimDensityType.toCode(comp.getMaterial().getType()));
126             String material = comp.getMaterial().getName();
127             if (material.startsWith(BaseHandler.ROCKSIM_MATERIAL_PREFIX)) {
128                 material = material.substring(BaseHandler.ROCKSIM_MATERIAL_PREFIX.length());
129             }
130             setMaterial(material);
131         }
132
133         if (ec instanceof RingComponent) {
134             RingComponent rc = (RingComponent)ec;
135             setRadialAngle(rc.getRadialDirection());
136             setRadialLoc(rc.getRadialPosition() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
137         }
138     }
139
140     public Double getKnownMass() {
141         return knownMass;
142     }
143
144     public void setKnownMass(Double theKnownMass) {
145         knownMass = theKnownMass;
146     }
147
148     public double getDensity() {
149         return density;
150     }
151
152     public void setDensity(double theDensity) {
153         density = theDensity;
154     }
155
156     public String getMaterial() {
157         return material;
158     }
159
160     public void setMaterial(String theMaterial) {
161         material = theMaterial;
162     }
163
164     public String getName() {
165         return name;
166     }
167
168     public void setName(String theName) {
169         name = theName;
170     }
171
172     public Double getKnownCG() {
173         return knownCG;
174     }
175
176     public void setKnownCG(Double theKnownCG) {
177         knownCG = theKnownCG;
178     }
179
180     public int getUseKnownCG() {
181         return useKnownCG;
182     }
183
184     public void setUseKnownCG(int theUseKnownCG) {
185         useKnownCG = theUseKnownCG;
186     }
187
188     public double getXb() {
189         return xb;
190     }
191
192     public void setXb(double theXb) {
193         xb = theXb;
194     }
195
196     public double getCalcMass() {
197         return calcMass;
198     }
199
200     public void setCalcMass(double theCalcMass) {
201         calcMass = theCalcMass;
202     }
203
204     public double getCalcCG() {
205         return calcCG;
206     }
207
208     public void setCalcCG(double theCalcCG) {
209         calcCG = theCalcCG;
210     }
211
212     public int getDensityType() {
213         return densityType;
214     }
215
216     public void setDensityType(int theDensityType) {
217         densityType = theDensityType;
218     }
219
220     public double getRadialLoc() {
221         return radialLoc;
222     }
223
224     public void setRadialLoc(double theRadialLoc) {
225         radialLoc = theRadialLoc;
226     }
227
228     public double getRadialAngle() {
229         return radialAngle;
230     }
231
232     public void setRadialAngle(double theRadialAngle) {
233         radialAngle = theRadialAngle;
234     }
235
236     public int getLocationMode() {
237         return locationMode;
238     }
239
240     public void setLocationMode(int theLocationMode) {
241         locationMode = theLocationMode;
242     }
243
244     public double getLen() {
245         return len;
246     }
247
248     public void setLen(double theLen) {
249         len = theLen;
250     }
251
252     public int getFinishCode() {
253         return finishCode;
254     }
255
256     public void setFinishCode(int theFinishCode) {
257         finishCode = theFinishCode;
258     }
259
260 }