1 package net.sf.openrocket.file.rocksim.export;
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;
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;
21 * The base class for all OpenRocket to Rocksim conversions.
24 @XmlAccessorType(XmlAccessType.FIELD)
25 public abstract class BasePartDTO {
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;
59 * Default constructor.
61 protected BasePartDTO() {
65 * Copy constructor of sorts, that performs all common conversions for components.
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);
75 if (! (ec instanceof FinSet)) {
76 setLen(ec.getLength() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
78 setUseKnownCG(ec.isCGOverridden() || ec.isMassOverridden() ? 1 : 0);
79 setName(ec.getName());
81 setXb(ec.getPositionValue() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
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);
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);
94 if (ec instanceof ExternalComponent) {
95 ExternalComponent comp = (ExternalComponent) ec;
96 setLocationMode(RocksimLocationMode.toCode(comp.getRelativePosition()));
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());
104 setMaterial(material);
106 setFinishCode(RocksimFinishCode.toCode(comp.getFinish()));
108 else if (ec instanceof StructuralComponent) {
109 StructuralComponent comp = (StructuralComponent) ec;
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());
118 setMaterial(material);
120 else if (ec instanceof RecoveryDevice) {
121 RecoveryDevice comp = (RecoveryDevice) ec;
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());
130 setMaterial(material);
133 if (ec instanceof RingComponent) {
134 RingComponent rc = (RingComponent)ec;
135 setRadialAngle(rc.getRadialDirection());
136 setRadialLoc(rc.getRadialPosition() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
140 public Double getKnownMass() {
144 public void setKnownMass(Double theKnownMass) {
145 knownMass = theKnownMass;
148 public double getDensity() {
152 public void setDensity(double theDensity) {
153 density = theDensity;
156 public String getMaterial() {
160 public void setMaterial(String theMaterial) {
161 material = theMaterial;
164 public String getName() {
168 public void setName(String theName) {
172 public Double getKnownCG() {
176 public void setKnownCG(Double theKnownCG) {
177 knownCG = theKnownCG;
180 public int getUseKnownCG() {
184 public void setUseKnownCG(int theUseKnownCG) {
185 useKnownCG = theUseKnownCG;
188 public double getXb() {
192 public void setXb(double theXb) {
196 public double getCalcMass() {
200 public void setCalcMass(double theCalcMass) {
201 calcMass = theCalcMass;
204 public double getCalcCG() {
208 public void setCalcCG(double theCalcCG) {
212 public int getDensityType() {
216 public void setDensityType(int theDensityType) {
217 densityType = theDensityType;
220 public double getRadialLoc() {
224 public void setRadialLoc(double theRadialLoc) {
225 radialLoc = theRadialLoc;
228 public double getRadialAngle() {
232 public void setRadialAngle(double theRadialAngle) {
233 radialAngle = theRadialAngle;
236 public int getLocationMode() {
240 public void setLocationMode(int theLocationMode) {
241 locationMode = theLocationMode;
244 public double getLen() {
248 public void setLen(double theLen) {
252 public int getFinishCode() {
256 public void setFinishCode(int theFinishCode) {
257 finishCode = theFinishCode;