Fix some issues in mass importing + give warning when mass too low
This commit is contained in:
parent
4dcd43850f
commit
c8f79bbdf5
@ -143,7 +143,7 @@ public class SimulationHandler extends AbstractElementHandler {
|
|||||||
context.getOpenRocketDocument().addSimulation(sim);
|
context.getOpenRocketDocument().addSimulation(sim);
|
||||||
|
|
||||||
// Set the weight and CG overrides
|
// Set the weight and CG overrides
|
||||||
applyMassOverrides();
|
applyMassOverrides(warnings);
|
||||||
applyCGOverrides(sustainerMount, booster1Mount, booster2Mount, fcid);
|
applyCGOverrides(sustainerMount, booster1Mount, booster2Mount, fcid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,15 +217,15 @@ public class SimulationHandler extends AbstractElementHandler {
|
|||||||
return mount;
|
return mount;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyMassOverrides() {
|
private void applyMassOverrides(WarningSet warnings) {
|
||||||
// Don't do anything if the mass has already been overridden by a previous simulation
|
// Don't do anything if the mass has already been overridden by a previous simulation
|
||||||
if (rocket.getStage(0).isMassOverridden()) {
|
if (rocket.getStage(0).isMassOverridden()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
double sustainerMass = applySustainerMassOverride();
|
applySustainerMassOverride();
|
||||||
double booster1Mass = applyBooster1MassOverride(sustainerMass);
|
applyBooster1MassOverride(warnings);
|
||||||
applyBooster2MassOverride(sustainerMass, booster1Mass);
|
applyBooster2MassOverride(warnings);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -256,21 +256,29 @@ public class SimulationHandler extends AbstractElementHandler {
|
|||||||
/**
|
/**
|
||||||
* Applies the mass from the RASAero simulation to booster1 as an override, and returns the final booster1 mass.
|
* Applies the mass from the RASAero simulation to booster1 as an override, and returns the final booster1 mass.
|
||||||
* Note: the sustainer mass and booster1 motor mass is subtracted from the RASAero mass to get the final mass.
|
* Note: the sustainer mass and booster1 motor mass is subtracted from the RASAero mass to get the final mass.
|
||||||
* @param sustainerMass the sustainer mass
|
* @param warnings list to add import warnings to
|
||||||
* @return the final booster1 mass
|
* @return the final booster1 mass
|
||||||
*/
|
*/
|
||||||
private double applyBooster1MassOverride(double sustainerMass) {
|
private double applyBooster1MassOverride(WarningSet warnings) {
|
||||||
if (!includeBooster1 || booster1LaunchWt == null || booster1LaunchWt == 0) {
|
if (!includeBooster1 || booster1LaunchWt == null || booster1LaunchWt == 0 || sustainerLaunchWt == null) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate the final booster mass
|
||||||
|
final double boosterWt;
|
||||||
|
if (sustainerLaunchWt > booster1LaunchWt) {
|
||||||
|
warnings.add("Sustainer wt is greater than total loaded wt of booster 1. Setting mass to 0.");
|
||||||
|
boosterWt = 0;
|
||||||
|
} else {
|
||||||
// Get the booster motor weight
|
// Get the booster motor weight
|
||||||
double boosterMotorWt = 0;
|
double boosterMotorWt = 0;
|
||||||
if (booster1Engine != null) {
|
if (booster1Engine != null) {
|
||||||
boosterMotorWt = booster1Engine.getLaunchMass();
|
boosterMotorWt = booster1Engine.getLaunchMass();
|
||||||
}
|
}
|
||||||
|
|
||||||
double boosterWt = booster1LaunchWt - boosterMotorWt - sustainerMass;
|
boosterWt = booster1LaunchWt - boosterMotorWt - sustainerLaunchWt;
|
||||||
|
}
|
||||||
|
|
||||||
AxialStage booster = rocket.getStage(1);
|
AxialStage booster = rocket.getStage(1);
|
||||||
booster.setMassOverridden(true);
|
booster.setMassOverridden(true);
|
||||||
booster.setSubcomponentsOverriddenMass(true);
|
booster.setSubcomponentsOverriddenMass(true);
|
||||||
@ -282,22 +290,29 @@ public class SimulationHandler extends AbstractElementHandler {
|
|||||||
/**
|
/**
|
||||||
* Applies the mass from the RASAero simulation to booster2 as an override, and returns the final booster2 mass.
|
* Applies the mass from the RASAero simulation to booster2 as an override, and returns the final booster2 mass.
|
||||||
* Note: the sustainer mass, booster1 mass, and booster2 motor mass is subtracted from the RASAero mass to get the final mass.
|
* Note: the sustainer mass, booster1 mass, and booster2 motor mass is subtracted from the RASAero mass to get the final mass.
|
||||||
* @param sustainerMass the sustainer mass
|
* @param warnings list to add import warnings to
|
||||||
* @param booster1Mass the booster1 mass
|
|
||||||
* @return the final booster2 mass
|
* @return the final booster2 mass
|
||||||
*/
|
*/
|
||||||
private double applyBooster2MassOverride(double sustainerMass, double booster1Mass) {
|
private double applyBooster2MassOverride(WarningSet warnings) {
|
||||||
if (!includeBooster2 || booster2LaunchWt == null || booster2LaunchWt == 0) {
|
if (!includeBooster2 || booster2LaunchWt == null || booster2LaunchWt == 0 || booster1LaunchWt == null) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate the final booster mass
|
||||||
|
final double boosterWt;
|
||||||
|
if (booster1LaunchWt > booster2LaunchWt) {
|
||||||
|
warnings.add("Booster1 wt is greater than total loaded wt of booster 2. Setting mass to 0.");
|
||||||
|
boosterWt = 0;
|
||||||
|
} else {
|
||||||
// Get the booster motor weight
|
// Get the booster motor weight
|
||||||
double boosterMotorWt = 0;
|
double boosterMotorWt = 0;
|
||||||
if (booster2Engine != null) {
|
if (booster2Engine != null) {
|
||||||
boosterMotorWt = booster2Engine.getLaunchMass();
|
boosterMotorWt = booster2Engine.getLaunchMass();
|
||||||
}
|
}
|
||||||
|
|
||||||
double boosterWt = booster2LaunchWt - boosterMotorWt - sustainerMass - booster1Mass;
|
boosterWt = booster2LaunchWt - boosterMotorWt - booster1LaunchWt;
|
||||||
|
}
|
||||||
|
|
||||||
AxialStage booster = rocket.getStage(2);
|
AxialStage booster = rocket.getStage(2);
|
||||||
booster.setMassOverridden(true);
|
booster.setMassOverridden(true);
|
||||||
booster.setSubcomponentsOverriddenMass(true);
|
booster.setSubcomponentsOverriddenMass(true);
|
||||||
@ -459,6 +474,7 @@ public class SimulationHandler extends AbstractElementHandler {
|
|||||||
double mountLocationX = mount.getLocations()[0].x;
|
double mountLocationX = mount.getLocations()[0].x;
|
||||||
double motorLocationX = mountLocationX + motorPositionXRel;
|
double motorLocationX = mountLocationX + motorPositionXRel;
|
||||||
double motorCG = motor.getCGPoints()[0].x + motorLocationX;
|
double motorCG = motor.getCGPoints()[0].x + motorLocationX;
|
||||||
|
// TODO: RASAero assumes motor CG to be at half the motor length from the bottom of the parent
|
||||||
return combinedCG * (1 + motorMass / stageMass)
|
return combinedCG * (1 + motorMass / stageMass)
|
||||||
- motorCG * (motorMass / stageMass);
|
- motorCG * (motorMass / stageMass);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user