From 04163280975bcd04d966dd59f29615c4a56abffd Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 25 Aug 2022 21:23:52 +0200 Subject: [PATCH 1/4] [#1613] Fix auto-calc not working for unequally sized rings --- .../sf/openrocket/gui/configdialog/FinSetConfig.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java index ccf4fc0d0..5dc40ecb1 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java @@ -272,11 +272,15 @@ public abstract class FinSetConfig extends RocketComponentConfig { CenteringRing ring = (CenteringRing) rocketComponent; if (ring.getOuterRadius() > maxRingRad) { maxRingRad = ring.getOuterRadius(); - rings.clear(); - rings.add(ring); - } else if (ring.getOuterRadius() == maxRingRad) { - rings.add(ring); } + rings.add(ring); + } + } + + // Remove rings that are smaller than the maximum inner tube radius + for (CenteringRing ring : new ArrayList<>(rings)) { + if (ring.getOuterRadius() <= maxTubeRad) { + rings.remove(ring); } } From 6e9fdc633088af44345280e823fbe29706773ee1 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 25 Aug 2022 21:26:21 +0200 Subject: [PATCH 2/4] Fix auto tab height for transitions --- .../net/sf/openrocket/gui/configdialog/FinSetConfig.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java index 5dc40ecb1..8d3a7ec5e 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java @@ -39,6 +39,7 @@ import net.sf.openrocket.rocketcomponent.SymmetricComponent; import net.sf.openrocket.rocketcomponent.position.AxialMethod; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; +import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.MathUtil; import net.sf.openrocket.gui.widgets.SelectColorButton; @@ -300,8 +301,11 @@ public abstract class FinSetConfig extends RocketComponentConfig { } // Compute tab height - double parentMinRadius = MathUtil.min(((SymmetricComponent)parent).getRadius(((FinSet) component).getTabFrontEdge()), - ((SymmetricComponent)parent).getRadius(((FinSet) component).getTabTrailingEdge())); + final Coordinate finFront = ((FinSet) component).getFinFront(); + double finStart = finFront.x + ((FinSet) component).getTabFrontEdge(); + double finEnd = finFront.x + ((FinSet) component).getTabTrailingEdge(); + double parentMinRadius = MathUtil.min(((SymmetricComponent)parent).getRadius(finStart), + ((SymmetricComponent)parent).getRadius(finEnd)); double height = parentMinRadius - maxTubeRad; // Set tab height From 467b1dee1d62b0e8c7e9f76a01fd0f510253a0ef Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 25 Aug 2022 21:33:34 +0200 Subject: [PATCH 3/4] Delete outdated comment --- .../src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java b/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java index 597049d7b..afb7ee2d4 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java @@ -41,8 +41,7 @@ public class TrapezoidFinSet extends FinSet { public TrapezoidFinSet() { this(3, 0.05, 0.05, 0.025, 0.03); } - - // TODO: HIGH: height=0 -> CP = NaN + public TrapezoidFinSet(int fins, double rootChord, double tipChord, double sweep, double height) { super(); From c41ed866cd27295240fa692edeac28676ab70c88 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 25 Aug 2022 21:36:43 +0200 Subject: [PATCH 4/4] Only use direct children for auto tab calc --- .../gui/configdialog/FinSetConfig.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java index 8d3a7ec5e..8a1d405c9 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java @@ -258,19 +258,17 @@ public abstract class FinSetConfig extends RocketComponentConfig { List rings = new ArrayList<>(); // Do deep recursive iteration to find centering rings and determine radius of inner tube - Iterator iter = parent.iterator(false); - while (iter.hasNext()) { - RocketComponent rocketComponent = iter.next(); - if (rocketComponent instanceof InnerTube) { - if (!isComponentInsideFinSpan(rocketComponent)) { + for (RocketComponent child : parent.getChildren()) { + if (child instanceof InnerTube) { + if (!isComponentInsideFinSpan(child)) { continue; } - InnerTube tube = (InnerTube) rocketComponent; + InnerTube tube = (InnerTube) child; if (tube.getOuterRadius() > maxTubeRad) { maxTubeRad = tube.getOuterRadius(); } - } else if (rocketComponent instanceof CenteringRing) { - CenteringRing ring = (CenteringRing) rocketComponent; + } else if (child instanceof CenteringRing) { + CenteringRing ring = (CenteringRing) child; if (ring.getOuterRadius() > maxRingRad) { maxRingRad = ring.getOuterRadius(); } @@ -295,9 +293,9 @@ public abstract class FinSetConfig extends RocketComponentConfig { //Be nice to the user and set the tab relative position enum back the way they had it. tabOffsetMethod.setSelectedItem(temp); } else { - tabLength.setValue(component.getLength()); tabOffsetMethod.setSelectedItem(AxialMethod.TOP); tabOffset.setValue(0); + tabLength.setValue(component.getLength()); } // Compute tab height