From 8b20f48894a90ac6ae107aa99d3eff6ef0f52159 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Fri, 18 Oct 2024 14:35:17 -0600 Subject: [PATCH] Separate motor nominal vs actual diameter; display nominal but use actual to filter. Add 32mm motors diameter. --- .../main/resources/l10n/messages.properties | 2 +- .../motor/thrustcurve/MotorFilterPanel.java | 41 ++++++++++++------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/core/src/main/resources/l10n/messages.properties b/core/src/main/resources/l10n/messages.properties index 3cb057103..f213388ca 100644 --- a/core/src/main/resources/l10n/messages.properties +++ b/core/src/main/resources/l10n/messages.properties @@ -1721,7 +1721,7 @@ TCMotorSelPan.checkbox.hideUnavailable = Hide motors which are not in regular pr TCMotorSelPan.btn.details = Show Details TCMotorSelPan.btn.filter = Filter Motors TCMotorSelPan.MotorSize = Motor Dimensions -TCMotorSelPan.Diameter = Diameter +TCMotorSelPan.Diameter = Nominal Diameter TCMotorSelPan.Length = Length TCMotorSelPan.MotorMountDimensions = Motor mount dimensions: TCMotorSelPan.lbl.Search = Search: diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/motor/thrustcurve/MotorFilterPanel.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/motor/thrustcurve/MotorFilterPanel.java index 738f632a7..0b437c808 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/motor/thrustcurve/MotorFilterPanel.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/motor/thrustcurve/MotorFilterPanel.java @@ -46,17 +46,28 @@ public abstract class MotorFilterPanel extends JPanel { private static final Translator trans = Application.getTranslator(); private static final Hashtable diameterLabels = new Hashtable<>(); - private static final double[] motorDiameters = new double[] { - 0.0, - 0.013, - 0.018, - 0.024, - 0.029, - 0.038, - 0.054, - 0.0762, - 0.098, - 1.000 + + private static class MotorDiameter { + double nominal; + double actual; + + MotorDiameter(double _nominal, double _actual) { + nominal = _nominal; + actual = _actual; + } + } + private static final MotorDiameter[] motorDiameters = new MotorDiameter[] { + new MotorDiameter(0.0, 0.0), + new MotorDiameter(0.013, 0.013), + new MotorDiameter(0.018, 0.018), + new MotorDiameter(0.024, 0.024), + new MotorDiameter(0.029, 0.029), + new MotorDiameter(0.032, 0.032), + new MotorDiameter(0.038, 0.0381), + new MotorDiameter(0.054, 0.054), + new MotorDiameter(0.075, 0.0763), + new MotorDiameter(0.098, 0.983), + new MotorDiameter(1.000, 1.000) }; /** @@ -66,7 +77,7 @@ public abstract class MotorFilterPanel extends JPanel { Unit unit = UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit(); for( int i = 0; i < motorDiameters.length; i++ ) { // Round the labels, because for imperial units, the labels can otherwise overlap - double diam = unit.toUnit(motorDiameters[i]); + double diam = unit.toUnit(motorDiameters[i].nominal); double diamRounded = unit.round(diam * 10) / 10; // 10 multiplication for 2-decimal precision diam = unit.fromUnit(diamRounded); String formatted = unit.toString(diam); @@ -272,12 +283,12 @@ public abstract class MotorFilterPanel extends JPanel { @Override public void stateChanged(ChangeEvent e) { final int minDiameter = diameterSlider.getValueAt(0); - MotorFilterPanel.this.filter.setMinimumDiameter(motorDiameters[minDiameter]); + MotorFilterPanel.this.filter.setMinimumDiameter(motorDiameters[minDiameter].actual); int maxDiameter = diameterSlider.getValueAt(1); if( maxDiameter == motorDiameters.length-1 ) { MotorFilterPanel.this.filter.setMaximumDiameter(null); } else { - MotorFilterPanel.this.filter.setMaximumDiameter(motorDiameters[maxDiameter]); + MotorFilterPanel.this.filter.setMaximumDiameter(motorDiameters[maxDiameter].actual); } onSelectionChanged(); } @@ -396,7 +407,7 @@ public abstract class MotorFilterPanel extends JPanel { // find the next largest diameter int i; for( i =0; i < motorDiameters.length; i++ ) { - if ( mountDiameter < motorDiameters[i] - 0.0005 ) { + if ( mountDiameter < motorDiameters[i].actual - 0.0005 ) { break; } }