Implemented CD Override
This commit is contained in:
parent
aa5545a973
commit
107d987973
@ -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.checkbox.Endcapped = Arri\u00E8re clos
|
||||
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.OverridemassandCG = Forcer la masse et le centre de gravit\u00E9 de tous les sous composants
|
||||
RocketCompCfg.checkbox.Usedefaultcolor = Utiliser la couleur par d\u00E9faut
|
||||
|
@ -804,6 +804,7 @@ RocketCompCfg.but.Setforall = Definir para todos
|
||||
RocketCompCfg.but.ttip.Setforall = Definir este acabamento para todos os componentes do foguete.
|
||||
RocketCompCfg.checkbox.Endcapped = Fim tampado
|
||||
RocketCompCfg.checkbox.Overridecenterofgrav = Modificar o centro de gravidade:
|
||||
RocketCompCfg.checkbox.Overridecoeffofdrag = Modificar o coeficiente de arrasto:
|
||||
RocketCompCfg.checkbox.Overridemass = Modificar massa:
|
||||
RocketCompCfg.checkbox.OverridemassandCG = Modificar a massa e o CG de todos os subcomponentes
|
||||
RocketCompCfg.checkbox.Usedefaultcolor = Use a cor padr\u00e3o
|
||||
|
@ -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.checkbox.Overridemass = Override mass:
|
||||
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.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
|
||||
|
@ -196,6 +196,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
|
||||
}
|
||||
|
||||
public double getCD() {
|
||||
if(component == null) return CD;
|
||||
if(component.isCDOverridden()) {
|
||||
return component.getOverrideCD();
|
||||
}
|
||||
return CD;
|
||||
}
|
||||
|
||||
@ -205,6 +209,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
|
||||
}
|
||||
|
||||
public double getPressureCD() {
|
||||
if(component == null) return pressureCD;
|
||||
if(component.isCDOverridden()) {
|
||||
return 0;
|
||||
}
|
||||
return pressureCD;
|
||||
}
|
||||
|
||||
@ -214,6 +222,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
|
||||
}
|
||||
|
||||
public double getBaseCD() {
|
||||
if(component == null) return baseCD;
|
||||
if(component.isCDOverridden()) {
|
||||
return component.getOverrideCD();
|
||||
}
|
||||
return baseCD;
|
||||
}
|
||||
|
||||
@ -223,6 +235,10 @@ public class AerodynamicForces implements Cloneable, Monitorable {
|
||||
}
|
||||
|
||||
public double getFrictionCD() {
|
||||
if(component == null) return frictionCD;
|
||||
if(component.isCDOverridden()) {
|
||||
return 0;
|
||||
}
|
||||
return frictionCD;
|
||||
}
|
||||
|
||||
|
@ -463,6 +463,10 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
|
||||
|
||||
}
|
||||
|
||||
//Handle Overriden CD for Whole Rocket
|
||||
if(c.isCDOverridden()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// Calculate the friction drag:
|
||||
@ -496,6 +500,8 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
// fB may be POSITIVE_INFINITY, but that's ok for us
|
||||
@ -510,6 +516,8 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return (finFriction + correction * bodyFriction) / conditions.getRefArea();
|
||||
}
|
||||
@ -550,7 +558,9 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
|
||||
map.get(c).setPressureCD(cd);
|
||||
}
|
||||
|
||||
|
||||
if(c.isCDOverridden()) continue;
|
||||
|
||||
|
||||
// Stagnation drag
|
||||
if (c instanceof SymmetricComponent) {
|
||||
SymmetricComponent s = (SymmetricComponent) c;
|
||||
@ -599,6 +609,11 @@ public class BarrowmanCalculator extends AbstractAerodynamicCalculator {
|
||||
continue;
|
||||
|
||||
SymmetricComponent s = (SymmetricComponent) c;
|
||||
|
||||
if(c.isCDOverridden()) {
|
||||
total += c.getOverrideCD();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (radius > s.getForeRadius()) {
|
||||
double area = Math.PI * (pow2(radius) - pow2(s.getForeRadius()));
|
||||
|
@ -125,6 +125,9 @@ class DocumentConfig {
|
||||
setters.put("RocketComponent:overridecg", new OverrideSetter(
|
||||
Reflection.findMethod(RocketComponent.class, "setOverrideCGX", double.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(
|
||||
Reflection.findMethod(RocketComponent.class, "setOverrideSubcomponents", boolean.class)));
|
||||
setters.put("RocketComponent:comment", new StringSetter(
|
||||
|
@ -125,6 +125,10 @@ public class RocketComponentSaver {
|
||||
elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>");
|
||||
overridden = true;
|
||||
}
|
||||
if (c.isCDOverridden()) {
|
||||
elements.add("<overridecd>" + c.getOverrideCD() + "</overridecd>");
|
||||
overridden = true;
|
||||
}
|
||||
if (overridden) {
|
||||
elements.add("<overridesubcomponents>" + c.getOverrideSubcomponents()
|
||||
+ "</overridesubcomponents>");
|
||||
|
@ -133,6 +133,8 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
private boolean massOverriden = false;
|
||||
private double overrideCGX = 0;
|
||||
private boolean cgOverriden = false;
|
||||
private double overrideCD = 0;
|
||||
private boolean cdOverriden = false;
|
||||
|
||||
private boolean overrideSubcomponents = false;
|
||||
|
||||
@ -635,6 +637,60 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
cgOverriden = o;
|
||||
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -24,6 +24,8 @@ import javax.swing.JTabbedPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTextField;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import net.sf.openrocket.database.ComponentPresetDatabase;
|
||||
import net.sf.openrocket.document.OpenRocketDocument;
|
||||
@ -330,7 +332,9 @@ public class RocketComponentConfig extends JPanel {
|
||||
bm.addEnableComponent(bs);
|
||||
panel.add(bs, "growx 5, w 100lp, wrap");
|
||||
|
||||
|
||||
|
||||
//OVERRIDES CG ----------------------------------
|
||||
|
||||
//// CG override
|
||||
bm = new BooleanModel(component, "CGOverridden");
|
||||
check = new JCheckBox(bm);
|
||||
@ -368,6 +372,37 @@ public class RocketComponentConfig extends JPanel {
|
||||
bm.addEnableComponent(bs);
|
||||
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
|
||||
bm = new BooleanModel(component, "OverrideSubcomponents");
|
||||
@ -596,6 +631,7 @@ public class RocketComponentConfig extends JPanel {
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected static void setDeepEnabled(Component component, boolean enabled) {
|
||||
component.setEnabled(enabled);
|
||||
if (component instanceof Container) {
|
||||
@ -604,4 +640,4 @@ public class RocketComponentConfig extends JPanel {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -589,6 +589,8 @@ public class ScaleDialog extends JDialog {
|
||||
mass = mass * MathUtil.pow3(multiplier);
|
||||
component.setOverrideMass(mass);
|
||||
}
|
||||
|
||||
//TODO: Fix overridden pressure!
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user