[Bugfix] Fixed Initialization Positioning Bug
Positioning Behavior of RocketComponent defaulted to returning NaN or zero during unordered initialization. This prevented proper loading of Rocksim files.
This commit is contained in:
parent
ec5a3119c5
commit
d43381d70c
@ -9,6 +9,7 @@ import net.sf.openrocket.aerodynamics.WarningSet;
|
|||||||
import net.sf.openrocket.file.DocumentLoadingContext;
|
import net.sf.openrocket.file.DocumentLoadingContext;
|
||||||
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
|
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
|
||||||
import net.sf.openrocket.file.rocksim.RocksimLocationMode;
|
import net.sf.openrocket.file.rocksim.RocksimLocationMode;
|
||||||
|
import net.sf.openrocket.rocketcomponent.RadiusRingComponent;
|
||||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||||
|
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
@ -83,10 +84,10 @@ public abstract class PositionDependentHandler<C extends RocketComponent> extend
|
|||||||
*/
|
*/
|
||||||
public static void setLocation(RocketComponent component, RocketComponent.Position position, double location) {
|
public static void setLocation(RocketComponent component, RocketComponent.Position position, double location) {
|
||||||
if (position.equals(RocketComponent.Position.BOTTOM)) {
|
if (position.equals(RocketComponent.Position.BOTTOM)) {
|
||||||
component.setPositionValue(-1d * location);
|
component.setAxialOffset(-1d * location);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
component.setPositionValue(location);
|
component.setAxialOffset(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -914,12 +914,14 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @return double position of the component relative to the parent, with respect to <code>position</code>
|
* @return double position of the component relative to the parent, with respect to <code>position</code>
|
||||||
*/
|
*/
|
||||||
public double asPositionValue(Position thePosition) {
|
public double asPositionValue(Position thePosition) {
|
||||||
|
double relativeLength;
|
||||||
if (null == this.parent) {
|
if (null == this.parent) {
|
||||||
return Double.NaN;
|
relativeLength = 0;
|
||||||
|
}else{
|
||||||
|
relativeLength = this.parent.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
double thisX = this.position.x;
|
double thisX = this.position.x;
|
||||||
double relativeLength = this.parent.length;
|
|
||||||
double result = Double.NaN;
|
double result = Double.NaN;
|
||||||
|
|
||||||
switch (thePosition) {
|
switch (thePosition) {
|
||||||
@ -1032,8 +1034,19 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
}
|
}
|
||||||
if (null == this.parent) {
|
if (null == this.parent) {
|
||||||
// if this is the root of a hierarchy, constrain the position to zero.
|
// if this is the root of a hierarchy, constrain the position to zero.
|
||||||
|
if( this instanceof Rocket ){
|
||||||
|
this.offset =0;
|
||||||
|
this.position = Coordinate.ZERO;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// debug vv
|
||||||
|
else if( this instanceof RingComponent ){
|
||||||
|
log.error("Attempting to set offset of a parent-less class :"+this.getName());
|
||||||
|
}
|
||||||
|
|
||||||
this.offset = newOffset;
|
this.offset = newOffset;
|
||||||
this.position= Coordinate.ZERO;
|
// best-effort approximation. this should be corrected later on in the initialization process.
|
||||||
|
this.position= new Coordinate( newOffset, 0, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user