diff --git a/core/src/net/sf/openrocket/rocketcomponent/ComponentAssembly.java b/core/src/net/sf/openrocket/rocketcomponent/ComponentAssembly.java index 16c40b0ac..75d688849 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/ComponentAssembly.java +++ b/core/src/net/sf/openrocket/rocketcomponent/ComponentAssembly.java @@ -87,8 +87,8 @@ public abstract class ComponentAssembly extends RocketComponent implements Axia public double getRotationalUnitInertia() { return 0; } - - public double getOuterRadius(){ + + public double getBoundingRadius(){ double outerRadius=0; for( RocketComponent comp : children ){ double thisRadius=0; diff --git a/core/src/net/sf/openrocket/rocketcomponent/FinSet.java b/core/src/net/sf/openrocket/rocketcomponent/FinSet.java index b508766db..d5387aebf 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/FinSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/FinSet.java @@ -455,10 +455,10 @@ public abstract class FinSet extends ExternalComponent implements RingInstanceab } @Override - public double getOuterRadius(){ - return 0.0; + public double getBoundingRadius(){ + return 0.; } - + private void calculateAreaCG() { Coordinate[] points = this.getFinPoints(); finArea = 0; diff --git a/core/src/net/sf/openrocket/rocketcomponent/position/RadiusMethod.java b/core/src/net/sf/openrocket/rocketcomponent/position/RadiusMethod.java index eccba4d08..b671953c6 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/position/RadiusMethod.java +++ b/core/src/net/sf/openrocket/rocketcomponent/position/RadiusMethod.java @@ -34,10 +34,14 @@ public enum RadiusMethod implements DistanceMethod { @Override public double getRadius( final RocketComponent parentComponent, final RocketComponent thisComponent, final double requestedOffset ){ - if( (parentComponent instanceof BodyTube ) && (thisComponent instanceof RadiusPositionable ) ) { - return (((BodyTube)parentComponent).getOuterRadius()+((RadiusPositionable)thisComponent).getOuterRadius() + requestedOffset); + double radius = requestedOffset; + if( parentComponent instanceof BodyTube ) { + radius += ((BodyTube)parentComponent).getOuterRadius(); } - return requestedOffset; // fail-safe path + if( thisComponent instanceof RadiusPositionable ) { + radius += ((RadiusPositionable)thisComponent).getBoundingRadius(); + } + return radius; } }, @@ -47,10 +51,14 @@ public enum RadiusMethod implements DistanceMethod { SURFACE ( Application.getTranslator().get("RocketComponent.Position.Method.Radius.SURFACE") ) { @Override public double getRadius( final RocketComponent parentComponent, final RocketComponent thisComponent, final double requestedOffset ){ - if( (parentComponent instanceof BodyTube ) && (thisComponent instanceof RadiusPositionable ) ) { - return ((BodyTube)parentComponent).getOuterRadius()+((RadiusPositionable)thisComponent).getOuterRadius(); + double radius = 0.; + if( parentComponent instanceof BodyTube ) { + radius += ((BodyTube)parentComponent).getOuterRadius(); } - return 0.; // fail-safe path + if( thisComponent instanceof RadiusPositionable ) { + radius += ((RadiusPositionable)thisComponent).getBoundingRadius(); + } + return radius; } }; @@ -70,7 +78,7 @@ public enum RadiusMethod implements DistanceMethod { public String toString() { return description; } - + @Override public boolean clampToZero() { return true; } diff --git a/core/src/net/sf/openrocket/rocketcomponent/position/RadiusPositionable.java b/core/src/net/sf/openrocket/rocketcomponent/position/RadiusPositionable.java index d730a704d..68c749783 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/position/RadiusPositionable.java +++ b/core/src/net/sf/openrocket/rocketcomponent/position/RadiusPositionable.java @@ -1,9 +1,9 @@ package net.sf.openrocket.rocketcomponent.position; public interface RadiusPositionable { - - public double getOuterRadius(); - + + public double getBoundingRadius(); + public double getRadiusOffset(); public void setRadiusOffset(final double radius);