From 69dceca6533c789578097a196c02301eb3ec91dd Mon Sep 17 00:00:00 2001 From: SiboVG Date: Fri, 19 Aug 2022 01:08:41 +0200 Subject: [PATCH] [#1600] Calculate auto tab for all inner tubes --- .../gui/configdialog/FinSetConfig.java | 99 ++++++++++--------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java index ad1837219..e6599cba0 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FinSetConfig.java @@ -233,61 +233,62 @@ public abstract class FinSetConfig extends RocketComponentConfig { autoCalc.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - log.info(Markers.USER_MARKER, "Computing " + component.getComponentName() + " tab height."); - - double inRad = 0.0; - RocketComponent parent = component.getParent(); - if (parent instanceof SymmetricComponent){ - try { - document.startUndo("Compute fin tabs"); - - 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) { - InnerTube it = (InnerTube) rocketComponent; - if (it.isMotorMount()) { - inRad = it.getOuterRadius(); - } - } else if (rocketComponent instanceof CenteringRing) { - rings.add((CenteringRing) rocketComponent); - } - } - - //Figure out position and length of the fin tab - if (!rings.isEmpty()) { - AxialMethod temp = (AxialMethod) em.getSelectedItem(); - em.setSelectedItem(AxialMethod.TOP); - double len = computeFinTabLength(rings, component.getAxialOffset(AxialMethod.TOP), - component.getLength(), mts, parent); - mtl.setValue(len); - //Be nice to the user and set the tab relative position enum back the way they had it. - em.setSelectedItem(temp); - } - - // compute tab height - double height = MathUtil.min(((SymmetricComponent)parent).getRadius(((FinSet) component).getTabFrontEdge()), - ((SymmetricComponent)parent).getRadius(((FinSet) component).getTabTrailingEdge())) - inRad; - // double height = ((Coaxial) parent).getOuterRadius() - inRad; - //Set fin tab height - if (height >= 0.0d) { - tabHeightModel.setValue(height); - tabHeightModel.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); - } - } finally { - document.stopUndo(); - } - } + calculateAutoTab(em, mts, mtl, tabHeightModel); } }); panel.add(autoCalc, "skip 1, spanx"); return panel; } - + + private void calculateAutoTab(EnumModel em, DoubleModel mts, DoubleModel mtl, DoubleModel tabHeightModel) { + log.info(Markers.USER_MARKER, "Computing " + component.getComponentName() + " tab height."); + + double inRad = 0.0; + RocketComponent parent = component.getParent(); + if (parent instanceof SymmetricComponent){ + try { + document.startUndo("Compute fin tabs"); + + 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) { + InnerTube it = (InnerTube) rocketComponent; + inRad = it.getOuterRadius(); + } else if (rocketComponent instanceof CenteringRing) { + rings.add((CenteringRing) rocketComponent); + } + } + + //Figure out position and length of the fin tab + if (!rings.isEmpty()) { + AxialMethod temp = (AxialMethod) em.getSelectedItem(); + em.setSelectedItem(AxialMethod.TOP); + double len = computeFinTabLength(rings, component.getAxialOffset(AxialMethod.TOP), + component.getLength(), mts, parent); + mtl.setValue(len); + //Be nice to the user and set the tab relative position enum back the way they had it. + em.setSelectedItem(temp); + } + + // compute tab height + double height = MathUtil.min(((SymmetricComponent)parent).getRadius(((FinSet) component).getTabFrontEdge()), + ((SymmetricComponent)parent).getRadius(((FinSet) component).getTabTrailingEdge())) - inRad; + // double height = ((Coaxial) parent).getOuterRadius() - inRad; + //Set fin tab height + if (height >= 0.0d) { + tabHeightModel.setValue(height); + tabHeightModel.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit()); + } + } finally { + document.stopUndo(); + } + } + } + /** * Scenarios: *