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