Implemented CD Override

This commit is contained in:
Alexander Allen 2017-09-18 00:18:01 -04:00 committed by Daniel_M_Williams
parent aa5545a973
commit 107d987973
10 changed files with 138 additions and 3 deletions

View File

@ -819,6 +819,7 @@ RocketCompCfg.but.Setforall = Appliquer \u00E0 tous
RocketCompCfg.but.ttip.Setforall = R\u00E9gler la finition pour tous les composants de la fus\u00E9e. RocketCompCfg.but.ttip.Setforall = R\u00E9gler la finition pour tous les composants de la fus\u00E9e.
RocketCompCfg.checkbox.Endcapped = Arri\u00E8re clos RocketCompCfg.checkbox.Endcapped = Arri\u00E8re clos
RocketCompCfg.checkbox.Overridecenterofgrav = Forcer le centre de gravit\u00E9: RocketCompCfg.checkbox.Overridecenterofgrav = Forcer le centre de gravit\u00E9:
RocketCompCfg.checkbox.Overridecoeffofdrag = Modifier le coefficient de trainee:
RocketCompCfg.checkbox.Overridemass = Forcer la masse: RocketCompCfg.checkbox.Overridemass = Forcer la masse:
RocketCompCfg.checkbox.OverridemassandCG = Forcer la masse et le centre de gravit\u00E9 de tous les sous composants RocketCompCfg.checkbox.OverridemassandCG = Forcer la masse et le centre de gravit\u00E9 de tous les sous composants
RocketCompCfg.checkbox.Usedefaultcolor = Utiliser la couleur par d\u00E9faut RocketCompCfg.checkbox.Usedefaultcolor = Utiliser la couleur par d\u00E9faut

View File

@ -804,6 +804,7 @@ RocketCompCfg.but.Setforall = Definir para todos
RocketCompCfg.but.ttip.Setforall = Definir este acabamento para todos os componentes do foguete. RocketCompCfg.but.ttip.Setforall = Definir este acabamento para todos os componentes do foguete.
RocketCompCfg.checkbox.Endcapped = Fim tampado RocketCompCfg.checkbox.Endcapped = Fim tampado
RocketCompCfg.checkbox.Overridecenterofgrav = Modificar o centro de gravidade: RocketCompCfg.checkbox.Overridecenterofgrav = Modificar o centro de gravidade:
RocketCompCfg.checkbox.Overridecoeffofdrag = Modificar o coeficiente de arrasto:
RocketCompCfg.checkbox.Overridemass = Modificar massa: RocketCompCfg.checkbox.Overridemass = Modificar massa:
RocketCompCfg.checkbox.OverridemassandCG = Modificar a massa e o CG de todos os subcomponentes RocketCompCfg.checkbox.OverridemassandCG = Modificar a massa e o CG de todos os subcomponentes
RocketCompCfg.checkbox.Usedefaultcolor = Use a cor padr\u00e3o RocketCompCfg.checkbox.Usedefaultcolor = Use a cor padr\u00e3o

View File

@ -799,6 +799,7 @@ RocketCompCfg.but.ttip.Setforall = Set this finish for all components of the roc
RocketCompCfg.lbl.Overridemassorcenter = Override the mass or center of gravity of the RocketCompCfg.lbl.Overridemassorcenter = Override the mass or center of gravity of the
RocketCompCfg.checkbox.Overridemass = Override mass: RocketCompCfg.checkbox.Overridemass = Override mass:
RocketCompCfg.checkbox.Overridecenterofgrav = Override center of gravity: RocketCompCfg.checkbox.Overridecenterofgrav = Override center of gravity:
RocketCompCfg.checkbox.Overridecoeffofdrag = Override coefficient of drag:
RocketCompCfg.checkbox.OverridemassandCG = Override mass and CG of all subcomponents RocketCompCfg.checkbox.OverridemassandCG = Override mass and CG of all subcomponents
RocketCompCfg.lbl.longB1 = <html>The overridden mass does not include motors.<br> RocketCompCfg.lbl.longB1 = <html>The overridden mass does not include motors.<br>
RocketCompCfg.lbl.longB2 = The center of gravity is measured from the front end of the RocketCompCfg.lbl.longB2 = The center of gravity is measured from the front end of the

View File

@ -196,6 +196,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
} }
public double getCD() { public double getCD() {
if(component == null) return CD;
if(component.isCDOverridden()) {
return component.getOverrideCD();
}
return CD; return CD;
} }
@ -205,6 +209,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
} }
public double getPressureCD() { public double getPressureCD() {
if(component == null) return pressureCD;
if(component.isCDOverridden()) {
return 0;
}
return pressureCD; return pressureCD;
} }
@ -214,6 +222,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
} }
public double getBaseCD() { public double getBaseCD() {
if(component == null) return baseCD;
if(component.isCDOverridden()) {
return component.getOverrideCD();
}
return baseCD; return baseCD;
} }
@ -223,6 +235,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
} }
public double getFrictionCD() { public double getFrictionCD() {
if(component == null) return frictionCD;
if(component.isCDOverridden()) {
return 0;
}
return frictionCD; return frictionCD;
} }

View File

@ -463,6 +463,10 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
} }
//Handle Overriden CD for Whole Rocket
if(c.isCDOverridden()) {
continue;
}
// Calculate the friction drag: // Calculate the friction drag:
@ -497,6 +501,8 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
} }
} }
// fB may be POSITIVE_INFINITY, but that's ok for us // fB may be POSITIVE_INFINITY, but that's ok for us
double fB = (len + 0.0001) / maxR; double fB = (len + 0.0001) / maxR;
@ -511,6 +517,8 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
} }
} }
return (finFriction + correction * bodyFriction) / conditions.getRefArea(); return (finFriction + correction * bodyFriction) / conditions.getRefArea();
} }
@ -550,6 +558,8 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
map.get(c).setPressureCD(cd); map.get(c).setPressureCD(cd);
} }
if(c.isCDOverridden()) continue;
// Stagnation drag // Stagnation drag
if (c instanceof SymmetricComponent) { if (c instanceof SymmetricComponent) {
@ -600,6 +610,11 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
SymmetricComponent s = (SymmetricComponent) c; SymmetricComponent s = (SymmetricComponent) c;
if(c.isCDOverridden()) {
total += c.getOverrideCD();
continue;
}
if (radius > s.getForeRadius()) { if (radius > s.getForeRadius()) {
double area = Math.PI * (pow2(radius) - pow2(s.getForeRadius())); double area = Math.PI * (pow2(radius) - pow2(s.getForeRadius()));
double cd = base * area / conditions.getRefArea(); double cd = base * area / conditions.getRefArea();

View File

@ -125,6 +125,9 @@ class DocumentConfig {
setters.put("RocketComponent:overridecg", new OverrideSetter( setters.put("RocketComponent:overridecg", new OverrideSetter(
Reflection.findMethod(RocketComponent.class, "setOverrideCGX", double.class), Reflection.findMethod(RocketComponent.class, "setOverrideCGX", double.class),
Reflection.findMethod(RocketComponent.class, "setCGOverridden", boolean.class))); Reflection.findMethod(RocketComponent.class, "setCGOverridden", boolean.class)));
setters.put("RocketComponent:overridecd", new OverrideSetter(
Reflection.findMethod(RocketComponent.class, "setOverrideCD", double.class),
Reflection.findMethod(RocketComponent.class, "setCDOverridden", boolean.class)));
setters.put("RocketComponent:overridesubcomponents", new BooleanSetter( setters.put("RocketComponent:overridesubcomponents", new BooleanSetter(
Reflection.findMethod(RocketComponent.class, "setOverrideSubcomponents", boolean.class))); Reflection.findMethod(RocketComponent.class, "setOverrideSubcomponents", boolean.class)));
setters.put("RocketComponent:comment", new StringSetter( setters.put("RocketComponent:comment", new StringSetter(

View File

@ -125,6 +125,10 @@ public class RocketComponentSaver {
elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>"); elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>");
overridden = true; overridden = true;
} }
if (c.isCDOverridden()) {
elements.add("<overridecd>" + c.getOverrideCD() + "</overridecd>");
overridden = true;
}
if (overridden) { if (overridden) {
elements.add("<overridesubcomponents>" + c.getOverrideSubcomponents() elements.add("<overridesubcomponents>" + c.getOverrideSubcomponents()
+ "</overridesubcomponents>"); + "</overridesubcomponents>");

View File

@ -133,6 +133,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
private boolean massOverriden = false; private boolean massOverriden = false;
private double overrideCGX = 0; private double overrideCGX = 0;
private boolean cgOverriden = false; private boolean cgOverriden = false;
private double overrideCD = 0;
private boolean cdOverriden = false;
private boolean overrideSubcomponents = false; private boolean overrideSubcomponents = false;
@ -638,6 +640,60 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
/** Return the current override CD. The CD is not neccesarily overriden.
*
* @return the override CG.
*/
public final double getOverrideCD() {
mutex.verify();
return overrideCD;
}
/**
* Set the current override CD to x.
*
* @param x the override CD to set.
*/
public final void setOverrideCD(double x) {
if (MathUtil.equals(overrideCD, x))
return;
checkState();
this.overrideCD = x;
if (isCDOverridden())
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
else
fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
}
/**
* Return whether the CD is currently overriden.
*
* @return whether the CD is overridden
*/
public final boolean isCDOverridden() {
mutex.verify();
return cdOverriden;
}
/**
* Set whether the CD is currently overriden.
*
* @param o whether the CD is overriden
*/
public final void setCDOverridden(boolean o) {
if(cdOverriden == o) {
return;
}
checkState();
cdOverriden = o;
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
/** /**
* Return whether the mass and/or CG override overrides all subcomponent values * Return whether the mass and/or CG override overrides all subcomponent values
* as well. The default implementation is a normal getter/setter implementation, * as well. The default implementation is a normal getter/setter implementation,

View File

@ -24,6 +24,8 @@ import javax.swing.JTabbedPane;
import javax.swing.JTextArea; import javax.swing.JTextArea;
import javax.swing.JTextField; import javax.swing.JTextField;
import java.text.DecimalFormat;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.database.ComponentPresetDatabase; import net.sf.openrocket.database.ComponentPresetDatabase;
import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.OpenRocketDocument;
@ -331,6 +333,8 @@ public class RocketComponentConfig extends JPanel {
panel.add(bs, "growx 5, w 100lp, wrap"); panel.add(bs, "growx 5, w 100lp, wrap");
//OVERRIDES CG ----------------------------------
//// CG override //// CG override
bm = new BooleanModel(component, "CGOverridden"); bm = new BooleanModel(component, "CGOverridden");
check = new JCheckBox(bm); check = new JCheckBox(bm);
@ -369,6 +373,37 @@ public class RocketComponentConfig extends JPanel {
panel.add(bs, "growx 5, w 100lp, wrap 35lp"); panel.add(bs, "growx 5, w 100lp, wrap 35lp");
//END OVERRIDES CG ---------------------------------------------------
//BEGIN OVERRIDES CD ---------------------------------------------------
bm = new BooleanModel(component, "CDOverridden");
check = new JCheckBox(bm);
//// Override mass:
check.setText("Set coefficient of drag:");
panel.add(check, "growx 1, gapright 20lp");
m = new DoubleModel(component, "OverrideCD", UnitGroup.UNITS_NONE, 0);
spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
bm.addEnableComponent(spin, true);
panel.add(spin, "growx 1");
bs = new BasicSlider(m.getSliderModel(0, 0.01, 1.0));
bm.addEnableComponent(bs);
panel.add(bs, "growx 5, w 100lp, wrap");
//END OVERRIDES CP --------------------------------------------------
// Override subcomponents checkbox // Override subcomponents checkbox
bm = new BooleanModel(component, "OverrideSubcomponents"); bm = new BooleanModel(component, "OverrideSubcomponents");
check = new JCheckBox(bm); check = new JCheckBox(bm);
@ -596,6 +631,7 @@ public class RocketComponentConfig extends JPanel {
} }
protected static void setDeepEnabled(Component component, boolean enabled) { protected static void setDeepEnabled(Component component, boolean enabled) {
component.setEnabled(enabled); component.setEnabled(enabled);
if (component instanceof Container) { if (component instanceof Container) {

View File

@ -589,6 +589,8 @@ public class ScaleDialog extends JDialog {
mass = mass * MathUtil.pow3(multiplier); mass = mass * MathUtil.pow3(multiplier);
component.setOverrideMass(mass); component.setOverrideMass(mass);
} }
//TODO: Fix overridden pressure!
} }
} }