Refactor component analysis data classes to core module

This commit is contained in:
SiboVG 2024-08-25 01:55:26 +02:00
parent 73981839e6
commit 1840bd4c0e
17 changed files with 85 additions and 18 deletions

View File

@ -1,4 +1,4 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
package info.openrocket.core.componentanalysis;
import info.openrocket.core.rocketcomponent.RocketComponent;
import info.openrocket.core.simulation.DataBranch;

View File

@ -1,4 +1,4 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
package info.openrocket.core.componentanalysis;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.rocketcomponent.FinSet;

View File

@ -1,4 +1,4 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
package info.openrocket.core.componentanalysis;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.startup.Application;

View File

@ -1,4 +1,4 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
package info.openrocket.core.componentanalysis;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.startup.Application;

View File

@ -1,4 +1,4 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
package info.openrocket.core.componentanalysis;
import info.openrocket.core.aerodynamics.AerodynamicCalculator;
import info.openrocket.core.aerodynamics.AerodynamicForces;

View File

@ -1,16 +1,18 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
package info.openrocket.core.componentanalysis;
import info.openrocket.core.rocketcomponent.FlightConfiguration;
import info.openrocket.core.rocketcomponent.Rocket;
import info.openrocket.core.startup.Application;
import info.openrocket.core.util.Mutable;
import info.openrocket.swing.gui.scalefigure.RocketPanel;
import java.util.ArrayList;
import java.util.List;
public class CAParameters implements Cloneable {
private final Mutable mutable = new Mutable();
private final Rocket rocket;
private final RocketPanel rocketPanel;
private final List<CAParametersListener> listeners = new ArrayList<>();
private double theta;
private final double initialTheta;
@ -18,17 +20,24 @@ public class CAParameters implements Cloneable {
private double mach;
private double rollRate;
public CAParameters(Rocket rocket, RocketPanel rocketPanel) {
public CAParameters(Rocket rocket, double initialTheta) {
this.rocket = rocket;
this.rocketPanel = rocketPanel;
setTheta(rocketPanel.getFigure().getRotation());
setTheta(initialTheta);
this.initialTheta = this.theta;
setAOA(0);
setMach(Application.getPreferences().getDefaultMach());
setRollRate(0);
}
public void addListener(CAParametersListener listener) {
listeners.add(listener);
}
public void removeListener(CAParametersListener listener) {
listeners.remove(listener);
}
public double getTheta() {
return theta;
}
@ -36,7 +45,9 @@ public class CAParameters implements Cloneable {
public void setTheta(double theta) {
mutable.check();
this.theta = theta;
this.rocketPanel.setCPTheta(theta);
for (CAParametersListener listener : listeners) {
listener.onThetaChanged(theta);
}
}
public double getInitialTheta() {
@ -50,7 +61,9 @@ public class CAParameters implements Cloneable {
public void setAOA(double aoa) {
mutable.check();
this.aoa = aoa;
this.rocketPanel.setCPAOA(aoa);
for (CAParametersListener listener : listeners) {
listener.onAOAChanged(aoa);
}
}
public double getMach() {
@ -60,7 +73,9 @@ public class CAParameters implements Cloneable {
public void setMach(double mach) {
mutable.check();
this.mach = mach;
this.rocketPanel.setCPMach(mach);
for (CAParametersListener listener : listeners) {
listener.onMachChanged(mach);
}
}
public double getRollRate() {
@ -70,7 +85,9 @@ public class CAParameters implements Cloneable {
public void setRollRate(double rollRate) {
mutable.check();
this.rollRate = rollRate;
this.rocketPanel.setCPRoll(rollRate);
for (CAParametersListener listener : listeners) {
listener.onRollRateChanged(rollRate);
}
}
public FlightConfiguration getSelectedConfiguration() {
@ -93,4 +110,11 @@ public class CAParameters implements Cloneable {
throw new RuntimeException(e);
}
}
public interface CAParametersListener {
void onThetaChanged(double theta);
void onAOAChanged(double aoa);
void onMachChanged(double mach);
void onRollRateChanged(double rollRate);
}
}

View File

@ -34,6 +34,7 @@ open module info.openrocket.core {
exports info.openrocket.core.appearance.defaults;
exports info.openrocket.core.arch;
exports info.openrocket.core.communication;
exports info.openrocket.core.componentanalysis;
exports info.openrocket.core.database;
exports info.openrocket.core.database.motor;
exports info.openrocket.core.document;

View File

@ -1,5 +1,6 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.rocketcomponent.RocketComponent;
import info.openrocket.core.startup.Application;

View File

@ -1,5 +1,7 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.componentanalysis.CADataBranch;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.unit.Unit;
import info.openrocket.swing.gui.plot.Plot;
import org.jfree.data.xy.XYSeries;

View File

@ -1,5 +1,8 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.componentanalysis.CADataBranch;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.componentanalysis.CADomainDataType;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.rocketcomponent.RocketComponent;
import info.openrocket.core.startup.Application;

View File

@ -1,5 +1,7 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.componentanalysis.CADataBranch;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.preferences.ApplicationPreferences;
import info.openrocket.core.startup.Application;
import info.openrocket.swing.gui.plot.PlotDialog;

View File

@ -1,5 +1,9 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.componentanalysis.CADataBranch;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.componentanalysis.CADataTypeGroup;
import info.openrocket.core.componentanalysis.CADomainDataType;
import info.openrocket.core.rocketcomponent.RocketComponent;
import info.openrocket.core.unit.Unit;
import info.openrocket.swing.gui.plot.PlotPanel;

View File

@ -1,5 +1,7 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.componentanalysis.CADataTypeGroup;
import info.openrocket.core.rocketcomponent.RocketComponent;
import info.openrocket.core.unit.Unit;
import info.openrocket.swing.gui.plot.PlotTypeSelector;

View File

@ -3,6 +3,7 @@ package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.aerodynamics.AerodynamicCalculator;
import info.openrocket.core.aerodynamics.AerodynamicForces;
import info.openrocket.core.aerodynamics.FlightConditions;
import info.openrocket.core.componentanalysis.CAParameters;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.logging.WarningSet;
import info.openrocket.core.masscalc.CMAnalysisEntry;
@ -103,7 +104,8 @@ public class ComponentAnalysisGeneralPanel extends JPanel implements StateChange
this.conditions = new FlightConditions(rocket.getSelectedConfiguration());
// Create CAParameters
this.parameters = new CAParameters(rocket, rocketPanel);
this.parameters = new CAParameters(rocket, rocketPanel.getFigure().getRotation());
this.parameters.addListener(rocketPanel);
this.aoa = new DoubleModel(parameters, "AOA", UnitGroup.UNITS_ANGLE, 0, Math.PI);
this.mach = new DoubleModel(parameters, "Mach", UnitGroup.UNITS_COEFFICIENT, 0);

View File

@ -1,6 +1,11 @@
package info.openrocket.swing.gui.dialogs.componentanalysis;
import info.openrocket.core.aerodynamics.AerodynamicCalculator;
import info.openrocket.core.componentanalysis.CADataBranch;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.core.componentanalysis.CADomainDataType;
import info.openrocket.core.componentanalysis.CAParameterSweep;
import info.openrocket.core.componentanalysis.CAParameters;
import info.openrocket.core.l10n.Translator;
import info.openrocket.core.rocketcomponent.Rocket;
import info.openrocket.core.rocketcomponent.RocketComponent;

View File

@ -76,6 +76,7 @@ import info.openrocket.core.util.ModID;
import info.openrocket.core.util.StateChangeListener;
import info.openrocket.swing.gui.components.StyledLabel;
import info.openrocket.core.componentanalysis.CAParameters;
import net.miginfocom.swing.MigLayout;
import info.openrocket.swing.gui.adaptors.DoubleModel;
import info.openrocket.swing.gui.components.BasicSlider;
@ -104,7 +105,7 @@ import org.slf4j.LoggerFactory;
* @author Bill Kuker <bkuker@billkuker.com>
*/
@SuppressWarnings("serial")
public class RocketPanel extends JPanel implements TreeSelectionListener, ChangeSource {
public class RocketPanel extends JPanel implements TreeSelectionListener, ChangeSource, CAParameters.CAParametersListener {
private static final Translator trans = Application.getTranslator();
private static final Logger log = LoggerFactory.getLogger(RocketPanel.class);
@ -1171,6 +1172,26 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
figure3d.setSelection(components);
}
@Override
public void onThetaChanged(double theta) {
setCPTheta(theta);
}
@Override
public void onAOAChanged(double aoa) {
setCPAOA(aoa);
}
@Override
public void onMachChanged(double mach) {
setCPMach(mach);
}
@Override
public void onRollRateChanged(double rollRate) {
setCPRoll(rollRate);
}
private static class ViewTypeComboBoxModel extends DefaultComboBoxModel<VIEW_TYPE> {
public ViewTypeComboBoxModel(VIEW_TYPE[] items, VIEW_TYPE initialItem) {
super(items);

View File

@ -24,7 +24,7 @@ import java.util.prefs.Preferences;
import info.openrocket.core.database.Databases;
import info.openrocket.core.preferences.ApplicationPreferences;
import info.openrocket.core.rocketcomponent.NoseCone;
import info.openrocket.swing.gui.dialogs.componentanalysis.CADataType;
import info.openrocket.core.componentanalysis.CADataType;
import info.openrocket.swing.gui.theme.UITheme;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;