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.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;
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;
22 * The base class for all OpenRocket to Rocksim conversions.
25 @XmlAccessorType(XmlAccessType.FIELD)
26 public abstract class BasePartDTO {
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;
60 * Default constructor.
62 protected BasePartDTO() {
66 * Copy constructor of sorts, that performs all common conversions for components.
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);
76 if (! (ec instanceof FinSet)) {
77 setLen(ec.getLength() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
79 setUseKnownCG(ec.isCGOverridden() || ec.isMassOverridden() ? 1 : 0);
80 setName(ec.getName());
82 setXb(ec.getPositionValue() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
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);
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);
95 if (ec instanceof ExternalComponent) {
96 ExternalComponent comp = (ExternalComponent) ec;
97 setLocationMode(RocksimLocationMode.toCode(comp.getRelativePosition()));
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());
105 setMaterial(material);
107 setFinishCode(RocksimFinishCode.toCode(comp.getFinish()));
109 else if (ec instanceof StructuralComponent) {
110 StructuralComponent comp = (StructuralComponent) ec;
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());
119 setMaterial(material);
121 else if (ec instanceof RecoveryDevice) {
122 RecoveryDevice comp = (RecoveryDevice) ec;
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());
131 setMaterial(material);
134 if (ec instanceof RingComponent) {
135 RingComponent rc = (RingComponent)ec;
136 setRadialAngle(rc.getRadialDirection());
137 setRadialLoc(rc.getRadialPosition() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
139 else if (ec instanceof MassObject) {
140 MassObject rc = (MassObject)ec;
141 setRadialAngle(rc.getRadialDirection());
142 setRadialLoc(rc.getRadialPosition() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH);
146 public Double getKnownMass() {
150 public void setKnownMass(Double theKnownMass) {
151 knownMass = theKnownMass;
154 public double getDensity() {
158 public void setDensity(double theDensity) {
159 density = theDensity;
162 public String getMaterial() {
166 public void setMaterial(String theMaterial) {
167 material = theMaterial;
170 public String getName() {
174 public void setName(String theName) {
178 public Double getKnownCG() {
182 public void setKnownCG(Double theKnownCG) {
183 knownCG = theKnownCG;
186 public int getUseKnownCG() {
190 public void setUseKnownCG(int theUseKnownCG) {
191 useKnownCG = theUseKnownCG;
194 public double getXb() {
198 public void setXb(double theXb) {
202 public double getCalcMass() {
206 public void setCalcMass(double theCalcMass) {
207 calcMass = theCalcMass;
210 public double getCalcCG() {
214 public void setCalcCG(double theCalcCG) {
218 public int getDensityType() {
222 public void setDensityType(int theDensityType) {
223 densityType = theDensityType;
226 public double getRadialLoc() {
230 public void setRadialLoc(double theRadialLoc) {
231 radialLoc = theRadialLoc;
234 public double getRadialAngle() {
238 public void setRadialAngle(double theRadialAngle) {
239 radialAngle = theRadialAngle;
242 public int getLocationMode() {
246 public void setLocationMode(int theLocationMode) {
247 locationMode = theLocationMode;
250 public double getLen() {
254 public void setLen(double theLen) {
258 public int getFinishCode() {
262 public void setFinishCode(int theFinishCode) {
263 finishCode = theFinishCode;