package net.sf.openrocket.rocketcomponent;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.MathUtil;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-
/**
* Rocket body tube component. Has only two parameters, a radius and length.
- *
+ *
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
public class BodyTube extends SymmetricComponent implements MotorMount, Coaxial {
private static final Translator trans = Application.getTranslator();
-
- private double radius = 0;
+
+ private double outerRadius = 0;
private boolean autoRadius = false; // Radius chosen automatically based on parent component
// When changing the inner radius, thickness is modified
public BodyTube() {
super();
this.length = 8 * DEFAULT_RADIUS;
- this.radius = DEFAULT_RADIUS;
+ this.outerRadius = DEFAULT_RADIUS;
this.autoRadius = true;
}
public BodyTube(double length, double radius) {
super();
- this.radius = Math.max(radius, 0);
+ this.outerRadius = Math.max(radius, 0);
this.length = Math.max(length, 0);
}
/**
* Return the outer radius of the body tube.
- *
- * @return the outside radius of the tube
+ *
+ * @return the outside radius of the tube
*/
- @Override
- public double getOuterRadius () {
+ @Override
+ public double getOuterRadius() {
if (autoRadius) {
// Return auto radius from front or rear
double r = -1;
r = DEFAULT_RADIUS;
return r;
}
- return radius;
+ return outerRadius;
}
* Set the outer radius of the body tube. If the radius is less than the wall thickness,
* the wall thickness is decreased accordingly of the value of the radius.
* This method sets the automatic radius off.
- *
- * @param radius the outside radius in standard units
+ *
+ * @param radius the outside radius in standard units
*/
- @Override
- public void setOuterRadius (double radius) {
- if ((this.radius == radius) && (autoRadius == false))
+ @Override
+ public void setOuterRadius(double radius) {
+ if ((this.outerRadius == radius) && (autoRadius == false))
return;
this.autoRadius = false;
- this.radius = Math.max(radius, 0);
+ this.outerRadius = Math.max(radius, 0);
- if (this.thickness > this.radius)
- this.thickness = this.radius;
+ if (this.thickness > this.outerRadius)
+ this.thickness = this.outerRadius;
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
}
* Returns whether the radius is selected automatically or not.
* Returns false also in case automatic radius selection is not possible.
*/
- public boolean isRadiusAutomatic() {
+ public boolean isOuterRadiusAutomatic() {
return autoRadius;
}
/**
- * Sets whether the radius is selected automatically or not.
+ * Sets whether the radius is selected automatically or not.
*/
- public void setRadiusAutomatic(boolean auto) {
+ public void setOuterRadiusAutomatic(boolean auto) {
if (autoRadius == auto)
return;
@Override
- public double getAftRadius() { return getOuterRadius(); }
+ public double getAftRadius() {
+ return getOuterRadius();
+ }
+
@Override
- public double getForeRadius() { return getOuterRadius(); }
+ public double getForeRadius() {
+ return getOuterRadius();
+ }
+
@Override
public boolean isAftRadiusAutomatic() {
- return isRadiusAutomatic();
+ return isOuterRadiusAutomatic();
}
@Override
public boolean isForeRadiusAutomatic() {
- return isRadiusAutomatic();
+ return isOuterRadiusAutomatic();
}
@Override
protected double getFrontAutoRadius() {
- if (isRadiusAutomatic()) {
+ if (isOuterRadiusAutomatic()) {
// Search for previous SymmetricComponent
SymmetricComponent c = this.getPreviousSymmetricComponent();
if (c != null) {
@Override
protected double getRearAutoRadius() {
- if (isRadiusAutomatic()) {
+ if (isOuterRadiusAutomatic()) {
// Search for next SymmetricComponent
SymmetricComponent c = this.getNextSymmetricComponent();
if (c != null) {
-
-
-
-
- @Override
+
+ @Override
public double getInnerRadius() {
if (filled)
return 0;
- return Math.max(getOuterRadius()-thickness, 0);
+ return Math.max(getOuterRadius() - thickness, 0);
}
- @Override
+ @Override
public void setInnerRadius(double r) {
- setThickness(getOuterRadius()-r);
+ setThickness(getOuterRadius() - r);
}
//// Body tube
return trans.get("BodyTube.BodyTube");
}
-
- /**
- * Accept a visitor to this BodyTube in the component hierarchy.
- *
- * @param theVisitor the visitor that will be called back with a reference to this BodyTube
- */
- @Override
- public void accept (final ComponentVisitor theVisitor) {
- theVisitor.visit(this);
- }
-
-
+
+
/************ Component calculations ***********/
// From SymmetricComponent
if (filled)
return 0.0;
else
- return Math.max(getOuterRadius()-thickness,0);
+ return Math.max(getOuterRadius() - thickness, 0);
}
@Override
public double getLongitudinalUnitInertia() {
// 1/12 * (3 * (r1^2 + r2^2) + h^2)
- return (3 * (MathUtil.pow2(getInnerRadius())) + MathUtil.pow2(getOuterRadius()) +
- MathUtil.pow2(getLength())) / 12;
+ return (3 * (MathUtil.pow2(getInnerRadius())) + MathUtil.pow2(getOuterRadius()) + MathUtil.pow2(getLength())) / 12;
}
@Override
public double getRotationalUnitInertia() {
// 1/2 * (r1^2 + r2^2)
- return (MathUtil.pow2(getInnerRadius()) + MathUtil.pow2(getOuterRadius()))/2;
+ return (MathUtil.pow2(getInnerRadius()) + MathUtil.pow2(getOuterRadius())) / 2;
}
/**
* Adds bounding coordinates to the given set. The body tube will fit within the
* convex hull of the points.
- *
+ *
* Currently the points are simply a rectangular box around the body tube.
*/
@Override
/**
* Check whether the given type can be added to this component. BodyTubes allow any
* InternalComponents or ExternalComponents, excluding BodyComponents, to be added.
- *
+ *
* @param type The RocketComponent class type to add.
* @return Whether such a component can be added.
*/
/*
* (non-Javadoc)
* Copy the motor and ejection delay HashMaps.
- *
+ *
* @see rocketcomponent.RocketComponent#copy()
*/
@SuppressWarnings("unchecked")