[fixes #358] Move configListener's set-positions to front
Moving it to the front ensures that the method doesn't exit before the listeners' methods are set (because of a return in the main component) + causes the fireComponentChangeEvent to be in the end
This commit is contained in:
parent
117c0c76ca
commit
e8a2fbf449
@ -65,16 +65,16 @@ public abstract class BodyComponent extends ExternalComponent {
|
|||||||
* clearPreset(). (BodyTube allows changing length without resetting the preset.)
|
* clearPreset(). (BodyTube allows changing length without resetting the preset.)
|
||||||
*/
|
*/
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
if (this.length == length)
|
|
||||||
return;
|
|
||||||
this.length = Math.max(length, 0);
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof BodyComponent) {
|
if (listener instanceof BodyComponent) {
|
||||||
((BodyComponent) listener).setLength(length);
|
((BodyComponent) listener).setLength(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.length == length)
|
||||||
|
return;
|
||||||
|
this.length = Math.max(length, 0);
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -115,6 +115,12 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setOuterRadius(double radius) {
|
public void setOuterRadius(double radius) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof BodyTube) {
|
||||||
|
((BodyTube) listener).setOuterRadius(radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.outerRadius == radius) && (autoRadius == false))
|
if ((this.outerRadius == radius) && (autoRadius == false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -125,12 +131,6 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
this.thickness = this.outerRadius;
|
this.thickness = this.outerRadius;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof BodyTube) {
|
|
||||||
((BodyTube) listener).setOuterRadius(radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -146,18 +146,18 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
* Sets whether the radius is selected automatically or not.
|
* Sets whether the radius is selected automatically or not.
|
||||||
*/
|
*/
|
||||||
public void setOuterRadiusAutomatic(boolean auto) {
|
public void setOuterRadiusAutomatic(boolean auto) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof BodyTube) {
|
||||||
|
((BodyTube) listener).setOuterRadiusAutomatic(auto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (autoRadius == auto)
|
if (autoRadius == auto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
autoRadius = auto;
|
autoRadius = auto;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof BodyTube) {
|
|
||||||
((BodyTube) listener).setOuterRadiusAutomatic(auto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -250,13 +250,13 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInnerRadius(double r) {
|
public void setInnerRadius(double r) {
|
||||||
setThickness(getOuterRadius() - r);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof BodyTube) {
|
if (listener instanceof BodyTube) {
|
||||||
((BodyTube) listener).setInnerRadius(r);
|
((BodyTube) listener).setInnerRadius(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setThickness(getOuterRadius() - r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -391,6 +391,16 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorConfig(MotorConfiguration newMotorConfig, FlightConfigurationId fcid){
|
public void setMotorConfig(MotorConfiguration newMotorConfig, FlightConfigurationId fcid){
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof BodyTube) {
|
||||||
|
if (newMotorConfig != null) {
|
||||||
|
BodyTube tube = (BodyTube) listener;
|
||||||
|
MotorConfiguration config = tube.getMotorConfig(fcid);
|
||||||
|
config.copyFrom(newMotorConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(null == newMotorConfig){
|
if(null == newMotorConfig){
|
||||||
this.motors.set( fcid, null);
|
this.motors.set( fcid, null);
|
||||||
}else{
|
}else{
|
||||||
@ -402,16 +412,6 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.isActingMount=true;
|
this.isActingMount=true;
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof BodyTube) {
|
|
||||||
if (newMotorConfig != null) {
|
|
||||||
BodyTube tube = (BodyTube) listener;
|
|
||||||
MotorConfiguration config = tube.getMotorConfig(fcid);
|
|
||||||
config.copyFrom(newMotorConfig);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -432,16 +432,16 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorMount(boolean _active){
|
public void setMotorMount(boolean _active){
|
||||||
if (this.isActingMount == _active)
|
|
||||||
return;
|
|
||||||
this.isActingMount = _active;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof BodyTube) {
|
if (listener instanceof BodyTube) {
|
||||||
((BodyTube) listener).setMotorMount(_active);
|
((BodyTube) listener).setMotorMount(_active);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isActingMount == _active)
|
||||||
|
return;
|
||||||
|
this.isActingMount = _active;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -474,16 +474,16 @@ public class BodyTube extends SymmetricComponent implements BoxBounded, MotorMou
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorOverhang(double overhang) {
|
public void setMotorOverhang(double overhang) {
|
||||||
if (MathUtil.equals(this.overhang, overhang))
|
|
||||||
return;
|
|
||||||
this.overhang = overhang;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof BodyTube) {
|
if (listener instanceof BodyTube) {
|
||||||
((BodyTube) listener).setMotorOverhang(overhang);
|
((BodyTube) listener).setMotorOverhang(overhang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.overhang, overhang))
|
||||||
|
return;
|
||||||
|
this.overhang = overhang;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,6 +142,12 @@ public abstract class ComponentAssembly extends RocketComponent implements Axial
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAxialMethod( final AxialMethod newMethod ) {
|
public void setAxialMethod( final AxialMethod newMethod ) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ComponentAssembly) {
|
||||||
|
((ComponentAssembly) listener).setAxialMethod(newMethod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (null == this.parent) {
|
if (null == this.parent) {
|
||||||
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
|
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
|
||||||
}
|
}
|
||||||
@ -159,12 +165,6 @@ public abstract class ComponentAssembly extends RocketComponent implements Axial
|
|||||||
throw new BugException("Unrecognized subclass of Component Assembly. Please update this method.");
|
throw new BugException("Unrecognized subclass of Component Assembly. Please update this method.");
|
||||||
}
|
}
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ComponentAssembly) {
|
|
||||||
((ComponentAssembly) listener).setAxialMethod(newMethod);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -60,31 +60,31 @@ public class EllipticalFinSet extends FinSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setHeight(double height) {
|
public void setHeight(double height) {
|
||||||
if (MathUtil.equals(this.height, height))
|
|
||||||
return;
|
|
||||||
this.height = height;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof EllipticalFinSet) {
|
if (listener instanceof EllipticalFinSet) {
|
||||||
((EllipticalFinSet) listener).setHeight(height);
|
((EllipticalFinSet) listener).setHeight(height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.height, height))
|
||||||
|
return;
|
||||||
|
this.height = height;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
if (MathUtil.equals(this.length, length))
|
|
||||||
return;
|
|
||||||
this.length = length;
|
|
||||||
validateFinTabLength();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof EllipticalFinSet) {
|
if (listener instanceof EllipticalFinSet) {
|
||||||
((EllipticalFinSet) listener).setLength(length);
|
((EllipticalFinSet) listener).setLength(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.length, length))
|
||||||
|
return;
|
||||||
|
this.length = length;
|
||||||
|
validateFinTabLength();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,16 +127,16 @@ public abstract class ExternalComponent extends RocketComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFinish(Finish finish) {
|
public void setFinish(Finish finish) {
|
||||||
if (this.finish == finish)
|
|
||||||
return;
|
|
||||||
this.finish = finish;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ExternalComponent) {
|
if (listener instanceof ExternalComponent) {
|
||||||
((ExternalComponent) listener).setFinish(finish);
|
((ExternalComponent) listener).setFinish(finish);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.finish == finish)
|
||||||
|
return;
|
||||||
|
this.finish = finish;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,6 +152,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
* @param n The number of fins, greater of equal to one.
|
* @param n The number of fins, greater of equal to one.
|
||||||
*/
|
*/
|
||||||
public void setFinCount(int n) {
|
public void setFinCount(int n) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FinSet) {
|
||||||
|
((FinSet) listener).setFinCount(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (finCount == n)
|
if (finCount == n)
|
||||||
return;
|
return;
|
||||||
if (n < 1)
|
if (n < 1)
|
||||||
@ -163,12 +169,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
finRotationIncrement = Transformation.rotate_x(2 * Math.PI / finCount);
|
finRotationIncrement = Transformation.rotate_x(2 * Math.PI / finCount);
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FinSet) {
|
|
||||||
((FinSet) listener).setFinCount(n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transformation getFinRotationTransformation() {
|
public Transformation getFinRotationTransformation() {
|
||||||
@ -193,13 +193,13 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
* @param r The base rotation in radians
|
* @param r The base rotation in radians
|
||||||
*/
|
*/
|
||||||
public void setBaseRotation(double r) {
|
public void setBaseRotation(double r) {
|
||||||
setAngleOffset(r);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setBaseRotation(r);
|
((FinSet) listener).setBaseRotation(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setAngleOffset(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -214,18 +214,18 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
* @param newCantRadians -- new cant angle, in radians
|
* @param newCantRadians -- new cant angle, in radians
|
||||||
*/
|
*/
|
||||||
public void setCantAngle(final double newCantRadians) {
|
public void setCantAngle(final double newCantRadians) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FinSet) {
|
||||||
|
((FinSet) listener).setCantAngle(newCantRadians);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final double clampedCant = MathUtil.clamp(newCantRadians, -MAX_CANT_RADIANS, MAX_CANT_RADIANS);
|
final double clampedCant = MathUtil.clamp(newCantRadians, -MAX_CANT_RADIANS, MAX_CANT_RADIANS);
|
||||||
if (MathUtil.equals(clampedCant, this.cantRadians))
|
if (MathUtil.equals(clampedCant, this.cantRadians))
|
||||||
return;
|
return;
|
||||||
this.cantRadians = clampedCant;
|
this.cantRadians = clampedCant;
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FinSet) {
|
|
||||||
((FinSet) listener).setCantAngle(newCantRadians);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transformation getCantRotation() {
|
public Transformation getCantRotation() {
|
||||||
@ -244,16 +244,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setThickness(double r) {
|
public void setThickness(double r) {
|
||||||
if (thickness == r)
|
|
||||||
return;
|
|
||||||
thickness = Math.max(r, 0);
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setThickness(r);
|
((FinSet) listener).setThickness(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (thickness == r)
|
||||||
|
return;
|
||||||
|
thickness = Math.max(r, 0);
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -262,16 +262,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setCrossSection(CrossSection cs) {
|
public void setCrossSection(CrossSection cs) {
|
||||||
if (crossSection == cs)
|
|
||||||
return;
|
|
||||||
crossSection = cs;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setCrossSection(cs);
|
((FinSet) listener).setCrossSection(cs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (crossSection == cs)
|
||||||
|
return;
|
||||||
|
crossSection = cs;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getTabHeight() {
|
public double getTabHeight() {
|
||||||
@ -295,6 +295,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void setTabHeight(final double newTabHeight) {
|
public void setTabHeight(final double newTabHeight) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FinSet) {
|
||||||
|
((FinSet) listener).setTabHeight(newTabHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(this.tabHeight, MathUtil.max(newTabHeight, 0))){
|
if (MathUtil.equals(this.tabHeight, MathUtil.max(newTabHeight, 0))){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -302,12 +308,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
tabHeight = newTabHeight;
|
tabHeight = newTabHeight;
|
||||||
validateFinTabHeight();
|
validateFinTabHeight();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FinSet) {
|
|
||||||
((FinSet) listener).setTabHeight(newTabHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -319,6 +319,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
* set tab length
|
* set tab length
|
||||||
*/
|
*/
|
||||||
public void setTabLength(final double lengthRequest) {
|
public void setTabLength(final double lengthRequest) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FinSet) {
|
||||||
|
((FinSet) listener).setTabLength(lengthRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(tabLength, MathUtil.max(lengthRequest, 0))) {
|
if (MathUtil.equals(tabLength, MathUtil.max(lengthRequest, 0))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -328,12 +334,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
updateTabPosition();
|
updateTabPosition();
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FinSet) {
|
|
||||||
((FinSet) listener).setTabLength(lengthRequest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateTabPosition(){
|
public void updateTabPosition(){
|
||||||
@ -346,16 +346,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
* @param offsetRequest new requested tab offset
|
* @param offsetRequest new requested tab offset
|
||||||
*/
|
*/
|
||||||
public void setTabOffset( final double offsetRequest) {
|
public void setTabOffset( final double offsetRequest) {
|
||||||
tabOffset = offsetRequest;
|
|
||||||
updateTabPosition();
|
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setTabOffset(offsetRequest);
|
((FinSet) listener).setTabOffset(offsetRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tabOffset = offsetRequest;
|
||||||
|
updateTabPosition();
|
||||||
|
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AxialMethod getTabOffsetMethod() {
|
public AxialMethod getTabOffsetMethod() {
|
||||||
@ -367,16 +367,16 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
* it is merely a lens through which other modules may view the tab's position.
|
* it is merely a lens through which other modules may view the tab's position.
|
||||||
*/
|
*/
|
||||||
public void setTabOffsetMethod(final AxialMethod newPositionMethod) {
|
public void setTabOffsetMethod(final AxialMethod newPositionMethod) {
|
||||||
this.tabOffsetMethod = newPositionMethod;
|
|
||||||
this.tabOffset = this.tabOffsetMethod.getAsOffset(tabPosition, tabLength, length);
|
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setTabOffsetMethod(newPositionMethod);
|
((FinSet) listener).setTabOffsetMethod(newPositionMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.tabOffsetMethod = newPositionMethod;
|
||||||
|
this.tabOffset = this.tabOffsetMethod.getAsOffset(tabPosition, tabLength, length);
|
||||||
|
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1016,6 +1016,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleOffset(final double angleRadians) {
|
public void setAngleOffset(final double angleRadians) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FinSet) {
|
||||||
|
((FinSet) listener).setAngleOffset(angleRadians);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final double reducedAngle = MathUtil.reducePi(angleRadians);
|
final double reducedAngle = MathUtil.reducePi(angleRadians);
|
||||||
if (MathUtil.equals(reducedAngle, firstFinOffsetRadians))
|
if (MathUtil.equals(reducedAngle, firstFinOffsetRadians))
|
||||||
return;
|
return;
|
||||||
@ -1028,12 +1034,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
}
|
}
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FinSet) {
|
|
||||||
((FinSet) listener).setAngleOffset(angleRadians);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1060,15 +1060,15 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleMethod(AngleMethod newAngleMethod ) {
|
public void setAngleMethod(AngleMethod newAngleMethod ) {
|
||||||
mutex.verify();
|
|
||||||
this.angleMethod = newAngleMethod;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setAngleMethod(newAngleMethod);
|
((FinSet) listener).setAngleMethod(newAngleMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex.verify();
|
||||||
|
this.angleMethod = newAngleMethod;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1094,12 +1094,13 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount(int newCount) {
|
public void setInstanceCount(int newCount) {
|
||||||
setFinCount(newCount);
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setInstanceCount(newCount);
|
((FinSet) listener).setInstanceCount(newCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setFinCount(newCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1146,6 +1147,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFilletMaterial(Material mat) {
|
public void setFilletMaterial(Material mat) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FinSet) {
|
||||||
|
((FinSet) listener).setFilletMaterial(mat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mat.getType() != Material.Type.BULK) {
|
if (mat.getType() != Material.Type.BULK) {
|
||||||
throw new IllegalArgumentException("ExternalComponent requires a bulk material" +
|
throw new IllegalArgumentException("ExternalComponent requires a bulk material" +
|
||||||
" type=" + mat.getType());
|
" type=" + mat.getType());
|
||||||
@ -1156,12 +1163,6 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
filletMaterial = mat;
|
filletMaterial = mat;
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FinSet) {
|
|
||||||
((FinSet) listener).setFilletMaterial(mat);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getFilletRadius() {
|
public double getFilletRadius() {
|
||||||
@ -1169,17 +1170,17 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFilletRadius(double r) {
|
public void setFilletRadius(double r) {
|
||||||
if (MathUtil.equals(filletRadius, r))
|
|
||||||
return;
|
|
||||||
filletRadius = r;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FinSet) {
|
if (listener instanceof FinSet) {
|
||||||
((FinSet) listener).setFilletRadius(r);
|
((FinSet) listener).setFilletRadius(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(filletRadius, r))
|
||||||
|
return;
|
||||||
|
filletRadius = r;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -152,13 +152,13 @@ public class FreeformFinSet extends FinSet {
|
|||||||
/** maintained just for backwards compatibility:
|
/** maintained just for backwards compatibility:
|
||||||
*/
|
*/
|
||||||
public void setPoints(Coordinate[] newPoints) {
|
public void setPoints(Coordinate[] newPoints) {
|
||||||
setPoints(new ArrayList<>(Arrays.asList(newPoints)));
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof FreeformFinSet) {
|
if (listener instanceof FreeformFinSet) {
|
||||||
((FreeformFinSet) listener).setPoints(newPoints);
|
((FreeformFinSet) listener).setPoints(newPoints);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPoints(new ArrayList<>(Arrays.asList(newPoints)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -167,6 +167,11 @@ public class FreeformFinSet extends FinSet {
|
|||||||
* @param newPoints New points to set as the exposed edges of the fin
|
* @param newPoints New points to set as the exposed edges of the fin
|
||||||
*/
|
*/
|
||||||
public void setPoints( ArrayList<Coordinate> newPoints) {
|
public void setPoints( ArrayList<Coordinate> newPoints) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof FreeformFinSet) {
|
||||||
|
((FreeformFinSet) listener).setPoints(newPoints);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final Coordinate delta = newPoints.get(0).multiply(-1);
|
final Coordinate delta = newPoints.get(0).multiply(-1);
|
||||||
if( IGNORE_SMALLER_THAN < delta.length2()){
|
if( IGNORE_SMALLER_THAN < delta.length2()){
|
||||||
@ -198,12 +203,6 @@ public class FreeformFinSet extends FinSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof FreeformFinSet) {
|
|
||||||
((FreeformFinSet) listener).setPoints(newPoints);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -130,6 +130,12 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setClusterConfiguration( final ClusterConfiguration cluster) {
|
public void setClusterConfiguration( final ClusterConfiguration cluster) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof InnerTube) {
|
||||||
|
((InnerTube) listener).setClusterConfiguration(cluster);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( cluster == this.cluster){
|
if( cluster == this.cluster){
|
||||||
// no change
|
// no change
|
||||||
return;
|
return;
|
||||||
@ -137,12 +143,6 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
this.cluster = cluster;
|
this.cluster = cluster;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof InnerTube) {
|
|
||||||
((InnerTube) listener).setClusterConfiguration(cluster);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BoundingBox getInstanceBoundingBox(){
|
public BoundingBox getInstanceBoundingBox(){
|
||||||
@ -189,16 +189,17 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
*/
|
*/
|
||||||
public void setClusterScale(double scale) {
|
public void setClusterScale(double scale) {
|
||||||
scale = Math.max(scale, 0);
|
scale = Math.max(scale, 0);
|
||||||
if (MathUtil.equals(clusterScale, scale))
|
|
||||||
return;
|
|
||||||
clusterScale = scale;
|
|
||||||
fireComponentChangeEvent(new ComponentChangeEvent(this, ComponentChangeEvent.MASS_CHANGE));
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof InnerTube) {
|
if (listener instanceof InnerTube) {
|
||||||
((InnerTube) listener).setClusterScale(scale);
|
((InnerTube) listener).setClusterScale(scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(clusterScale, scale))
|
||||||
|
return;
|
||||||
|
clusterScale = scale;
|
||||||
|
fireComponentChangeEvent(new ComponentChangeEvent(this, ComponentChangeEvent.MASS_CHANGE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -215,17 +216,17 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
* @param rotation the clusterRotation to set
|
* @param rotation the clusterRotation to set
|
||||||
*/
|
*/
|
||||||
public void setClusterRotation(double rotation) {
|
public void setClusterRotation(double rotation) {
|
||||||
rotation = MathUtil.reducePi(rotation);
|
|
||||||
if (clusterRotation == rotation)
|
|
||||||
return;
|
|
||||||
this.clusterRotation = rotation;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof InnerTube) {
|
if (listener instanceof InnerTube) {
|
||||||
((InnerTube) listener).setClusterRotation(rotation);
|
((InnerTube) listener).setClusterRotation(rotation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rotation = MathUtil.reducePi(rotation);
|
||||||
|
if (clusterRotation == rotation)
|
||||||
|
return;
|
||||||
|
this.clusterRotation = rotation;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -304,6 +305,12 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorConfig( final MotorConfiguration newMotorConfig, final FlightConfigurationId fcid){
|
public void setMotorConfig( final MotorConfiguration newMotorConfig, final FlightConfigurationId fcid){
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof InnerTube) {
|
||||||
|
((InnerTube) listener).setMotorConfig(newMotorConfig, fcid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if((null == newMotorConfig)){
|
if((null == newMotorConfig)){
|
||||||
this.motors.set( fcid, null);
|
this.motors.set( fcid, null);
|
||||||
}else{
|
}else{
|
||||||
@ -315,12 +322,6 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.isActingMount = true;
|
this.isActingMount = true;
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof InnerTube) {
|
|
||||||
((InnerTube) listener).setMotorConfig(newMotorConfig, fcid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -340,16 +341,16 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorMount(boolean _active){
|
public void setMotorMount(boolean _active){
|
||||||
if (this.isActingMount == _active)
|
|
||||||
return;
|
|
||||||
this.isActingMount = _active;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof InnerTube) {
|
if (listener instanceof InnerTube) {
|
||||||
((InnerTube) listener).setMotorMount(_active);
|
((InnerTube) listener).setMotorMount(_active);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isActingMount == _active)
|
||||||
|
return;
|
||||||
|
this.isActingMount = _active;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MOTOR_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -381,16 +382,16 @@ public class InnerTube extends ThicknessRingComponent implements AxialPositionab
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMotorOverhang(double overhang) {
|
public void setMotorOverhang(double overhang) {
|
||||||
if (MathUtil.equals(this.overhang, overhang))
|
|
||||||
return;
|
|
||||||
this.overhang = overhang;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof InnerTube) {
|
if (listener instanceof InnerTube) {
|
||||||
((InnerTube) listener).setMotorOverhang(overhang);
|
((InnerTube) listener).setMotorOverhang(overhang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.overhang, overhang))
|
||||||
|
return;
|
||||||
|
this.overhang = overhang;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -38,6 +38,12 @@ public class InsideColorComponentHandler {
|
|||||||
* @param appearance the inner appearance to be set
|
* @param appearance the inner appearance to be set
|
||||||
*/
|
*/
|
||||||
public void setInsideAppearance(Appearance appearance) {
|
public void setInsideAppearance(Appearance appearance) {
|
||||||
|
for (RocketComponent listener : component.configListeners) {
|
||||||
|
if (listener instanceof InsideColorComponent) {
|
||||||
|
((InsideColorComponent) listener).getInsideColorComponentHandler().setInsideAppearance(appearance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.insideAppearance = appearance;
|
this.insideAppearance = appearance;
|
||||||
if (this.insideAppearance != null) {
|
if (this.insideAppearance != null) {
|
||||||
Decal d = this.insideAppearance.getTexture();
|
Decal d = this.insideAppearance.getTexture();
|
||||||
@ -53,12 +59,6 @@ public class InsideColorComponentHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
component.fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
component.fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : component.configListeners) {
|
|
||||||
if (listener instanceof InsideColorComponent) {
|
|
||||||
((InsideColorComponent) listener).getInsideColorComponentHandler().setInsideAppearance(appearance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,13 +78,13 @@ public class InsideColorComponentHandler {
|
|||||||
* @param newState new edgesUseInsideAppearance value
|
* @param newState new edgesUseInsideAppearance value
|
||||||
*/
|
*/
|
||||||
public void setEdgesSameAsInside(boolean newState) {
|
public void setEdgesSameAsInside(boolean newState) {
|
||||||
this.edgesSameAsInside = newState;
|
|
||||||
|
|
||||||
for (RocketComponent listener : component.configListeners) {
|
for (RocketComponent listener : component.configListeners) {
|
||||||
if (listener instanceof InsideColorComponent) {
|
if (listener instanceof InsideColorComponent) {
|
||||||
((InsideColorComponent) listener).getInsideColorComponentHandler().setEdgesSameAsInside(newState);
|
((InsideColorComponent) listener).getInsideColorComponentHandler().setEdgesSameAsInside(newState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.edgesSameAsInside = newState;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,13 +103,13 @@ public class InsideColorComponentHandler {
|
|||||||
* @param newState new separateInsideOutside value
|
* @param newState new separateInsideOutside value
|
||||||
*/
|
*/
|
||||||
public void setSeparateInsideOutside(boolean newState) {
|
public void setSeparateInsideOutside(boolean newState) {
|
||||||
this.separateInsideOutside = newState;
|
|
||||||
|
|
||||||
for (RocketComponent listener : component.configListeners) {
|
for (RocketComponent listener : component.configListeners) {
|
||||||
if (listener instanceof InsideColorComponent) {
|
if (listener instanceof InsideColorComponent) {
|
||||||
((InsideColorComponent) listener).getInsideColorComponentHandler().setSeparateInsideOutside(newState);
|
((InsideColorComponent) listener).getInsideColorComponentHandler().setSeparateInsideOutside(newState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.separateInsideOutside = newState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void copyFrom(InsideColorComponentHandler src) {
|
public void copyFrom(InsideColorComponentHandler src) {
|
||||||
|
@ -49,18 +49,18 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOuterRadius(double radius) {
|
public void setOuterRadius(double radius) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof LaunchLug) {
|
||||||
|
((LaunchLug) listener).setOuterRadius(radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(this.radius, radius))
|
if (MathUtil.equals(this.radius, radius))
|
||||||
return;
|
return;
|
||||||
this.radius = radius;
|
this.radius = radius;
|
||||||
this.thickness = Math.min(this.thickness, this.radius);
|
this.thickness = Math.min(this.thickness, this.radius);
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof LaunchLug) {
|
|
||||||
((LaunchLug) listener).setOuterRadius(radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -70,13 +70,13 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInnerRadius(double innerRadius) {
|
public void setInnerRadius(double innerRadius) {
|
||||||
setOuterRadius(innerRadius + thickness);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof LaunchLug) {
|
if (listener instanceof LaunchLug) {
|
||||||
((LaunchLug) listener).setInnerRadius(innerRadius);
|
((LaunchLug) listener).setInnerRadius(innerRadius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setOuterRadius(innerRadius + thickness);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -85,17 +85,17 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setThickness(double thickness) {
|
public void setThickness(double thickness) {
|
||||||
if (MathUtil.equals(this.thickness, thickness))
|
|
||||||
return;
|
|
||||||
this.thickness = MathUtil.clamp(thickness, 0, radius);
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof LaunchLug) {
|
if (listener instanceof LaunchLug) {
|
||||||
((LaunchLug) listener).setThickness(thickness);
|
((LaunchLug) listener).setThickness(thickness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.thickness, thickness))
|
||||||
|
return;
|
||||||
|
this.thickness = MathUtil.clamp(thickness, 0, radius);
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -105,30 +105,30 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleOffset(double newAngleRadians) {
|
public void setAngleOffset(double newAngleRadians) {
|
||||||
double clamped_rad = MathUtil.clamp( newAngleRadians, -Math.PI, Math.PI);
|
|
||||||
if (MathUtil.equals(this.angleOffsetRadians, clamped_rad))
|
|
||||||
return;
|
|
||||||
this.angleOffsetRadians = clamped_rad;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof LaunchLug) {
|
if (listener instanceof LaunchLug) {
|
||||||
((LaunchLug) listener).setAngleOffset(newAngleRadians);
|
((LaunchLug) listener).setAngleOffset(newAngleRadians);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double clamped_rad = MathUtil.clamp( newAngleRadians, -Math.PI, Math.PI);
|
||||||
|
if (MathUtil.equals(this.angleOffsetRadians, clamped_rad))
|
||||||
|
return;
|
||||||
|
this.angleOffsetRadians = clamped_rad;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
if (MathUtil.equals(this.length, length))
|
|
||||||
return;
|
|
||||||
this.length = length;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof LaunchLug) {
|
if (listener instanceof LaunchLug) {
|
||||||
((LaunchLug) listener).setLength(length);
|
((LaunchLug) listener).setLength(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.length, length))
|
||||||
|
return;
|
||||||
|
this.length = length;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -272,26 +272,26 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceSeparation(final double _separation){
|
public void setInstanceSeparation(final double _separation){
|
||||||
this.instanceSeparation = _separation;
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof LaunchLug) {
|
if (listener instanceof LaunchLug) {
|
||||||
((LaunchLug) listener).setInstanceSeparation(_separation);
|
((LaunchLug) listener).setInstanceSeparation(_separation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.instanceSeparation = _separation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount( final int newCount ){
|
public void setInstanceCount( final int newCount ){
|
||||||
if( 0 < newCount ){
|
|
||||||
this.instanceCount = newCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof LaunchLug) {
|
if (listener instanceof LaunchLug) {
|
||||||
((LaunchLug) listener).setInstanceCount(newCount);
|
((LaunchLug) listener).setInstanceCount(newCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( 0 < newCount ){
|
||||||
|
this.instanceCount = newCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -59,17 +59,17 @@ public class MassComponent extends MassObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setComponentMass(double mass) {
|
public void setComponentMass(double mass) {
|
||||||
mass = Math.max(mass, 0);
|
|
||||||
if (MathUtil.equals(this.mass, mass))
|
|
||||||
return;
|
|
||||||
this.mass = mass;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof MassComponent) {
|
if (listener instanceof MassComponent) {
|
||||||
((MassComponent) listener).setComponentMass(mass);
|
((MassComponent) listener).setComponentMass(mass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mass = Math.max(mass, 0);
|
||||||
|
if (MathUtil.equals(this.mass, mass))
|
||||||
|
return;
|
||||||
|
this.mass = mass;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -81,17 +81,17 @@ public class MassComponent extends MassObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setDensity(double density) {
|
public void setDensity(double density) {
|
||||||
double m = density * getVolume();
|
|
||||||
m = MathUtil.clamp(m, 0, 1000000);
|
|
||||||
if (Double.isNaN(m))
|
|
||||||
m = 0;
|
|
||||||
setComponentMass(m);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof MassComponent) {
|
if (listener instanceof MassComponent) {
|
||||||
((MassComponent) listener).setDensity(density);
|
((MassComponent) listener).setDensity(density);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double m = density * getVolume();
|
||||||
|
m = MathUtil.clamp(m, 0, 1000000);
|
||||||
|
if (Double.isNaN(m))
|
||||||
|
m = 0;
|
||||||
|
setComponentMass(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -112,6 +112,12 @@ public class MassComponent extends MassObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setMassComponentType(MassComponent.MassComponentType compType) {
|
public void setMassComponentType(MassComponent.MassComponentType compType) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof MassComponent) {
|
||||||
|
((MassComponent) listener).setMassComponentType(compType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
if (this.massComponentType == compType) {
|
if (this.massComponentType == compType) {
|
||||||
return;
|
return;
|
||||||
@ -119,12 +125,6 @@ public class MassComponent extends MassObject {
|
|||||||
checkState();
|
checkState();
|
||||||
this.massComponentType = compType;
|
this.massComponentType = compType;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof MassComponent) {
|
|
||||||
((MassComponent) listener).setMassComponentType(compType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -51,18 +51,18 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
|
|
||||||
|
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof MassObject) {
|
||||||
|
((MassObject) listener).setLength(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
length = Math.max(length, 0);
|
length = Math.max(length, 0);
|
||||||
if (MathUtil.equals(this.length, length)) {
|
if (MathUtil.equals(this.length, length)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.length = length;
|
this.length = length;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof MassObject) {
|
|
||||||
((MassObject) listener).setLength(length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -73,17 +73,18 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
|
|
||||||
public final void setRadius(double radius) {
|
public final void setRadius(double radius) {
|
||||||
radius = Math.max(radius, 0);
|
radius = Math.max(radius, 0);
|
||||||
if (MathUtil.equals(this.radius, radius)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.radius = radius;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof MassObject) {
|
if (listener instanceof MassObject) {
|
||||||
((MassObject) listener).setRadius(radius);
|
((MassObject) listener).setRadius(radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.radius, radius)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.radius = radius;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -94,6 +95,13 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
|
|
||||||
public final void setRadialPosition(double radialPosition) {
|
public final void setRadialPosition(double radialPosition) {
|
||||||
radialPosition = Math.max(radialPosition, 0);
|
radialPosition = Math.max(radialPosition, 0);
|
||||||
|
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof MassObject) {
|
||||||
|
((MassObject) listener).setRadialPosition(radialPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(this.radialPosition, radialPosition)) {
|
if (MathUtil.equals(this.radialPosition, radialPosition)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -101,12 +109,6 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
shiftY = radialPosition * Math.cos(radialDirection);
|
shiftY = radialPosition * Math.cos(radialDirection);
|
||||||
shiftZ = radialPosition * Math.sin(radialDirection);
|
shiftZ = radialPosition * Math.sin(radialDirection);
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof MassObject) {
|
|
||||||
((MassObject) listener).setRadialPosition(radialPosition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final double getRadialDirection() {
|
public final double getRadialDirection() {
|
||||||
@ -114,6 +116,12 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setRadialDirection(double radialDirection) {
|
public final void setRadialDirection(double radialDirection) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof MassObject) {
|
||||||
|
((MassObject) listener).setRadialDirection(radialDirection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
radialDirection = MathUtil.reducePi(radialDirection);
|
radialDirection = MathUtil.reducePi(radialDirection);
|
||||||
if (MathUtil.equals(this.radialDirection, radialDirection)) {
|
if (MathUtil.equals(this.radialDirection, radialDirection)) {
|
||||||
return;
|
return;
|
||||||
@ -122,12 +130,6 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
shiftY = radialPosition * Math.cos(radialDirection);
|
shiftY = radialPosition * Math.cos(radialDirection);
|
||||||
shiftZ = radialPosition * Math.sin(radialDirection);
|
shiftZ = radialPosition * Math.sin(radialDirection);
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof MassObject) {
|
|
||||||
((MassObject) listener).setRadialDirection(radialDirection);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,17 +33,17 @@ public class Parachute extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setDiameter(double d) {
|
public void setDiameter(double d) {
|
||||||
if (MathUtil.equals(this.diameter, d))
|
|
||||||
return;
|
|
||||||
this.diameter = d;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Parachute) {
|
if (listener instanceof Parachute) {
|
||||||
((Parachute) listener).setDiameter(d);
|
((Parachute) listener).setDiameter(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.diameter, d))
|
||||||
|
return;
|
||||||
|
this.diameter = d;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -52,6 +52,12 @@ public class Parachute extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setLineMaterial(Material mat) {
|
public final void setLineMaterial(Material mat) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Parachute) {
|
||||||
|
((Parachute) listener).setLineMaterial(mat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mat.getType() != Material.Type.LINE) {
|
if (mat.getType() != Material.Type.LINE) {
|
||||||
throw new IllegalArgumentException("Attempted to set non-line material " + mat);
|
throw new IllegalArgumentException("Attempted to set non-line material " + mat);
|
||||||
}
|
}
|
||||||
@ -62,12 +68,6 @@ public class Parachute extends RecoveryDevice {
|
|||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
else
|
else
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Parachute) {
|
|
||||||
((Parachute) listener).setLineMaterial(mat);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -76,17 +76,17 @@ public class Parachute extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setLineCount(int n) {
|
public final void setLineCount(int n) {
|
||||||
if (this.lineCount == n)
|
|
||||||
return;
|
|
||||||
this.lineCount = n;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Parachute) {
|
if (listener instanceof Parachute) {
|
||||||
((Parachute) listener).setLineCount(n);
|
((Parachute) listener).setLineCount(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.lineCount == n)
|
||||||
|
return;
|
||||||
|
this.lineCount = n;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final double getLineLength() {
|
public final double getLineLength() {
|
||||||
@ -94,6 +94,12 @@ public class Parachute extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setLineLength(double length) {
|
public final void setLineLength(double length) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Parachute) {
|
||||||
|
((Parachute) listener).setLineLength(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(this.lineLength, length))
|
if (MathUtil.equals(this.lineLength, length))
|
||||||
return;
|
return;
|
||||||
this.lineLength = length;
|
this.lineLength = length;
|
||||||
@ -101,12 +107,6 @@ public class Parachute extends RecoveryDevice {
|
|||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
else
|
else
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Parachute) {
|
|
||||||
((Parachute) listener).setLineLength(length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -121,17 +121,17 @@ public class Parachute extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setArea(double area) {
|
public void setArea(double area) {
|
||||||
if (MathUtil.equals(getArea(), area))
|
|
||||||
return;
|
|
||||||
diameter = MathUtil.safeSqrt(area / Math.PI) * 2;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Parachute) {
|
if (listener instanceof Parachute) {
|
||||||
((Parachute) listener).setArea(area);
|
((Parachute) listener).setArea(area);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(getArea(), area))
|
||||||
|
return;
|
||||||
|
diameter = MathUtil.safeSqrt(area / Math.PI) * 2;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -117,6 +117,12 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount( final int newCount ){
|
public void setInstanceCount( final int newCount ){
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ParallelStage) {
|
||||||
|
((ParallelStage) listener).setInstanceCount(newCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
if ( newCount < 1) {
|
if ( newCount < 1) {
|
||||||
// there must be at least one instance....
|
// there must be at least one instance....
|
||||||
@ -126,12 +132,6 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
this.instanceCount = newCount;
|
this.instanceCount = newCount;
|
||||||
this.angleSeparation = Math.PI * 2 / this.instanceCount;
|
this.angleSeparation = Math.PI * 2 / this.instanceCount;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ParallelStage) {
|
|
||||||
((ParallelStage) listener).setInstanceCount(newCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -181,6 +181,12 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAxialMethod(final AxialMethod _newPosition) {
|
public void setAxialMethod(final AxialMethod _newPosition) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ParallelStage) {
|
||||||
|
((ParallelStage) listener).setAxialMethod(_newPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (null == this.parent) {
|
if (null == this.parent) {
|
||||||
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
|
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
|
||||||
}
|
}
|
||||||
@ -188,40 +194,40 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
super.setAxialMethod(_newPosition);
|
super.setAxialMethod(_newPosition);
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ParallelStage) {
|
|
||||||
((ParallelStage) listener).setAxialMethod(_newPosition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadiusOffset(final double radius_m) {
|
public void setRadiusOffset(final double radius_m) {
|
||||||
setRadius( radiusMethod, radius_m );
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ParallelStage) {
|
if (listener instanceof ParallelStage) {
|
||||||
((ParallelStage) listener).setRadiusOffset(radius_m);
|
((ParallelStage) listener).setRadiusOffset(radius_m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setRadius( radiusMethod, radius_m );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleOffset(final double angle_rad) {
|
public void setAngleOffset(final double angle_rad) {
|
||||||
mutex.verify();
|
|
||||||
this.angleOffset_rad = MathUtil.reducePi( angle_rad);
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ParallelStage) {
|
if (listener instanceof ParallelStage) {
|
||||||
((ParallelStage) listener).setAngleOffset(angle_rad);
|
((ParallelStage) listener).setAngleOffset(angle_rad);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex.verify();
|
||||||
|
this.angleOffset_rad = MathUtil.reducePi( angle_rad);
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadius(RadiusMethod requestedMethod, double requestedRadius ) {
|
public void setRadius(RadiusMethod requestedMethod, double requestedRadius ) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ParallelStage) {
|
||||||
|
((ParallelStage) listener).setRadius(requestedMethod, requestedRadius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
|
|
||||||
RadiusMethod newMethod = requestedMethod;
|
RadiusMethod newMethod = requestedMethod;
|
||||||
@ -235,12 +241,6 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
this.radiusOffset_m = newRadius;
|
this.radiusOffset_m = newRadius;
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ParallelStage) {
|
|
||||||
((ParallelStage) listener).setRadius(requestedMethod, requestedRadius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -250,15 +250,15 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleMethod(AngleMethod newAngleMethod ) {
|
public void setAngleMethod(AngleMethod newAngleMethod ) {
|
||||||
mutex.verify();
|
|
||||||
this.angleMethod = newAngleMethod;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ParallelStage) {
|
if (listener instanceof ParallelStage) {
|
||||||
((ParallelStage) listener).setAngleMethod(newAngleMethod);
|
((ParallelStage) listener).setAngleMethod(newAngleMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex.verify();
|
||||||
|
this.angleMethod = newAngleMethod;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -268,13 +268,13 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadiusMethod(RadiusMethod newRadiusMethod) {
|
public void setRadiusMethod(RadiusMethod newRadiusMethod) {
|
||||||
setRadius( newRadiusMethod, this.radiusOffset_m );
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ParallelStage) {
|
if (listener instanceof ParallelStage) {
|
||||||
((ParallelStage) listener).setRadiusMethod(newRadiusMethod);
|
((ParallelStage) listener).setRadiusMethod(newRadiusMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setRadius( newRadiusMethod, this.radiusOffset_m );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -163,6 +163,12 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount(int newCount ){
|
public void setInstanceCount(int newCount ){
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof PodSet) {
|
||||||
|
((PodSet) listener).setInstanceCount(newCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
if ( newCount < 1) {
|
if ( newCount < 1) {
|
||||||
// there must be at least one instance....
|
// there must be at least one instance....
|
||||||
@ -172,12 +178,6 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
this.instanceCount = newCount;
|
this.instanceCount = newCount;
|
||||||
this.angleSeparation = Math.PI * 2 / this.instanceCount;
|
this.angleSeparation = Math.PI * 2 / this.instanceCount;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof PodSet) {
|
|
||||||
((PodSet) listener).setInstanceCount(newCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -196,15 +196,15 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleOffset(double angle_rad) {
|
public void setAngleOffset(double angle_rad) {
|
||||||
mutex.verify();
|
|
||||||
this.angleOffset_rad = angle_rad;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof PodSet) {
|
if (listener instanceof PodSet) {
|
||||||
((PodSet) listener).setAngleOffset(angle_rad);
|
((PodSet) listener).setAngleOffset(angle_rad);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex.verify();
|
||||||
|
this.angleOffset_rad = angle_rad;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -218,6 +218,12 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadiusOffset(double radius_m) {
|
public void setRadiusOffset(double radius_m) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof PodSet) {
|
||||||
|
((PodSet) listener).setRadiusOffset(radius_m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
if( this.radiusMethod.clampToZero() ) {
|
if( this.radiusMethod.clampToZero() ) {
|
||||||
this.radiusOffset_m = 0.0;
|
this.radiusOffset_m = 0.0;
|
||||||
@ -225,12 +231,6 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
this.radiusOffset_m = radius_m;
|
this.radiusOffset_m = radius_m;
|
||||||
}
|
}
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof PodSet) {
|
|
||||||
((PodSet) listener).setRadiusOffset(radius_m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -240,19 +240,25 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadiusMethod(RadiusMethod newMethod ) {
|
public void setRadiusMethod(RadiusMethod newMethod ) {
|
||||||
mutex.verify();
|
|
||||||
this.radiusMethod = newMethod;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof PodSet) {
|
if (listener instanceof PodSet) {
|
||||||
((PodSet) listener).setRadiusMethod(newMethod);
|
((PodSet) listener).setRadiusMethod(newMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex.verify();
|
||||||
|
this.radiusMethod = newMethod;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadius(RadiusMethod requestMethod, double requestRadius ) {
|
public void setRadius(RadiusMethod requestMethod, double requestRadius ) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof PodSet) {
|
||||||
|
((PodSet) listener).setRadius(requestMethod, requestRadius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
|
|
||||||
RadiusMethod newMethod = requestMethod;
|
RadiusMethod newMethod = requestMethod;
|
||||||
@ -265,12 +271,6 @@ public class PodSet extends ComponentAssembly implements RingInstanceable {
|
|||||||
this.radiusMethod = newMethod;
|
this.radiusMethod = newMethod;
|
||||||
this.radiusOffset_m = newRadius;
|
this.radiusOffset_m = newRadius;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof PodSet) {
|
|
||||||
((PodSet) listener).setRadius(requestMethod, requestRadius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,13 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
|
|||||||
@Override
|
@Override
|
||||||
public void setOuterRadius(double r) {
|
public void setOuterRadius(double r) {
|
||||||
r = Math.max(r,0);
|
r = Math.max(r,0);
|
||||||
|
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RadiusRingComponent) {
|
||||||
|
((RadiusRingComponent) listener).setOuterRadius(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(outerRadius, r) && !isOuterRadiusAutomatic())
|
if (MathUtil.equals(outerRadius, r) && !isOuterRadiusAutomatic())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -63,12 +70,6 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
|
|||||||
|
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RadiusRingComponent) {
|
|
||||||
((RadiusRingComponent) listener).setOuterRadius(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -79,6 +80,13 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
|
|||||||
@Override
|
@Override
|
||||||
public void setInnerRadius(double r) {
|
public void setInnerRadius(double r) {
|
||||||
r = Math.max(r,0);
|
r = Math.max(r,0);
|
||||||
|
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RadiusRingComponent) {
|
||||||
|
((RadiusRingComponent) listener).setInnerRadius(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(innerRadius, r))
|
if (MathUtil.equals(innerRadius, r))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -91,12 +99,6 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
|
|||||||
|
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RadiusRingComponent) {
|
|
||||||
((RadiusRingComponent) listener).setInnerRadius(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -106,16 +108,16 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void setThickness(double thickness) {
|
public void setThickness(double thickness) {
|
||||||
double outer = getOuterRadius();
|
|
||||||
|
|
||||||
thickness = MathUtil.clamp(thickness, 0, outer);
|
|
||||||
setInnerRadius(outer - thickness);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RadiusRingComponent) {
|
if (listener instanceof RadiusRingComponent) {
|
||||||
((RadiusRingComponent) listener).setThickness(thickness);
|
((RadiusRingComponent) listener).setThickness(thickness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double outer = getOuterRadius();
|
||||||
|
|
||||||
|
thickness = MathUtil.clamp(thickness, 0, outer);
|
||||||
|
setInnerRadius(outer - thickness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -137,15 +139,15 @@ public abstract class RadiusRingComponent extends RingComponent implements Coaxi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount( final int newCount ){
|
public void setInstanceCount( final int newCount ){
|
||||||
if( 0 < newCount ){
|
|
||||||
this.instanceCount = newCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RadiusRingComponent) {
|
if (listener instanceof RadiusRingComponent) {
|
||||||
((RadiusRingComponent) listener).setInstanceCount(newCount);
|
((RadiusRingComponent) listener).setInstanceCount(newCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( 0 < newCount ){
|
||||||
|
this.instanceCount = newCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -152,60 +152,60 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
|
|||||||
|
|
||||||
|
|
||||||
public void setStandoff(double newStandoff){
|
public void setStandoff(double newStandoff){
|
||||||
this.standoff_m = Math.max( newStandoff, RailButton.MINIMUM_STANDOFF );
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setStandoff(newStandoff);
|
((RailButton) listener).setStandoff(newStandoff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.standoff_m = Math.max( newStandoff, RailButton.MINIMUM_STANDOFF );
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInnerDiameter(double newID ){
|
public void setInnerDiameter(double newID ){
|
||||||
this.innerDiameter_m = newID;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setInnerDiameter(newID);
|
((RailButton) listener).setInnerDiameter(newID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.innerDiameter_m = newID;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setOuterDiameter(double newOD ){
|
public void setOuterDiameter(double newOD ){
|
||||||
this.outerDiameter_m = newOD;
|
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setOuterDiameter(newOD);
|
((RailButton) listener).setOuterDiameter(newOD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.outerDiameter_m = newOD;
|
||||||
|
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTotalHeight(double newHeight ) {
|
public void setTotalHeight(double newHeight ) {
|
||||||
this.totalHeight_m = newHeight;
|
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setTotalHeight(newHeight);
|
((RailButton) listener).setTotalHeight(newHeight);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.totalHeight_m = newHeight;
|
||||||
|
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setThickness(double newThickness ) {
|
public void setThickness(double newThickness ) {
|
||||||
this.flangeHeight_m = newThickness;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setThickness(newThickness);
|
((RailButton) listener).setThickness(newThickness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.flangeHeight_m = newThickness;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -232,18 +232,18 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleOffset(double angle_rad){
|
public void setAngleOffset(double angle_rad){
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RailButton) {
|
||||||
|
((RailButton) listener).setAngleOffset(angle_rad);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
double clamped_rad = MathUtil.clamp(angle_rad, -Math.PI, Math.PI);
|
double clamped_rad = MathUtil.clamp(angle_rad, -Math.PI, Math.PI);
|
||||||
|
|
||||||
if (MathUtil.equals(this.angle_rad, clamped_rad))
|
if (MathUtil.equals(this.angle_rad, clamped_rad))
|
||||||
return;
|
return;
|
||||||
this.angle_rad = clamped_rad;
|
this.angle_rad = clamped_rad;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RailButton) {
|
|
||||||
((RailButton) listener).setAngleOffset(angle_rad);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -319,28 +319,28 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceSeparation(double _separation){
|
public void setInstanceSeparation(double _separation){
|
||||||
this.instanceSeparation = _separation;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setInstanceSeparation(_separation);
|
((RailButton) listener).setInstanceSeparation(_separation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.instanceSeparation = _separation;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount(int newCount ){
|
public void setInstanceCount(int newCount ){
|
||||||
if( 0 < newCount ){
|
|
||||||
this.instanceCount = newCount;
|
|
||||||
}
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RailButton) {
|
if (listener instanceof RailButton) {
|
||||||
((RailButton) listener).setInstanceCount(newCount);
|
((RailButton) listener).setInstanceCount(newCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( 0 < newCount ){
|
||||||
|
this.instanceCount = newCount;
|
||||||
|
}
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -49,17 +49,17 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setCD(double cd) {
|
public void setCD(double cd) {
|
||||||
if (MathUtil.equals(this.cd, cd) && !isCDAutomatic())
|
|
||||||
return;
|
|
||||||
this.cd = cd;
|
|
||||||
this.cdAutomatic = false;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RecoveryDevice) {
|
if (listener instanceof RecoveryDevice) {
|
||||||
((RecoveryDevice) listener).setCD(cd);
|
((RecoveryDevice) listener).setCD(cd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.cd, cd) && !isCDAutomatic())
|
||||||
|
return;
|
||||||
|
this.cd = cd;
|
||||||
|
this.cdAutomatic = false;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -68,16 +68,16 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setCDAutomatic(boolean auto) {
|
public void setCDAutomatic(boolean auto) {
|
||||||
if (cdAutomatic == auto)
|
|
||||||
return;
|
|
||||||
this.cdAutomatic = auto;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RecoveryDevice) {
|
if (listener instanceof RecoveryDevice) {
|
||||||
((RecoveryDevice) listener).setCDAutomatic(auto);
|
((RecoveryDevice) listener).setCDAutomatic(auto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cdAutomatic == auto)
|
||||||
|
return;
|
||||||
|
this.cdAutomatic = auto;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -87,6 +87,12 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setMaterial(Material mat) {
|
public final void setMaterial(Material mat) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RecoveryDevice) {
|
||||||
|
((RecoveryDevice) listener).setMaterial(mat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!(mat instanceof Material.Surface)) {
|
if (!(mat instanceof Material.Surface)) {
|
||||||
throw new IllegalArgumentException("Attempted to set non-surface material " + mat);
|
throw new IllegalArgumentException("Attempted to set non-surface material " + mat);
|
||||||
}
|
}
|
||||||
@ -95,12 +101,6 @@ public abstract class RecoveryDevice extends MassObject implements FlightConfigu
|
|||||||
this.material = (Material.Surface) mat;
|
this.material = (Material.Surface) mat;
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RecoveryDevice) {
|
|
||||||
((RecoveryDevice) listener).setMaterial(mat);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public FlightConfigurableParameterSet<DeploymentConfiguration> getDeploymentConfigurations() {
|
public FlightConfigurableParameterSet<DeploymentConfiguration> getDeploymentConfigurations() {
|
||||||
|
@ -54,16 +54,16 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
|
|
||||||
// Setter is protected, subclasses may make it public
|
// Setter is protected, subclasses may make it public
|
||||||
protected void setOuterRadiusAutomatic(boolean auto) {
|
protected void setOuterRadiusAutomatic(boolean auto) {
|
||||||
if (auto == outerRadiusAutomatic)
|
|
||||||
return;
|
|
||||||
outerRadiusAutomatic = auto;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RingComponent) {
|
if (listener instanceof RingComponent) {
|
||||||
((RingComponent) listener).setOuterRadiusAutomatic(auto);
|
((RingComponent) listener).setOuterRadiusAutomatic(auto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (auto == outerRadiusAutomatic)
|
||||||
|
return;
|
||||||
|
outerRadiusAutomatic = auto;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -73,34 +73,34 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
|
|
||||||
// Setter is protected, subclasses may make it public
|
// Setter is protected, subclasses may make it public
|
||||||
protected void setInnerRadiusAutomatic(boolean auto) {
|
protected void setInnerRadiusAutomatic(boolean auto) {
|
||||||
if (auto == innerRadiusAutomatic)
|
|
||||||
return;
|
|
||||||
innerRadiusAutomatic = auto;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RingComponent) {
|
if (listener instanceof RingComponent) {
|
||||||
((RingComponent) listener).setInnerRadiusAutomatic(auto);
|
((RingComponent) listener).setInnerRadiusAutomatic(auto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (auto == innerRadiusAutomatic)
|
||||||
|
return;
|
||||||
|
innerRadiusAutomatic = auto;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public final void setLength(double length) {
|
public final void setLength(double length) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RingComponent) {
|
||||||
|
((RingComponent) listener).setLength(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
double l = Math.max(length, 0);
|
double l = Math.max(length, 0);
|
||||||
if (this.length == l)
|
if (this.length == l)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.length = l;
|
this.length = l;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RingComponent) {
|
|
||||||
((RingComponent) listener).setLength(length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -121,6 +121,12 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
* @param dir the radial direction.
|
* @param dir the radial direction.
|
||||||
*/
|
*/
|
||||||
public void setRadialDirection(double dir) {
|
public void setRadialDirection(double dir) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RingComponent) {
|
||||||
|
((RingComponent) listener).setRadialDirection(dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dir = MathUtil.reducePi(dir);
|
dir = MathUtil.reducePi(dir);
|
||||||
if (radialDirection == dir)
|
if (radialDirection == dir)
|
||||||
return;
|
return;
|
||||||
@ -128,12 +134,6 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
shiftY = radialPosition * Math.cos(radialDirection);
|
shiftY = radialPosition * Math.cos(radialDirection);
|
||||||
shiftZ = radialPosition * Math.sin(radialDirection);
|
shiftZ = radialPosition * Math.sin(radialDirection);
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RingComponent) {
|
|
||||||
((RingComponent) listener).setRadialDirection(dir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BoundingBox getInstanceBoundingBox(){
|
public BoundingBox getInstanceBoundingBox(){
|
||||||
@ -166,18 +166,19 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
*/
|
*/
|
||||||
public void setRadialPosition(double pos) {
|
public void setRadialPosition(double pos) {
|
||||||
pos = Math.max(pos, 0);
|
pos = Math.max(pos, 0);
|
||||||
if (radialPosition == pos)
|
|
||||||
return;
|
|
||||||
radialPosition = pos;
|
|
||||||
shiftY = radialPosition * Math.cos(radialDirection);
|
|
||||||
shiftZ = radialPosition * Math.sin(radialDirection);
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof RingComponent) {
|
if (listener instanceof RingComponent) {
|
||||||
((RingComponent) listener).setRadialPosition(pos);
|
((RingComponent) listener).setRadialPosition(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (radialPosition == pos)
|
||||||
|
return;
|
||||||
|
radialPosition = pos;
|
||||||
|
shiftY = radialPosition * Math.cos(radialDirection);
|
||||||
|
shiftZ = radialPosition * Math.sin(radialDirection);
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -190,6 +191,12 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setRadialShift(double y, double z) {
|
public void setRadialShift(double y, double z) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof RingComponent) {
|
||||||
|
((RingComponent) listener).setRadialShift(y, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
radialPosition = Math.hypot(y, z);
|
radialPosition = Math.hypot(y, z);
|
||||||
radialDirection = Math.atan2(z, y);
|
radialDirection = Math.atan2(z, y);
|
||||||
|
|
||||||
@ -200,12 +207,6 @@ public abstract class RingComponent extends StructuralComponent implements BoxBo
|
|||||||
assert (MathUtil.equals(z, shiftZ));
|
assert (MathUtil.equals(z, shiftZ));
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof RingComponent) {
|
|
||||||
((RingComponent) listener).setRadialShift(y, z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -451,6 +451,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param appearance
|
* @param appearance
|
||||||
*/
|
*/
|
||||||
public void setAppearance(Appearance appearance) {
|
public void setAppearance(Appearance appearance) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setAppearance(appearance);
|
||||||
|
}
|
||||||
|
|
||||||
this.appearance = appearance;
|
this.appearance = appearance;
|
||||||
if (this.appearance != null) {
|
if (this.appearance != null) {
|
||||||
Decal d = this.appearance.getTexture();
|
Decal d = this.appearance.getTexture();
|
||||||
@ -465,12 +469,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// CHECK - should this be a TEXTURE_CHANGE and not NONFUNCTIONAL_CHANGE?
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
listener.setAppearance(appearance);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -486,6 +486,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* Set the color of the object to use in 2D figures.
|
* Set the color of the object to use in 2D figures.
|
||||||
*/
|
*/
|
||||||
public final void setColor(Color c) {
|
public final void setColor(Color c) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setColor(c);
|
||||||
|
}
|
||||||
|
|
||||||
if ((color == null && c == null) ||
|
if ((color == null && c == null) ||
|
||||||
(color != null && color.equals(c)))
|
(color != null && color.equals(c)))
|
||||||
return;
|
return;
|
||||||
@ -493,10 +497,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
checkState();
|
checkState();
|
||||||
this.color = c;
|
this.color = c;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setColor(c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -506,15 +506,15 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setLineStyle(LineStyle style) {
|
public final void setLineStyle(LineStyle style) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setLineStyle(style);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.lineStyle == style)
|
if (this.lineStyle == style)
|
||||||
return;
|
return;
|
||||||
checkState();
|
checkState();
|
||||||
this.lineStyle = style;
|
this.lineStyle = style;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setLineStyle(style);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -538,16 +538,16 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param m the override mass
|
* @param m the override mass
|
||||||
*/
|
*/
|
||||||
public final void setOverrideMass(double m) {
|
public final void setOverrideMass(double m) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setOverrideMass(m);
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(m, overrideMass))
|
if (MathUtil.equals(m, overrideMass))
|
||||||
return;
|
return;
|
||||||
checkState();
|
checkState();
|
||||||
overrideMass = Math.max(m, 0);
|
overrideMass = Math.max(m, 0);
|
||||||
if (massOverridden)
|
if (massOverridden)
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setOverrideMass(m);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -567,16 +567,18 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param o whether the mass is overridden
|
* @param o whether the mass is overridden
|
||||||
*/
|
*/
|
||||||
public final void setMassOverridden(boolean o) {
|
public final void setMassOverridden(boolean o) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setIgnoreComponentChange(false);
|
||||||
|
listener.setMassOverridden(o);
|
||||||
|
listener.setIgnoreComponentChange(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (massOverridden == o) {
|
if (massOverridden == o) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkState();
|
checkState();
|
||||||
massOverridden = o;
|
massOverridden = o;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setMassOverridden(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -609,6 +611,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param x the x-coordinate of the override CG to set.
|
* @param x the x-coordinate of the override CG to set.
|
||||||
*/
|
*/
|
||||||
public final void setOverrideCGX(double x) {
|
public final void setOverrideCGX(double x) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setOverrideCGX(x);
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(overrideCGX, x))
|
if (MathUtil.equals(overrideCGX, x))
|
||||||
return;
|
return;
|
||||||
checkState();
|
checkState();
|
||||||
@ -617,10 +623,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
else
|
else
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setOverrideCGX(x);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -639,16 +641,18 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param o whether the CG is overridden
|
* @param o whether the CG is overridden
|
||||||
*/
|
*/
|
||||||
public final void setCGOverridden(boolean o) {
|
public final void setCGOverridden(boolean o) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setIgnoreComponentChange(false);
|
||||||
|
listener.setCGOverridden(o);
|
||||||
|
listener.setIgnoreComponentChange(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (cgOverridden == o) {
|
if (cgOverridden == o) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkState();
|
checkState();
|
||||||
cgOverridden = o;
|
cgOverridden = o;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setCGOverridden(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -668,6 +672,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param x the override CD to set.
|
* @param x the override CD to set.
|
||||||
*/
|
*/
|
||||||
public final void setOverrideCD(double x) {
|
public final void setOverrideCD(double x) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setOverrideCD(x);
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(overrideCD, x))
|
if (MathUtil.equals(overrideCD, x))
|
||||||
return;
|
return;
|
||||||
checkState();
|
checkState();
|
||||||
@ -676,10 +684,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
else
|
else
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setOverrideCD(x);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -701,16 +705,16 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param o whether the CD is overridden
|
* @param o whether the CD is overridden
|
||||||
*/
|
*/
|
||||||
public final void setCDOverridden(boolean o) {
|
public final void setCDOverridden(boolean o) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setCDOverridden(o);
|
||||||
|
}
|
||||||
|
|
||||||
if(cdOverridden == o) {
|
if(cdOverridden == o) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkState();
|
checkState();
|
||||||
cdOverridden = o;
|
cdOverridden = o;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setCDOverridden(o);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -738,16 +742,17 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param override whether the mass and/or CG override overrides all subcomponent.
|
* @param override whether the mass and/or CG override overrides all subcomponent.
|
||||||
*/
|
*/
|
||||||
public void setOverrideSubcomponents(boolean override) {
|
public void setOverrideSubcomponents(boolean override) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setOverrideSubcomponents(override);
|
||||||
|
}
|
||||||
|
|
||||||
if (overrideSubcomponents == override) {
|
if (overrideSubcomponents == override) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkState();
|
checkState();
|
||||||
overrideSubcomponents = override;
|
overrideSubcomponents = override;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
listener.setOverrideSubcomponents(override);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -787,6 +792,12 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* the default name, currently the component name.
|
* the default name, currently the component name.
|
||||||
*/
|
*/
|
||||||
public final void setName(String name) {
|
public final void setName(String name) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setIgnoreComponentChange(false);
|
||||||
|
listener.setName(name);
|
||||||
|
listener.setIgnoreComponentChange(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.name.equals(name)) {
|
if (this.name.equals(name)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -795,11 +806,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
this.name = getComponentName();
|
this.name = getComponentName();
|
||||||
else
|
else
|
||||||
this.name = name;
|
this.name = name;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
listener.setName(name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -820,6 +828,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param comment the comment of the component.
|
* @param comment the comment of the component.
|
||||||
*/
|
*/
|
||||||
public final void setComment(String comment) {
|
public final void setComment(String comment) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setComment(comment);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.comment.equals(comment))
|
if (this.comment.equals(comment))
|
||||||
return;
|
return;
|
||||||
checkState();
|
checkState();
|
||||||
@ -827,11 +839,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
this.comment = "";
|
this.comment = "";
|
||||||
else
|
else
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
listener.setComment(comment);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -862,6 +871,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param preset the preset component to load, or <code>null</code> to clear the preset.
|
* @param preset the preset component to load, or <code>null</code> to clear the preset.
|
||||||
*/
|
*/
|
||||||
public final void loadPreset(ComponentPreset preset) {
|
public final void loadPreset(ComponentPreset preset) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.loadPreset(preset);
|
||||||
|
}
|
||||||
|
|
||||||
if (presetComponent == preset) {
|
if (presetComponent == preset) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -895,7 +908,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
loadFromPreset(preset);
|
loadFromPreset(preset);
|
||||||
|
|
||||||
this.presetComponent = preset;
|
this.presetComponent = preset;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
if (rocket != null) {
|
if (rocket != null) {
|
||||||
@ -903,9 +915,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
listener.loadPreset(preset);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -933,14 +943,14 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* otherwise.
|
* otherwise.
|
||||||
*/
|
*/
|
||||||
public final void clearPreset() {
|
public final void clearPreset() {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.clearPreset();
|
||||||
|
}
|
||||||
|
|
||||||
if (presetComponent == null)
|
if (presetComponent == null)
|
||||||
return;
|
return;
|
||||||
presetComponent = null;
|
presetComponent = null;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.clearPreset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1004,6 +1014,10 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* @param newAxialMethod the relative positioning.
|
* @param newAxialMethod the relative positioning.
|
||||||
*/
|
*/
|
||||||
public void setAxialMethod(final AxialMethod newAxialMethod) {
|
public void setAxialMethod(final AxialMethod newAxialMethod) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setAxialMethod(newAxialMethod);
|
||||||
|
}
|
||||||
|
|
||||||
if (newAxialMethod == this.axialMethod) {
|
if (newAxialMethod == this.axialMethod) {
|
||||||
// no change.
|
// no change.
|
||||||
return;
|
return;
|
||||||
@ -1016,10 +1030,6 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
|
|
||||||
// // this doesn't cause any physical change-- just how it's described.
|
// // this doesn't cause any physical change-- just how it's described.
|
||||||
// fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
// fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
listener.setAxialMethod(newAxialMethod);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,18 +26,18 @@ public class ShockCord extends MassObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setMaterial(Material m) {
|
public void setMaterial(Material m) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ShockCord) {
|
||||||
|
((ShockCord) listener).setMaterial(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m.getType() != Material.Type.LINE)
|
if (m.getType() != Material.Type.LINE)
|
||||||
throw new BugException("Attempting to set non-linear material.");
|
throw new BugException("Attempting to set non-linear material.");
|
||||||
if (material.equals(m))
|
if (material.equals(m))
|
||||||
return;
|
return;
|
||||||
this.material = m;
|
this.material = m;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ShockCord) {
|
|
||||||
((ShockCord) listener).setMaterial(m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -46,17 +46,17 @@ public class ShockCord extends MassObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setCordLength(double length) {
|
public void setCordLength(double length) {
|
||||||
length = MathUtil.max(length, 0);
|
|
||||||
if (MathUtil.equals(length, this.length))
|
|
||||||
return;
|
|
||||||
this.cordLength = length;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ShockCord) {
|
if (listener instanceof ShockCord) {
|
||||||
((ShockCord) listener).setCordLength(length);
|
((ShockCord) listener).setCordLength(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
length = MathUtil.max(length, 0);
|
||||||
|
if (MathUtil.equals(length, this.length))
|
||||||
|
return;
|
||||||
|
this.cordLength = length;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,6 +35,12 @@ public class Sleeve extends RingComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOuterRadius(double r) {
|
public void setOuterRadius(double r) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Sleeve) {
|
||||||
|
((Sleeve) listener).setOuterRadius(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(getOuterRadius(), r))
|
if (MathUtil.equals(getOuterRadius(), r))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -42,12 +48,6 @@ public class Sleeve extends RingComponent {
|
|||||||
if (thickness > r)
|
if (thickness > r)
|
||||||
thickness = r;
|
thickness = r;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Sleeve) {
|
|
||||||
((Sleeve) listener).setOuterRadius(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -68,17 +68,17 @@ public class Sleeve extends RingComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInnerRadius(double r) {
|
public void setInnerRadius(double r) {
|
||||||
r = Math.max(r, 0);
|
|
||||||
if (MathUtil.equals(innerRadius, r))
|
|
||||||
return;
|
|
||||||
innerRadius = r;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Sleeve) {
|
if (listener instanceof Sleeve) {
|
||||||
((Sleeve) listener).setInnerRadius(r);
|
((Sleeve) listener).setInnerRadius(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = Math.max(r, 0);
|
||||||
|
if (MathUtil.equals(innerRadius, r))
|
||||||
|
return;
|
||||||
|
innerRadius = r;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,17 +88,17 @@ public class Sleeve extends RingComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setThickness(double t) {
|
public void setThickness(double t) {
|
||||||
t = Math.max(t, 0);
|
|
||||||
if (MathUtil.equals(thickness, t))
|
|
||||||
return;
|
|
||||||
thickness = t;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Sleeve) {
|
if (listener instanceof Sleeve) {
|
||||||
((Sleeve) listener).setThickness(t);
|
((Sleeve) listener).setThickness(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t = Math.max(t, 0);
|
||||||
|
if (MathUtil.equals(thickness, t))
|
||||||
|
return;
|
||||||
|
thickness = t;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,17 +31,17 @@ public class Streamer extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setStripLength(double stripLength) {
|
public void setStripLength(double stripLength) {
|
||||||
if (MathUtil.equals(this.stripLength, stripLength))
|
|
||||||
return;
|
|
||||||
this.stripLength = stripLength;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Streamer) {
|
if (listener instanceof Streamer) {
|
||||||
((Streamer) listener).setStripLength(stripLength);
|
((Streamer) listener).setStripLength(stripLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.stripLength, stripLength))
|
||||||
|
return;
|
||||||
|
this.stripLength = stripLength;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getStripWidth() {
|
public double getStripWidth() {
|
||||||
@ -49,29 +49,29 @@ public class Streamer extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setStripWidth(double stripWidth) {
|
public void setStripWidth(double stripWidth) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Streamer) {
|
||||||
|
((Streamer) listener).setStripWidth(stripWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(this.stripWidth, stripWidth))
|
if (MathUtil.equals(this.stripWidth, stripWidth))
|
||||||
return;
|
return;
|
||||||
this.stripWidth = stripWidth;
|
this.stripWidth = stripWidth;
|
||||||
this.length = stripWidth;
|
this.length = stripWidth;
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Streamer) {
|
|
||||||
((Streamer) listener).setStripWidth(stripWidth);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
setStripWidth(length);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Streamer) {
|
if (listener instanceof Streamer) {
|
||||||
((Streamer) listener).setStripWidth(length);
|
((Streamer) listener).setStripWidth(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setStripWidth(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -82,6 +82,12 @@ public class Streamer extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAspectRatio(double ratio) {
|
public void setAspectRatio(double ratio) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Streamer) {
|
||||||
|
((Streamer) listener).setAspectRatio(ratio);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(getAspectRatio(), ratio))
|
if (MathUtil.equals(getAspectRatio(), ratio))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -90,12 +96,6 @@ public class Streamer extends RecoveryDevice {
|
|||||||
stripWidth = MathUtil.safeSqrt(area / ratio);
|
stripWidth = MathUtil.safeSqrt(area / ratio);
|
||||||
stripLength = ratio * stripWidth;
|
stripLength = ratio * stripWidth;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Streamer) {
|
|
||||||
((Streamer) listener).setAspectRatio(ratio);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -105,6 +105,12 @@ public class Streamer extends RecoveryDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setArea(double area) {
|
public void setArea(double area) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Streamer) {
|
||||||
|
((Streamer) listener).setArea(area);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (MathUtil.equals(getArea(), area))
|
if (MathUtil.equals(getArea(), area))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -112,12 +118,6 @@ public class Streamer extends RecoveryDevice {
|
|||||||
stripWidth = MathUtil.safeSqrt(area / ratio);
|
stripWidth = MathUtil.safeSqrt(area / ratio);
|
||||||
stripLength = ratio * stripWidth;
|
stripLength = ratio * stripWidth;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Streamer) {
|
|
||||||
((Streamer) listener).setArea(area);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,16 +46,17 @@ public abstract class StructuralComponent extends InternalComponent {
|
|||||||
if (mat.getType() != Material.Type.BULK) {
|
if (mat.getType() != Material.Type.BULK) {
|
||||||
throw new IllegalArgumentException("Attempted to set non-bulk material "+mat);
|
throw new IllegalArgumentException("Attempted to set non-bulk material "+mat);
|
||||||
}
|
}
|
||||||
if (mat.equals(material))
|
|
||||||
return;
|
|
||||||
this.material = mat;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof StructuralComponent) {
|
if (listener instanceof StructuralComponent) {
|
||||||
((StructuralComponent) listener).setMaterial(mat);
|
((StructuralComponent) listener).setMaterial(mat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mat.equals(material))
|
||||||
|
return;
|
||||||
|
this.material = mat;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,18 +112,18 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
|
|||||||
* allowed, and will result in setting the thickness to the maximum radius.
|
* allowed, and will result in setting the thickness to the maximum radius.
|
||||||
*/
|
*/
|
||||||
public void setThickness(double thickness) {
|
public void setThickness(double thickness) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof SymmetricComponent) {
|
||||||
|
((SymmetricComponent) listener).setThickness(thickness);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.thickness == thickness) && !filled)
|
if ((this.thickness == thickness) && !filled)
|
||||||
return;
|
return;
|
||||||
this.thickness = MathUtil.clamp(thickness, 0, Math.max(getForeRadius(), getAftRadius()));
|
this.thickness = MathUtil.clamp(thickness, 0, Math.max(getForeRadius(), getAftRadius()));
|
||||||
filled = false;
|
filled = false;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof SymmetricComponent) {
|
|
||||||
((SymmetricComponent) listener).setThickness(thickness);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -145,17 +145,17 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
|
|||||||
* the wall thickness will have no effect.
|
* the wall thickness will have no effect.
|
||||||
*/
|
*/
|
||||||
public void setFilled(boolean filled) {
|
public void setFilled(boolean filled) {
|
||||||
if (this.filled == filled)
|
|
||||||
return;
|
|
||||||
this.filled = filled;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
clearPreset();
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof SymmetricComponent) {
|
if (listener instanceof SymmetricComponent) {
|
||||||
((SymmetricComponent) listener).setFilled(filled);
|
((SymmetricComponent) listener).setFilled(filled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.filled == filled)
|
||||||
|
return;
|
||||||
|
this.filled = filled;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
clearPreset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,6 +52,12 @@ public abstract class ThicknessRingComponent extends RingComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOuterRadius(double r) {
|
public void setOuterRadius(double r) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ThicknessRingComponent) {
|
||||||
|
((ThicknessRingComponent) listener).setOuterRadius(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
r = Math.max(r,0);
|
r = Math.max(r,0);
|
||||||
if (MathUtil.equals(outerRadius, r) && !isOuterRadiusAutomatic())
|
if (MathUtil.equals(outerRadius, r) && !isOuterRadiusAutomatic())
|
||||||
return;
|
return;
|
||||||
@ -65,12 +71,6 @@ public abstract class ThicknessRingComponent extends RingComponent {
|
|||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ThicknessRingComponent) {
|
|
||||||
((ThicknessRingComponent) listener).setOuterRadius(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -81,6 +81,12 @@ public abstract class ThicknessRingComponent extends RingComponent {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void setThickness(double thickness) {
|
public void setThickness(double thickness) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof ThicknessRingComponent) {
|
||||||
|
((ThicknessRingComponent) listener).setThickness(thickness);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
double outer = getOuterRadius();
|
double outer = getOuterRadius();
|
||||||
|
|
||||||
thickness = MathUtil.clamp(thickness, 0, outer);
|
thickness = MathUtil.clamp(thickness, 0, outer);
|
||||||
@ -92,12 +98,6 @@ public abstract class ThicknessRingComponent extends RingComponent {
|
|||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof ThicknessRingComponent) {
|
|
||||||
((ThicknessRingComponent) listener).setThickness(thickness);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -107,14 +107,14 @@ public abstract class ThicknessRingComponent extends RingComponent {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void setInnerRadius(double r) {
|
public void setInnerRadius(double r) {
|
||||||
r = Math.max(r,0);
|
|
||||||
setThickness(getOuterRadius() - r);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof ThicknessRingComponent) {
|
if (listener instanceof ThicknessRingComponent) {
|
||||||
((ThicknessRingComponent) listener).setInnerRadius(r);
|
((ThicknessRingComponent) listener).setInnerRadius(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = Math.max(r,0);
|
||||||
|
setThickness(getOuterRadius() - r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,6 +103,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setForeRadius(double radius) {
|
public void setForeRadius(double radius) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Transition) {
|
||||||
|
((Transition) listener).setForeRadius(radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.foreRadius == radius) && (autoForeRadius == false))
|
if ((this.foreRadius == radius) && (autoForeRadius == false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -114,12 +120,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
|
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Transition) {
|
|
||||||
((Transition) listener).setForeRadius(radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -128,6 +128,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setForeRadiusAutomatic(boolean auto) {
|
public void setForeRadiusAutomatic(boolean auto) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Transition) {
|
||||||
|
((Transition) listener).setForeRadiusAutomatic(auto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (autoForeRadius == auto)
|
if (autoForeRadius == auto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -135,12 +141,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
|
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Transition) {
|
|
||||||
((Transition) listener).setForeRadiusAutomatic(auto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -171,6 +171,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAftRadius(double radius) {
|
public void setAftRadius(double radius) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Transition) {
|
||||||
|
((Transition) listener).setAftRadius(radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.aftRadius == radius) && (autoAftRadius2 == false))
|
if ((this.aftRadius == radius) && (autoAftRadius2 == false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -182,12 +188,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
|
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Transition) {
|
|
||||||
((Transition) listener).setAftRadius(radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -196,6 +196,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAftRadiusAutomatic(boolean auto) {
|
public void setAftRadiusAutomatic(boolean auto) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Transition) {
|
||||||
|
((Transition) listener).setAftRadiusAutomatic(auto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (autoAftRadius2 == auto)
|
if (autoAftRadius2 == auto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -203,12 +209,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
|
|
||||||
clearPreset();
|
clearPreset();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Transition) {
|
|
||||||
((Transition) listener).setAftRadiusAutomatic(auto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -248,6 +248,12 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setType(Shape type) {
|
public void setType(Shape type) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof Transition) {
|
||||||
|
((Transition) listener).setType(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
throw new IllegalArgumentException("setType called with null argument");
|
throw new IllegalArgumentException("setType called with null argument");
|
||||||
}
|
}
|
||||||
@ -257,12 +263,6 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
this.clipped = type.isClippable();
|
this.clipped = type.isClippable();
|
||||||
this.shapeParameter = type.defaultParameter();
|
this.shapeParameter = type.defaultParameter();
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof Transition) {
|
|
||||||
((Transition) listener).setType(type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getShapeParameter() {
|
public double getShapeParameter() {
|
||||||
@ -270,16 +270,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setShapeParameter(double n) {
|
public void setShapeParameter(double n) {
|
||||||
if (shapeParameter == n)
|
|
||||||
return;
|
|
||||||
this.shapeParameter = MathUtil.clamp(n, type.minParameter(), type.maxParameter());
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setShapeParameter(n);
|
((Transition) listener).setShapeParameter(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (shapeParameter == n)
|
||||||
|
return;
|
||||||
|
this.shapeParameter = MathUtil.clamp(n, type.minParameter(), type.maxParameter());
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isClipped() {
|
public boolean isClipped() {
|
||||||
@ -289,16 +289,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setClipped(boolean c) {
|
public void setClipped(boolean c) {
|
||||||
if (clipped == c)
|
|
||||||
return;
|
|
||||||
clipped = c;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setClipped(c);
|
((Transition) listener).setClipped(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clipped == c)
|
||||||
|
return;
|
||||||
|
clipped = c;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isClippedEnabled() {
|
public boolean isClippedEnabled() {
|
||||||
@ -321,17 +321,17 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setForeShoulderRadius(double foreShoulderRadius) {
|
public void setForeShoulderRadius(double foreShoulderRadius) {
|
||||||
if (MathUtil.equals(this.foreShoulderRadius, foreShoulderRadius))
|
|
||||||
return;
|
|
||||||
this.foreShoulderRadius = foreShoulderRadius;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setForeShoulderRadius(foreShoulderRadius);
|
((Transition) listener).setForeShoulderRadius(foreShoulderRadius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.foreShoulderRadius, foreShoulderRadius))
|
||||||
|
return;
|
||||||
|
this.foreShoulderRadius = foreShoulderRadius;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getForeShoulderThickness() {
|
public double getForeShoulderThickness() {
|
||||||
@ -339,16 +339,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setForeShoulderThickness(double foreShoulderThickness) {
|
public void setForeShoulderThickness(double foreShoulderThickness) {
|
||||||
if (MathUtil.equals(this.foreShoulderThickness, foreShoulderThickness))
|
|
||||||
return;
|
|
||||||
this.foreShoulderThickness = foreShoulderThickness;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setForeShoulderThickness(foreShoulderThickness);
|
((Transition) listener).setForeShoulderThickness(foreShoulderThickness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.foreShoulderThickness, foreShoulderThickness))
|
||||||
|
return;
|
||||||
|
this.foreShoulderThickness = foreShoulderThickness;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getForeShoulderLength() {
|
public double getForeShoulderLength() {
|
||||||
@ -356,16 +356,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setForeShoulderLength(double foreShoulderLength) {
|
public void setForeShoulderLength(double foreShoulderLength) {
|
||||||
if (MathUtil.equals(this.foreShoulderLength, foreShoulderLength))
|
|
||||||
return;
|
|
||||||
this.foreShoulderLength = foreShoulderLength;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setForeShoulderLength(foreShoulderLength);
|
((Transition) listener).setForeShoulderLength(foreShoulderLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.foreShoulderLength, foreShoulderLength))
|
||||||
|
return;
|
||||||
|
this.foreShoulderLength = foreShoulderLength;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isForeShoulderCapped() {
|
public boolean isForeShoulderCapped() {
|
||||||
@ -373,16 +373,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setForeShoulderCapped(boolean capped) {
|
public void setForeShoulderCapped(boolean capped) {
|
||||||
if (this.foreShoulderCapped == capped)
|
|
||||||
return;
|
|
||||||
this.foreShoulderCapped = capped;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setForeShoulderCapped(capped);
|
((Transition) listener).setForeShoulderCapped(capped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.foreShoulderCapped == capped)
|
||||||
|
return;
|
||||||
|
this.foreShoulderCapped = capped;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -393,17 +393,17 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAftShoulderRadius(double aftShoulderRadius) {
|
public void setAftShoulderRadius(double aftShoulderRadius) {
|
||||||
if (MathUtil.equals(this.aftShoulderRadius, aftShoulderRadius))
|
|
||||||
return;
|
|
||||||
this.aftShoulderRadius = aftShoulderRadius;
|
|
||||||
clearPreset();
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setAftShoulderRadius(aftShoulderRadius);
|
((Transition) listener).setAftShoulderRadius(aftShoulderRadius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.aftShoulderRadius, aftShoulderRadius))
|
||||||
|
return;
|
||||||
|
this.aftShoulderRadius = aftShoulderRadius;
|
||||||
|
clearPreset();
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getAftShoulderThickness() {
|
public double getAftShoulderThickness() {
|
||||||
@ -411,16 +411,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAftShoulderThickness(double aftShoulderThickness) {
|
public void setAftShoulderThickness(double aftShoulderThickness) {
|
||||||
if (MathUtil.equals(this.aftShoulderThickness, aftShoulderThickness))
|
|
||||||
return;
|
|
||||||
this.aftShoulderThickness = aftShoulderThickness;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setAftShoulderThickness(aftShoulderThickness);
|
((Transition) listener).setAftShoulderThickness(aftShoulderThickness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.aftShoulderThickness, aftShoulderThickness))
|
||||||
|
return;
|
||||||
|
this.aftShoulderThickness = aftShoulderThickness;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getAftShoulderLength() {
|
public double getAftShoulderLength() {
|
||||||
@ -428,16 +428,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAftShoulderLength(double aftShoulderLength) {
|
public void setAftShoulderLength(double aftShoulderLength) {
|
||||||
if (MathUtil.equals(this.aftShoulderLength, aftShoulderLength))
|
|
||||||
return;
|
|
||||||
this.aftShoulderLength = aftShoulderLength;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setAftShoulderLength(aftShoulderLength);
|
((Transition) listener).setAftShoulderLength(aftShoulderLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.aftShoulderLength, aftShoulderLength))
|
||||||
|
return;
|
||||||
|
this.aftShoulderLength = aftShoulderLength;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAftShoulderCapped() {
|
public boolean isAftShoulderCapped() {
|
||||||
@ -445,16 +445,16 @@ public class Transition extends SymmetricComponent implements InsideColorCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setAftShoulderCapped(boolean capped) {
|
public void setAftShoulderCapped(boolean capped) {
|
||||||
if (this.aftShoulderCapped == capped)
|
|
||||||
return;
|
|
||||||
this.aftShoulderCapped = capped;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof Transition) {
|
if (listener instanceof Transition) {
|
||||||
((Transition) listener).setAftShoulderCapped(capped);
|
((Transition) listener).setAftShoulderCapped(capped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.aftShoulderCapped == capped)
|
||||||
|
return;
|
||||||
|
this.aftShoulderCapped = capped;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,6 +57,12 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
|
|
||||||
public void setFinShape(double rootChord, double tipChord, double sweep, double height,
|
public void setFinShape(double rootChord, double tipChord, double sweep, double height,
|
||||||
double thickness) {
|
double thickness) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TrapezoidFinSet) {
|
||||||
|
((TrapezoidFinSet) listener).setFinShape(rootChord, tipChord, sweep, height, thickness);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this.length == rootChord && this.tipChord == tipChord && this.sweep == sweep &&
|
if (this.length == rootChord && this.tipChord == tipChord && this.sweep == sweep &&
|
||||||
this.height == height && this.thickness == thickness)
|
this.height == height && this.thickness == thickness)
|
||||||
return;
|
return;
|
||||||
@ -67,12 +73,6 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
this.thickness = thickness;
|
this.thickness = thickness;
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TrapezoidFinSet) {
|
|
||||||
((TrapezoidFinSet) listener).setFinShape(rootChord, tipChord, sweep, height, thickness);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getRootChord() {
|
public double getRootChord() {
|
||||||
@ -80,18 +80,18 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setRootChord(double r) {
|
public void setRootChord(double r) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TrapezoidFinSet) {
|
||||||
|
((TrapezoidFinSet) listener).setRootChord(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (length == r)
|
if (length == r)
|
||||||
return;
|
return;
|
||||||
length = Math.max(r, 0);
|
length = Math.max(r, 0);
|
||||||
updateTabPosition();
|
updateTabPosition();
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TrapezoidFinSet) {
|
|
||||||
((TrapezoidFinSet) listener).setRootChord(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getTipChord() {
|
public double getTipChord() {
|
||||||
@ -99,16 +99,16 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setTipChord(double r) {
|
public void setTipChord(double r) {
|
||||||
if (tipChord == r)
|
|
||||||
return;
|
|
||||||
tipChord = Math.max(r, 0);
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TrapezoidFinSet) {
|
if (listener instanceof TrapezoidFinSet) {
|
||||||
((TrapezoidFinSet) listener).setTipChord(r);
|
((TrapezoidFinSet) listener).setTipChord(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tipChord == r)
|
||||||
|
return;
|
||||||
|
tipChord = Math.max(r, 0);
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,16 +122,16 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
* Set the sweep length.
|
* Set the sweep length.
|
||||||
*/
|
*/
|
||||||
public void setSweep(double r) {
|
public void setSweep(double r) {
|
||||||
if (sweep == r)
|
|
||||||
return;
|
|
||||||
sweep = r;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TrapezoidFinSet) {
|
if (listener instanceof TrapezoidFinSet) {
|
||||||
((TrapezoidFinSet) listener).setSweep(r);
|
((TrapezoidFinSet) listener).setSweep(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sweep == r)
|
||||||
|
return;
|
||||||
|
sweep = r;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -154,6 +154,12 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
* and the angle itself is not stored.
|
* and the angle itself is not stored.
|
||||||
*/
|
*/
|
||||||
public void setSweepAngle(double r) {
|
public void setSweepAngle(double r) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TrapezoidFinSet) {
|
||||||
|
((TrapezoidFinSet) listener).setSweepAngle(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (r > MAX_SWEEP_ANGLE)
|
if (r > MAX_SWEEP_ANGLE)
|
||||||
r = MAX_SWEEP_ANGLE;
|
r = MAX_SWEEP_ANGLE;
|
||||||
if (r < -MAX_SWEEP_ANGLE)
|
if (r < -MAX_SWEEP_ANGLE)
|
||||||
@ -162,12 +168,6 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
if (Double.isNaN(mySweep) || Double.isInfinite(mySweep))
|
if (Double.isNaN(mySweep) || Double.isInfinite(mySweep))
|
||||||
return;
|
return;
|
||||||
setSweep(mySweep);
|
setSweep(mySweep);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TrapezoidFinSet) {
|
|
||||||
((TrapezoidFinSet) listener).setSweepAngle(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getHeight() {
|
public double getHeight() {
|
||||||
@ -175,16 +175,16 @@ public class TrapezoidFinSet extends FinSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setHeight(double r) {
|
public void setHeight(double r) {
|
||||||
if (height == r)
|
|
||||||
return;
|
|
||||||
height = Math.max(r, 0);
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TrapezoidFinSet) {
|
if (listener instanceof TrapezoidFinSet) {
|
||||||
((TrapezoidFinSet) listener).setHeight(r);
|
((TrapezoidFinSet) listener).setHeight(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (height == r)
|
||||||
|
return;
|
||||||
|
height = Math.max(r, 0);
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,16 +61,16 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
if (MathUtil.equals(this.length, length))
|
|
||||||
return;
|
|
||||||
this.length = length;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TubeFinSet) {
|
if (listener instanceof TubeFinSet) {
|
||||||
((TubeFinSet) listener).setLength(length);
|
((TubeFinSet) listener).setLength(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MathUtil.equals(this.length, length))
|
||||||
|
return;
|
||||||
|
this.length = length;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -122,6 +122,12 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
* @param radius the outside radius in standard units
|
* @param radius the outside radius in standard units
|
||||||
*/
|
*/
|
||||||
public void setOuterRadius(double radius) {
|
public void setOuterRadius(double radius) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TubeFinSet) {
|
||||||
|
((TubeFinSet) listener).setOuterRadius(radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((this.outerRadius == radius) && (autoRadius == false))
|
if ((this.outerRadius == radius) && (autoRadius == false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -132,30 +138,24 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
this.thickness = this.outerRadius;
|
this.thickness = this.outerRadius;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TubeFinSet) {
|
|
||||||
((TubeFinSet) listener).setOuterRadius(radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets whether the radius is selected automatically or not.
|
* Sets whether the radius is selected automatically or not.
|
||||||
*/
|
*/
|
||||||
public void setOuterRadiusAutomatic(boolean auto) {
|
public void setOuterRadiusAutomatic(boolean auto) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TubeFinSet) {
|
||||||
|
((TubeFinSet) listener).setOuterRadiusAutomatic(auto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (autoRadius == auto)
|
if (autoRadius == auto)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
autoRadius = auto;
|
autoRadius = auto;
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
clearPreset();
|
clearPreset();
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TubeFinSet) {
|
|
||||||
((TubeFinSet) listener).setOuterRadiusAutomatic(auto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getInnerRadius() {
|
public double getInnerRadius() {
|
||||||
@ -163,13 +163,13 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setInnerRadius(double r) {
|
public void setInnerRadius(double r) {
|
||||||
setThickness(getOuterRadius() - r);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TubeFinSet) {
|
if (listener instanceof TubeFinSet) {
|
||||||
((TubeFinSet) listener).setInnerRadius(r);
|
((TubeFinSet) listener).setInnerRadius(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setThickness(getOuterRadius() - r);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,17 +185,17 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
* allowed, and will result in setting the thickness to the maximum radius.
|
* allowed, and will result in setting the thickness to the maximum radius.
|
||||||
*/
|
*/
|
||||||
public void setThickness(double thickness) {
|
public void setThickness(double thickness) {
|
||||||
if ((this.thickness == thickness))
|
|
||||||
return;
|
|
||||||
this.thickness = MathUtil.clamp(thickness, 0, getOuterRadius());
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
|
||||||
clearPreset();
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TubeFinSet) {
|
if (listener instanceof TubeFinSet) {
|
||||||
((TubeFinSet) listener).setThickness(thickness);
|
((TubeFinSet) listener).setThickness(thickness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((this.thickness == thickness))
|
||||||
|
return;
|
||||||
|
this.thickness = MathUtil.clamp(thickness, 0, getOuterRadius());
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
clearPreset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -217,6 +217,12 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
* @param n The number of fins, greater of equal to one.
|
* @param n The number of fins, greater of equal to one.
|
||||||
*/
|
*/
|
||||||
public void setFinCount(int n) {
|
public void setFinCount(int n) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TubeFinSet) {
|
||||||
|
((TubeFinSet) listener).setFinCount(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fins == n)
|
if (fins == n)
|
||||||
return;
|
return;
|
||||||
if (n < 1)
|
if (n < 1)
|
||||||
@ -226,12 +232,6 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
fins = n;
|
fins = n;
|
||||||
finRotation = Transformation.rotate_x(2 * Math.PI / fins);
|
finRotation = Transformation.rotate_x(2 * Math.PI / fins);
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TubeFinSet) {
|
|
||||||
((TubeFinSet) listener).setFinCount(n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -251,13 +251,13 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
* @param r The base rotation amount.
|
* @param r The base rotation amount.
|
||||||
*/
|
*/
|
||||||
public void setBaseRotation(double r) {
|
public void setBaseRotation(double r) {
|
||||||
setAngleOffset(r);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TubeFinSet) {
|
if (listener instanceof TubeFinSet) {
|
||||||
((TubeFinSet) listener).setBaseRotation(r);
|
((TubeFinSet) listener).setBaseRotation(r);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setAngleOffset(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transformation getBaseRotationTransformation() {
|
public Transformation getBaseRotationTransformation() {
|
||||||
@ -397,13 +397,13 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstanceCount(int newCount) {
|
public void setInstanceCount(int newCount) {
|
||||||
setFinCount(newCount);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TubeFinSet) {
|
if (listener instanceof TubeFinSet) {
|
||||||
((TubeFinSet) listener).setInstanceCount(newCount);
|
((TubeFinSet) listener).setInstanceCount(newCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setFinCount(newCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -425,6 +425,12 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleOffset(double angleRadians) {
|
public void setAngleOffset(double angleRadians) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof TubeFinSet) {
|
||||||
|
((TubeFinSet) listener).setAngleOffset(angleRadians);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final double reducedAngle = MathUtil.reducePi(angleRadians);
|
final double reducedAngle = MathUtil.reducePi(angleRadians);
|
||||||
if (MathUtil.equals(reducedAngle, firstFinOffsetRadians))
|
if (MathUtil.equals(reducedAngle, firstFinOffsetRadians))
|
||||||
return;
|
return;
|
||||||
@ -437,12 +443,6 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
|
||||||
if (listener instanceof TubeFinSet) {
|
|
||||||
((TubeFinSet) listener).setAngleOffset(angleRadians);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -457,15 +457,15 @@ public class TubeFinSet extends ExternalComponent implements AxialPositionable,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngleMethod(AngleMethod newAngleMethod) {
|
public void setAngleMethod(AngleMethod newAngleMethod) {
|
||||||
mutex.verify();
|
|
||||||
this.angleMethod = newAngleMethod;
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
|
||||||
|
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof TubeFinSet) {
|
if (listener instanceof TubeFinSet) {
|
||||||
((TubeFinSet) listener).setAngleMethod(newAngleMethod);
|
((TubeFinSet) listener).setAngleMethod(newAngleMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex.verify();
|
||||||
|
this.angleMethod = newAngleMethod;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -81,8 +81,6 @@ public abstract class FinSetConfig extends RocketComponentConfig {
|
|||||||
public void run() {
|
public void run() {
|
||||||
//// Convert fin set
|
//// Convert fin set
|
||||||
document.addUndoPosition(trans.get("FinSetConfig.Convertfinset"));
|
document.addUndoPosition(trans.get("FinSetConfig.Convertfinset"));
|
||||||
RocketComponent freeform =
|
|
||||||
FreeformFinSet.convertFinSet((FinSet) component);
|
|
||||||
|
|
||||||
List<RocketComponent> listeners = new ArrayList<>();
|
List<RocketComponent> listeners = new ArrayList<>();
|
||||||
for (RocketComponent listener : component.getConfigListeners()) {
|
for (RocketComponent listener : component.getConfigListeners()) {
|
||||||
@ -91,6 +89,9 @@ public abstract class FinSetConfig extends RocketComponentConfig {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RocketComponent freeform =
|
||||||
|
FreeformFinSet.convertFinSet((FinSet) component);
|
||||||
|
|
||||||
ComponentConfigDialog.showDialog(freeform, listeners);
|
ComponentConfigDialog.showDialog(freeform, listeners);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user