From 3b270e499b92554c62e474067ebb1704488782bd Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sun, 11 Sep 2022 14:35:53 +0200 Subject: [PATCH] [#1661] Add scaling for rail buttons --- .../openrocket/gui/dialogs/ScaleDialog.java | 43 ++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java index ce2fe5c16..85a48b039 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java @@ -6,7 +6,6 @@ import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -99,7 +98,13 @@ public class ScaleDialog extends JDialog { // Body tube addScaler(BodyTube.class, "OuterRadius", "isOuterRadiusAutomatic", SCALERS_NO_OFFSET); addScaler(BodyTube.class, "MotorOverhang", SCALERS_NO_OFFSET); - + + // Rail button + list = new ArrayList<>(1); + list.add(new RailButtonScaler()); + SCALERS_NO_OFFSET.put(RailButton.class, list); + addScaler(RailButton.class, "InstanceSeparation", SCALERS_OFFSET); + // Launch lug addScaler(LaunchLug.class, "OuterRadius", SCALERS_NO_OFFSET); addScaler(LaunchLug.class, "Thickness", SCALERS_NO_OFFSET); @@ -752,12 +757,11 @@ public class ScaleDialog extends JDialog { @Override public void scale(RocketComponent component, double multiplier, boolean scaleMass) { final Map, List> scalers = new HashMap<>(); - RadiusRingComponent ring = (RadiusRingComponent) component; // We need to specify this particular order, otherwise scale the inner/outer radius may clip the dimensions of the other outer/inner radius - if (multiplier >= 1) { + if (multiplier >= 1) { // Scale up addScaler(RadiusRingComponent.class, "OuterRadius", "isOuterRadiusAutomatic", scalers); addScaler(RadiusRingComponent.class, "InnerRadius", "isInnerRadiusAutomatic", scalers); - } else { + } else { // Scale down addScaler(RadiusRingComponent.class, "InnerRadius", "isInnerRadiusAutomatic", scalers); addScaler(RadiusRingComponent.class, "OuterRadius", "isOuterRadiusAutomatic", scalers); } @@ -770,5 +774,34 @@ public class ScaleDialog extends JDialog { } } + + private static class RailButtonScaler implements Scaler { + + @Override + public void scale(RocketComponent component, double multiplier, boolean scaleMass) { + final Map, List> scalers = new HashMap<>(); + // We need to specify this particular order, otherwise scale the inner/outer radius may clip the dimensions of the other outer/inner radius + if (multiplier >= 1) { // Scale up + addScaler(RailButton.class, "OuterDiameter", scalers); + addScaler(RailButton.class, "InnerDiameter", scalers); + addScaler(RailButton.class, "TotalHeight", scalers); + addScaler(RailButton.class, "BaseHeight", scalers); + addScaler(RailButton.class, "FlangeHeight", scalers); + } else { // Scale down + addScaler(RailButton.class, "InnerDiameter", scalers); + addScaler(RailButton.class, "OuterDiameter", scalers); + addScaler(RailButton.class, "BaseHeight", scalers); + addScaler(RailButton.class, "FlangeHeight", scalers); + addScaler(RailButton.class, "TotalHeight", scalers); + } + + for (List foo : scalers.values()) { + for (Scaler s : foo) { + s.scale(component, multiplier, scaleMass); + } + } + } + + } }