Merge pull request #1650 from SiboVG/issue-1649
[#1649] Fix scaling of MassObject with autoRadius
This commit is contained in:
commit
2d783a41cc
@ -65,6 +65,25 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the length, ignoring the auto radius setting.
|
||||||
|
* @param length new length
|
||||||
|
*/
|
||||||
|
public void setLengthNoAuto(double length) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
if (listener instanceof MassObject) {
|
||||||
|
((MassObject) listener).setLengthNoAuto(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
length = Math.max(length, 0);
|
||||||
|
if (MathUtil.equals(this.length, length)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.length = length;
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
public void setLength(double length) {
|
public void setLength(double length) {
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
if (listener instanceof MassObject) {
|
if (listener instanceof MassObject) {
|
||||||
|
@ -126,8 +126,11 @@ public class ScaleDialog extends JDialog {
|
|||||||
SCALERS_NO_OFFSET.put(FreeformFinSet.class, list);
|
SCALERS_NO_OFFSET.put(FreeformFinSet.class, list);
|
||||||
|
|
||||||
// MassObject
|
// MassObject
|
||||||
addScaler(MassObject.class, "Length", SCALERS_NO_OFFSET);
|
list = new ArrayList<>(1);
|
||||||
addScaler(MassObject.class, "Radius", SCALERS_NO_OFFSET);
|
list.add(new MassObjectScaler());
|
||||||
|
SCALERS_NO_OFFSET.put(MassObject.class, list);
|
||||||
|
//addScaler(MassObject.class, "LengthNoAuto", SCALERS_NO_OFFSET);
|
||||||
|
addScaler(MassObject.class, "Radius", "isRadiusAutomatic", SCALERS_NO_OFFSET);
|
||||||
addScaler(MassObject.class, "RadialPosition", SCALERS_OFFSET);
|
addScaler(MassObject.class, "RadialPosition", SCALERS_OFFSET);
|
||||||
|
|
||||||
// MassComponent
|
// MassComponent
|
||||||
@ -704,6 +707,25 @@ public class ScaleDialog extends JDialog {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class MassObjectScaler implements Scaler {
|
||||||
|
@Override
|
||||||
|
public void scale(RocketComponent component, double multiplier, boolean scaleMass) {
|
||||||
|
if (scaleMass) {
|
||||||
|
MassObject c = (MassObject) component;
|
||||||
|
if (c.isRadiusAutomatic()) {
|
||||||
|
double volume = Math.PI * Math.pow(c.getRadiusNoAuto(), 2) * c.getLengthNoAuto();
|
||||||
|
double scaledVolume = volume * MathUtil.pow3(multiplier);
|
||||||
|
c.setRadius(c.getRadiusNoAuto() * multiplier);
|
||||||
|
c.setLengthNoAuto(scaledVolume / (Math.PI * Math.pow(c.getRadiusNoAuto(), 2)));
|
||||||
|
c.setRadiusAutomatic(true);
|
||||||
|
} else {
|
||||||
|
c.setLength(c.getLength() * multiplier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static class FreeformFinSetScaler implements Scaler {
|
private static class FreeformFinSetScaler implements Scaler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user