Use proper units for the CSV parameters export

This commit is contained in:
SiboVG 2024-08-26 03:07:01 +02:00
parent 525190b37f
commit 1a81fd5a21
3 changed files with 94 additions and 9 deletions

View File

@ -3,6 +3,7 @@ package info.openrocket.core.componentanalysis;
import info.openrocket.core.rocketcomponent.FlightConfiguration; import info.openrocket.core.rocketcomponent.FlightConfiguration;
import info.openrocket.core.rocketcomponent.Rocket; import info.openrocket.core.rocketcomponent.Rocket;
import info.openrocket.core.startup.Application; import info.openrocket.core.startup.Application;
import info.openrocket.core.unit.Unit;
import info.openrocket.core.util.Mutable; import info.openrocket.core.util.Mutable;
import java.util.ArrayList; import java.util.ArrayList;
@ -20,6 +21,11 @@ public class CAParameters implements Cloneable {
private double mach; private double mach;
private double rollRate; private double rollRate;
private Unit thetaUnit;
private Unit aoaUnit;
private Unit machUnit;
private Unit rollRateUnit;
public CAParameters(Rocket rocket, double initialTheta) { public CAParameters(Rocket rocket, double initialTheta) {
this.rocket = rocket; this.rocket = rocket;
@ -50,6 +56,14 @@ public class CAParameters implements Cloneable {
} }
} }
public Unit getThetaUnit() {
return thetaUnit;
}
public void setThetaUnit(Unit thetaUnit) {
this.thetaUnit = thetaUnit;
}
public double getInitialTheta() { public double getInitialTheta() {
return initialTheta; return initialTheta;
} }
@ -66,6 +80,14 @@ public class CAParameters implements Cloneable {
} }
} }
public Unit getAOAUnit() {
return aoaUnit;
}
public void setAOAUnit(Unit aoaUnit) {
this.aoaUnit = aoaUnit;
}
public double getMach() { public double getMach() {
return mach; return mach;
} }
@ -78,6 +100,14 @@ public class CAParameters implements Cloneable {
} }
} }
public Unit getMachUnit() {
return machUnit;
}
public void setMachUnit(Unit machUnit) {
this.machUnit = machUnit;
}
public double getRollRate() { public double getRollRate() {
return rollRate; return rollRate;
} }
@ -90,6 +120,14 @@ public class CAParameters implements Cloneable {
} }
} }
public Unit getRollRateUnit() {
return rollRateUnit;
}
public void setRollRateUnit(Unit rollRateUnit) {
this.rollRateUnit = rollRateUnit;
}
public FlightConfiguration getSelectedConfiguration() { public FlightConfiguration getSelectedConfiguration() {
return rocket.getSelectedConfiguration(); return rocket.getSelectedConfiguration();
} }

View File

@ -320,22 +320,41 @@ public class CSVExport {
String fieldSeparator, String commentStarter) { String fieldSeparator, String commentStarter) {
StringBuilder line = new StringBuilder(prependComment(commentStarter, "Parameters:")).append(fieldSeparator); StringBuilder line = new StringBuilder(prependComment(commentStarter, "Parameters:")).append(fieldSeparator);
// TODO: use proper units for the parameters
if (domainDataType != CADomainDataType.WIND_DIRECTION) { if (domainDataType != CADomainDataType.WIND_DIRECTION) {
line.append("Wind direction:").append(fieldSeparator); line.append("Wind direction:").append(fieldSeparator);
line.append(parameters.getTheta()).append("°").append(fieldSeparator); Unit unit = parameters.getThetaUnit();
if (unit != null) {
line.append(unit.toStringUnit(parameters.getTheta())).append(fieldSeparator);
} else {
line.append(parameters.getTheta()).append(fieldSeparator);
}
} }
if (domainDataType != CADomainDataType.AOA) { if (domainDataType != CADomainDataType.AOA) {
line.append("Angle of attack:").append(fieldSeparator); line.append("Angle of attack:").append(fieldSeparator);
line.append(parameters.getAOA()).append("°").append(fieldSeparator); Unit unit = parameters.getAOAUnit();
if (unit != null) {
line.append(unit.toStringUnit(parameters.getAOA())).append(fieldSeparator);
} else {
line.append(parameters.getAOA()).append(fieldSeparator);
}
} }
if (domainDataType != CADomainDataType.MACH) { if (domainDataType != CADomainDataType.MACH) {
line.append("Mach:").append(fieldSeparator); line.append("Mach:").append(fieldSeparator);
line.append(parameters.getMach()).append(fieldSeparator); Unit unit = parameters.getMachUnit();
if (unit != null) {
line.append(unit.toStringUnit(parameters.getMach())).append(fieldSeparator);
} else {
line.append(parameters.getMach()).append(fieldSeparator);
}
} }
if (domainDataType != CADomainDataType.ROLL_RATE) { if (domainDataType != CADomainDataType.ROLL_RATE) {
line.append("Roll rate:").append(fieldSeparator); line.append("Roll rate:").append(fieldSeparator);
line.append(parameters.getRollRate()).append("°/s").append(fieldSeparator); Unit unit = parameters.getRollRateUnit();
if (unit != null) {
line.append(unit.toStringUnit(parameters.getRollRate())).append(fieldSeparator);
} else {
line.append(parameters.getRollRate()).append(fieldSeparator);
}
} }
line.append("Active stages:").append(fieldSeparator); line.append("Active stages:").append(fieldSeparator);

View File

@ -118,7 +118,10 @@ public class ComponentAnalysisGeneralPanel extends JPanel implements StateChange
this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.winddir"))); this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.winddir")));
EditableSpinner spinner = new EditableSpinner(theta.getSpinnerModel()); EditableSpinner spinner = new EditableSpinner(theta.getSpinnerModel());
this.add(spinner, "growx"); this.add(spinner, "growx");
this.add(new UnitSelector(theta)); final UnitSelector unitSelectorTheta = new UnitSelector(theta);
unitSelectorTheta.addItemListener(e -> setParametersThetaUnit(unitSelectorTheta));
setParametersThetaUnit(unitSelectorTheta);
this.add(unitSelectorTheta);
BasicSlider slider = new BasicSlider(theta.getSliderModel(0, 2 * Math.PI)); BasicSlider slider = new BasicSlider(theta.getSliderModel(0, 2 * Math.PI));
this.add(slider, "growx, split 2"); this.add(slider, "growx, split 2");
//// Worst button //// Worst button
@ -149,19 +152,28 @@ public class ComponentAnalysisGeneralPanel extends JPanel implements StateChange
////Angle of attack: ////Angle of attack:
this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.angleofattack"))); this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.angleofattack")));
this.add(new EditableSpinner(aoa.getSpinnerModel()), "growx"); this.add(new EditableSpinner(aoa.getSpinnerModel()), "growx");
this.add(new UnitSelector(aoa)); final UnitSelector unitSelectorAOA = new UnitSelector(aoa);
unitSelectorAOA.addItemListener(e -> setParametersAOAUnit(unitSelectorAOA));
setParametersAOAUnit(unitSelectorAOA);
this.add(unitSelectorAOA);
this.add(new BasicSlider(aoa.getSliderModel(0, Math.PI)), "growx, wrap"); this.add(new BasicSlider(aoa.getSliderModel(0, Math.PI)), "growx, wrap");
//// Mach number: //// Mach number:
this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.machnumber"))); this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.machnumber")));
this.add(new EditableSpinner(mach.getSpinnerModel())); this.add(new EditableSpinner(mach.getSpinnerModel()));
this.add(new UnitSelector(mach)); final UnitSelector unitSelectorMach = new UnitSelector(mach);
unitSelectorMach.addItemListener(e -> setParametersMachUnit(unitSelectorMach));
setParametersMachUnit(unitSelectorMach);
this.add(unitSelectorMach);
this.add(new BasicSlider(mach.getSliderModel(0, 3)), "growx, wrap"); this.add(new BasicSlider(mach.getSliderModel(0, 3)), "growx, wrap");
//// Roll rate: //// Roll rate:
this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.rollrate"))); this.add(new JLabel(trans.get("ComponentAnalysisGeneralTab.lbl.rollrate")));
this.add(new EditableSpinner(roll.getSpinnerModel()), "growx"); this.add(new EditableSpinner(roll.getSpinnerModel()), "growx");
this.add(new UnitSelector(roll)); final UnitSelector unitSelectorRoll = new UnitSelector(roll);
unitSelectorRoll.addItemListener(e -> setParametersRollUnit(unitSelectorRoll));
setParametersRollUnit(unitSelectorRoll);
this.add(unitSelectorRoll);
this.add(new BasicSlider(roll.getSliderModel(-20 * 2 * Math.PI, 20 * 2 * Math.PI)), this.add(new BasicSlider(roll.getSliderModel(-20 * 2 * Math.PI, 20 * 2 * Math.PI)),
"growx, wrap"); "growx, wrap");
@ -468,6 +480,22 @@ public class ComponentAnalysisGeneralPanel extends JPanel implements StateChange
}); });
} }
private void setParametersThetaUnit(UnitSelector unitSelector) {
parameters.setThetaUnit(unitSelector.getSelectedUnit());
}
private void setParametersAOAUnit(UnitSelector unitSelector) {
parameters.setAOAUnit(unitSelector.getSelectedUnit());
}
private void setParametersMachUnit(UnitSelector unitSelector) {
parameters.setMachUnit(unitSelector.getSelectedUnit());
}
private void setParametersRollUnit(UnitSelector unitSelector) {
parameters.setRollRateUnit(unitSelector.getSelectedUnit());
}
public CAParameters getParameters() { public CAParameters getParameters() {
return parameters; return parameters;