Merge pull request #1752 from SiboVG/issue-1746

[#1746] Fix "Seek value of" unit selector in rocket optimizer
This commit is contained in:
Sibo Van Gool 2022-10-21 09:19:46 +02:00 committed by GitHub
commit ea71c20fbb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 14 deletions

View File

@ -580,7 +580,7 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
private final ArrayList<EventListener> listeners = new ArrayList<EventListener>();
private final UnitGroup units;
private UnitGroup units;
private Unit currentUnit;
private final double minValue;
@ -877,6 +877,13 @@ public class DoubleModel implements StateChangeListener, ChangeSource, Invalidat
currentUnit = u;
fireStateChanged();
}
public void setUnitGroup(UnitGroup unitGroup) {
this.units = unitGroup;
this.currentUnit = units.getDefaultUnit();
this.lastValue = this.currentUnit.toUnit(this.lastValue);
fireStateChanged();
}
/**

View File

@ -380,6 +380,12 @@ public class GeneralOptimizationDialog extends JDialog {
optimizationParameterCombo.setToolTipText(tip);
populateParameters();
optimizationParameterCombo.addActionListener(clearHistoryActionListener);
optimizationParameterCombo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
updateSeekValueUnits();
}
});
disableComponents.add(optimizationParameterCombo);
sub.add(optimizationParameterCombo, "growx, wrap unrel");
@ -404,7 +410,7 @@ public class GeneralOptimizationDialog extends JDialog {
optimizationGoalSpinner = new JSpinner(optimizationSeekValue.getSpinnerModel());
tip = trans.get("lbl.optimizeGoalValue.ttip");
optimizationGoalSpinner.setToolTipText(tip);
optimizationGoalSpinner.setEditor(new SpinnerEditor(optimizationGoalSpinner));
optimizationGoalSpinner.setEditor(new SpinnerEditor(optimizationGoalSpinner, 4));
disableComponents.add(optimizationGoalSpinner);
sub.add(optimizationGoalSpinner, "width 30lp");
@ -554,6 +560,7 @@ public class GeneralOptimizationDialog extends JDialog {
Collections.unmodifiableMap(evaluationHistory),
Collections.unmodifiableList(selectedModifiers),
getSelectedParameter(),
optimizationGoalUnitSelector.getSelectedUnit(),
UnitGroup.stabilityUnits(getSelectedSimulation().getRocket()),
GeneralOptimizationDialog.this);
dialog.setVisible(true);
@ -606,6 +613,7 @@ public class GeneralOptimizationDialog extends JDialog {
this.add(new JScrollPane(panel));
clearHistory();
updateComponents();
updateSeekValueUnits();
GUIUtil.setDisposableDialogOptions(this, null);
int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
@ -834,13 +842,22 @@ public class GeneralOptimizationDialog extends JDialog {
evaluationHistory.clear();
optimizationPath.clear();
bestValue = Double.NaN;
bestValueUnit = getSelectedParameter().getUnitGroup().getDefaultUnit();
bestValueUnit = optimizationGoalUnitSelector.getSelectedUnit();
stepCount = 0;
evaluationCount = 0;
stepSize = 0.5;
updateCounters();
updateComponents();
}
private void updateSeekValueUnits() {
if (optimizationSeekValue != null && optimizationGoalUnitSelector != null) {
optimizationSeekValue.setUnitGroup(getSelectedParameter().getUnitGroup());
optimizationSeekValue.setValue(0);
optimizationGoalUnitSelector.setModel(optimizationSeekValue);
optimizationGoalUnitSelector.revalidate();
}
}
private void applyDesign() {
// TODO: MEDIUM: Apply also potential changes to simulations
@ -1168,7 +1185,7 @@ public class GeneralOptimizationDialog extends JDialog {
writer.write(fieldSeparator);
}
writer.write(getSelectedParameter().getName() + " / " +
getSelectedParameter().getUnitGroup().getDefaultUnit().getUnit());
optimizationGoalUnitSelector.getSelectedUnit().getUnit());
writer.write("\n");
}
@ -1187,7 +1204,7 @@ public class GeneralOptimizationDialog extends JDialog {
}
if (data.getParameterValue() != null) {
writer.write(TextUtil.doubleToString(data.getParameterValue().getUnitValue()));
writer.write(TextUtil.doubleToString(optimizationGoalUnitSelector.getSelectedUnit().toUnit(data.getParameterValue().getValue())));
} else {
writer.write("N/A");
}

View File

@ -80,7 +80,7 @@ public class OptimizationPlotDialog extends JDialog {
public OptimizationPlotDialog(List<Point> path, Map<Point, FunctionEvaluationData> evaluations,
List<SimulationModifier> modifiers, OptimizableParameter parameter, UnitGroup stabilityUnit, Window parent) {
List<SimulationModifier> modifiers, OptimizableParameter parameter, Unit parameterUnit, UnitGroup stabilityUnit, Window parent) {
super(parent, trans.get("title"), ModalityType.APPLICATION_MODAL);
@ -88,9 +88,9 @@ public class OptimizationPlotDialog extends JDialog {
ChartPanel chart;
if (modifiers.size() == 1) {
chart = create1DPlot(path, evaluations, modifiers, parameter, stabilityUnit);
chart = create1DPlot(path, evaluations, modifiers, parameter, parameterUnit, stabilityUnit);
} else if (modifiers.size() == 2) {
chart = create2DPlot(path, evaluations, modifiers, parameter, stabilityUnit);
chart = create2DPlot(path, evaluations, modifiers, parameter, parameterUnit, stabilityUnit);
} else {
throw new IllegalArgumentException("Invalid dimensionality, dim=" + modifiers.size());
}
@ -134,11 +134,11 @@ public class OptimizationPlotDialog extends JDialog {
* Create a 1D plot of the optimization path.
*/
private ChartPanel create1DPlot(List<Point> path, Map<Point, FunctionEvaluationData> evaluations,
List<SimulationModifier> modifiers, OptimizableParameter parameter, UnitGroup stabilityUnit) {
List<SimulationModifier> modifiers, OptimizableParameter parameter, Unit parameterUnit, UnitGroup stabilityUnit) {
SimulationModifier modX = modifiers.get(0);
Unit xUnit = modX.getUnitGroup().getDefaultUnit();
Unit yUnit = parameter.getUnitGroup().getDefaultUnit();
Unit yUnit = parameterUnit;
// Create the optimization path (with autosort)
XYSeries series = new XYSeries(trans.get("plot1d.series"), true, true);
@ -232,10 +232,7 @@ public class OptimizationPlotDialog extends JDialog {
* Create a 2D plot of the optimization path.
*/
private ChartPanel create2DPlot(List<Point> path, Map<Point, FunctionEvaluationData> evaluations,
List<SimulationModifier> modifiers, OptimizableParameter parameter, UnitGroup stabilityUnit) {
Unit parameterUnit = parameter.getUnitGroup().getDefaultUnit();
List<SimulationModifier> modifiers, OptimizableParameter parameter, Unit parameterUnit, UnitGroup stabilityUnit) {
SimulationModifier modX = modifiers.get(0);
SimulationModifier modY = modifiers.get(1);