From a7ffdc66f10184953a27b77edc1ca5bb8f84cf2c Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 8 Sep 2022 21:43:37 +0200 Subject: [PATCH] [#1651] Always do super component scales first --- .../sf/openrocket/gui/dialogs/ScaleDialog.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java index 407ba5109..d87cb31bd 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/ScaleDialog.java @@ -7,6 +7,7 @@ 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; import java.util.Map; @@ -560,25 +561,28 @@ public class ScaleDialog extends JDialog { * @param scaleOffset flag to check if the axial/radial offsets should be scaled as well */ private void scale(RocketComponent component, double mul, boolean scaleMass, boolean scaleOffset) { - Class clazz = component.getClass(); + List> classes = new ArrayList<>(); while (clazz != null) { - List list = null; + classes.add(clazz); + clazz = clazz.getSuperclass(); + } + Collections.reverse(classes); // Always do the super component scales first (can cause problems otherwise in the scale order) + for (Class cl : classes) { + List list; if (scaleOffset) { - Stream strm_no_offset = SCALERS_NO_OFFSET.get(clazz) == null ? Stream.empty() : SCALERS_NO_OFFSET.get(clazz).stream(); - Stream strm_offset = SCALERS_OFFSET.get(clazz) == null ? Stream.empty() : SCALERS_OFFSET.get(clazz).stream(); + Stream strm_no_offset = SCALERS_NO_OFFSET.get(cl) == null ? Stream.empty() : SCALERS_NO_OFFSET.get(cl).stream(); + Stream strm_offset = SCALERS_OFFSET.get(cl) == null ? Stream.empty() : SCALERS_OFFSET.get(cl).stream(); list = Stream.concat(strm_no_offset, strm_offset).distinct().collect(Collectors.toList()); } else { - list = SCALERS_NO_OFFSET.get(clazz); + list = SCALERS_NO_OFFSET.get(cl); } if (list != null) { for (Scaler s : list) { s.scale(component, mul, scaleMass); } } - - clazz = clazz.getSuperclass(); } }