[#1750] Separate override subcomponents to mass, CG, and CD subcomponents override
This commit is contained in:
parent
4162e1d451
commit
9f5fb060d2
@ -924,12 +924,14 @@ RocketCompCfg.but.Setforall = Set for all
|
|||||||
RocketCompCfg.but.ttip.Setforall = Set this finish for all components of the rocket.
|
RocketCompCfg.but.ttip.Setforall = Set this finish for all components of the rocket.
|
||||||
RocketCompCfg.checkbox.Overridemass = Override mass:
|
RocketCompCfg.checkbox.Overridemass = Override mass:
|
||||||
RocketCompCfg.checkbox.Overridemass.ttip = Overrides the mass of the component calculated by the component's volume and density.
|
RocketCompCfg.checkbox.Overridemass.ttip = Overrides the mass of the component calculated by the component's volume and density.
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = Override center of gravity:
|
RocketCompCfg.checkbox.Overridecenterofgrav = Override center of gravity CG:
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav.ttip = Overrides the component's center of gravity location.
|
RocketCompCfg.checkbox.Overridecenterofgrav.ttip = Overrides the component's center of gravity (CG) location.
|
||||||
RocketCompCfg.checkbox.SetDragCoeff = Override coefficient of drag:
|
RocketCompCfg.checkbox.SetDragCoeff = <html>Override coefficient of drag C<sub>D</sub>:</html>
|
||||||
RocketCompCfg.checkbox.SetDragCoeff.ttip = Overrides the component's coefficient of drag.
|
RocketCompCfg.checkbox.SetDragCoeff.ttip = <html>Overrides the component's coefficient of drag C<sub>D</sub>.</html>
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Override mass, CG, and CD of all subcomponents
|
RocketCompCfg.checkbox.OverrideSubcomponents = Override for all subcomponents
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents.ttip = <html>Overrides the aggregate mass, center of gravity (CG), and coefficient of drag (CD) of this component<br>and its subcomponents with the mass, CG, and CD of this component.</html>
|
RocketCompCfg.checkbox.OverrideSubcomponents.Mass.ttip = <html>Overrides the aggregate mass of this component<br>and its subcomponents with the mass of this component.</html>
|
||||||
|
RocketCompCfg.checkbox.OverrideSubcomponents.CG.ttip = <html>Overrides the center of gravity (CG) of this component<br>and its subcomponents with the CG of this component.</html>
|
||||||
|
RocketCompCfg.checkbox.OverrideSubcomponents.CD.ttip = <html>Overrides the coefficient of drag (C<sub>D</sub>) of this component<br>and its subcomponents with the C<sub>D</sub> of this component.</html>
|
||||||
RocketCompCfg.lbl.longB1 = <html>The overridden mass and center of gravity does not include motors.<br>
|
RocketCompCfg.lbl.longB1 = <html>The overridden mass and center of gravity 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
|
||||||
RocketCompCfg.lbl.Commentsonthe = Comments on the
|
RocketCompCfg.lbl.Commentsonthe = Comments on the
|
||||||
|
|||||||
@ -642,7 +642,7 @@ RocketCompCfg.but.Setforall = Nastav pro v\u0161echny
|
|||||||
RocketCompCfg.but.ttip.Setforall = Nastav povrchovou úpravu pro v\u0161echny komponenty rakety.
|
RocketCompCfg.but.ttip.Setforall = Nastav povrchovou úpravu pro v\u0161echny komponenty rakety.
|
||||||
RocketCompCfg.checkbox.Overridemass = Zmen hmotnost:
|
RocketCompCfg.checkbox.Overridemass = Zmen hmotnost:
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = Zmen te\u017Ei\u0161te:
|
RocketCompCfg.checkbox.Overridecenterofgrav = Zmen te\u017Ei\u0161te:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Zmen hmotnost a te\u017Ei\u0161te v\u0161ech komponent
|
RocketCompCfg.checkbox.OverrideSubcomponents = P\u0159eps\u00E1n\u00ED pro v\u0161echny d\u00EDl\u010D\u00ED sou\u010D\u00E1sti
|
||||||
RocketCompCfg.lbl.longB1 = <html> Zmena hmotnosti nezahrnuje motory.<br>
|
RocketCompCfg.lbl.longB1 = <html> Zmena hmotnosti nezahrnuje motory.<br>
|
||||||
RocketCompCfg.lbl.longB2 = Te\u017Ei\u0161te je mereno od predku
|
RocketCompCfg.lbl.longB2 = Te\u017Ei\u0161te je mereno od predku
|
||||||
RocketCompCfg.lbl.Commentsonthe = Komentár na
|
RocketCompCfg.lbl.Commentsonthe = Komentár na
|
||||||
|
|||||||
@ -831,7 +831,7 @@ RocketCompCfg.but.ttip.Setforall = Aplicar este acabado a todos
|
|||||||
RocketCompCfg.checkbox.Endcapped = Extremo tapado
|
RocketCompCfg.checkbox.Endcapped = Extremo tapado
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = Especificar el CG:
|
RocketCompCfg.checkbox.Overridecenterofgrav = Especificar el CG:
|
||||||
RocketCompCfg.checkbox.Overridemass = Especificar la masa:
|
RocketCompCfg.checkbox.Overridemass = Especificar la masa:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Incluir la masa y el CG de todos los subcomponentes
|
RocketCompCfg.checkbox.OverrideSubcomponents = Incluir de todos los subcomponentes
|
||||||
RocketCompCfg.checkbox.Usedefaultcolor = Usar color por defecto
|
RocketCompCfg.checkbox.Usedefaultcolor = Usar color por defecto
|
||||||
RocketCompCfg.combo.ttip.componentmaterialaffects = El peso del componente depender\u00e1 del material seleccionado.
|
RocketCompCfg.combo.ttip.componentmaterialaffects = El peso del componente depender\u00e1 del material seleccionado.
|
||||||
RocketCompCfg.lbl.Choosecolor = Elija color
|
RocketCompCfg.lbl.Choosecolor = Elija color
|
||||||
|
|||||||
@ -823,7 +823,7 @@ 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.Overridecoeffofdrag = Modifier le coefficient de trainee:
|
||||||
RocketCompCfg.checkbox.Overridemass = Forcer la masse:
|
RocketCompCfg.checkbox.Overridemass = Forcer la masse:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Forcer la masse et le centre de gravit\u00E9 de tous les sous composants
|
RocketCompCfg.checkbox.OverrideSubcomponents = Forcer pour tous les sous composants
|
||||||
RocketCompCfg.checkbox.Usedefaultcolor = Utiliser la couleur par d\u00E9faut
|
RocketCompCfg.checkbox.Usedefaultcolor = Utiliser la couleur par d\u00E9faut
|
||||||
RocketCompCfg.combo.ttip.componentmaterialaffects = Les mat\u00E9riaux utilis\u00E9s pour la pi\u00E8ce affectent le poids de la pi\u00E8ce.
|
RocketCompCfg.combo.ttip.componentmaterialaffects = Les mat\u00E9riaux utilis\u00E9s pour la pi\u00E8ce affectent le poids de la pi\u00E8ce.
|
||||||
RocketCompCfg.lbl.Choosecolor = Choisir la couleur
|
RocketCompCfg.lbl.Choosecolor = Choisir la couleur
|
||||||
|
|||||||
@ -700,7 +700,7 @@ RocketCompCfg.but.Setforall = Imposta per tutti
|
|||||||
RocketCompCfg.but.ttip.Setforall = Imposta questa finitura per tutti i componenti del razzo.
|
RocketCompCfg.but.ttip.Setforall = Imposta questa finitura per tutti i componenti del razzo.
|
||||||
RocketCompCfg.checkbox.Overridemass = Modifica la massa:
|
RocketCompCfg.checkbox.Overridemass = Modifica la massa:
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = Sposta il centro di gravita':
|
RocketCompCfg.checkbox.Overridecenterofgrav = Sposta il centro di gravita':
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Modifica la massa ed il CG di tutti i subcomponenti
|
RocketCompCfg.checkbox.OverrideSubcomponents = Modifica di tutti i subcomponenti
|
||||||
RocketCompCfg.lbl.longB1 = <html>La massa modificata non include i motori.<br>
|
RocketCompCfg.lbl.longB1 = <html>La massa modificata non include i motori.<br>
|
||||||
RocketCompCfg.lbl.longB2 = Il Centro di Gravita' e' misurato dall'inizio di
|
RocketCompCfg.lbl.longB2 = Il Centro di Gravita' e' misurato dall'inizio di
|
||||||
RocketCompCfg.lbl.Commentsonthe = Commenti sul
|
RocketCompCfg.lbl.Commentsonthe = Commenti sul
|
||||||
|
|||||||
@ -730,7 +730,7 @@ RocketCompCfg.but.Setforall = \u5168\u3066\u306B\u9069\u7528
|
|||||||
RocketCompCfg.but.ttip.Setforall = \u3053\u306E\u4ED5\u4E0A\u3052\u65B9\u3092\u5168\u3066\u306E\u90E8\u54C1\u306B\u9069\u7528\u3059\u308B
|
RocketCompCfg.but.ttip.Setforall = \u3053\u306E\u4ED5\u4E0A\u3052\u65B9\u3092\u5168\u3066\u306E\u90E8\u54C1\u306B\u9069\u7528\u3059\u308B
|
||||||
RocketCompCfg.checkbox.Overridemass = \u8CEA\u91CF\u306E\u518D\u5B9A\u7FA9\uFF1A
|
RocketCompCfg.checkbox.Overridemass = \u8CEA\u91CF\u306E\u518D\u5B9A\u7FA9\uFF1A
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = \u91CD\u5FC3\u306E\u518D\u5B9A\u7FA9\uFF1A
|
RocketCompCfg.checkbox.Overridecenterofgrav = \u91CD\u5FC3\u306E\u518D\u5B9A\u7FA9\uFF1A
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = \u5168\u3066\u306E\u30B5\u30D6\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u8CEA\u91CF\u3068CG\u3092\u518D\u5B9A\u7FA9\uFF1A
|
RocketCompCfg.checkbox.OverrideSubcomponents = \u3059\u3079\u3066\u306e\u30b5\u30d6\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b
|
||||||
RocketCompCfg.lbl.longB1 = <html>\u518D\u5B9A\u7FA9\u3055\u308C\u305F\u8CEA\u91CF\u306B\u306F\u30E2\u30FC\u30BF\u30FC\u306F\u542B\u307E\u308C\u306A\u3044<br>
|
RocketCompCfg.lbl.longB1 = <html>\u518D\u5B9A\u7FA9\u3055\u308C\u305F\u8CEA\u91CF\u306B\u306F\u30E2\u30FC\u30BF\u30FC\u306F\u542B\u307E\u308C\u306A\u3044<br>
|
||||||
RocketCompCfg.lbl.longB2 = \u91CD\u5FC3\u306F\u90E8\u54C1\u306E\u524D\u65B9\u7AEF\u304B\u3089\u3001\u90E8\u54C1\uFF1A
|
RocketCompCfg.lbl.longB2 = \u91CD\u5FC3\u306F\u90E8\u54C1\u306E\u524D\u65B9\u7AEF\u304B\u3089\u3001\u90E8\u54C1\uFF1A
|
||||||
RocketCompCfg.lbl.Commentsonthe = \u30B3\u30E1\u30F3\u30C8\uFF1A
|
RocketCompCfg.lbl.Commentsonthe = \u30B3\u30E1\u30F3\u30C8\uFF1A
|
||||||
|
|||||||
@ -851,7 +851,7 @@ RocketCompCfg.but.ttip.Setforall = Stel deze afwerking in voor alle onderdelen v
|
|||||||
RocketCompCfg.checkbox.Overridemass = Overschrijf massa:
|
RocketCompCfg.checkbox.Overridemass = Overschrijf massa:
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = Overschrijf zwaartepunt:
|
RocketCompCfg.checkbox.Overridecenterofgrav = Overschrijf zwaartepunt:
|
||||||
RocketCompCfg.checkbox.SetDragCoeff = Stel wrijvingscoëfficiënt in:
|
RocketCompCfg.checkbox.SetDragCoeff = Stel wrijvingscoëfficiënt in:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Massa en zwaartepunt van alle subonderdelen overschrijven
|
RocketCompCfg.checkbox.OverrideSubcomponents = Voor alle subonderdelen overschrijven
|
||||||
RocketCompCfg.lbl.longB1 = <html>De overschreven massa omvat geen motoren.<br>
|
RocketCompCfg.lbl.longB1 = <html>De overschreven massa omvat geen motoren.<br>
|
||||||
RocketCompCfg.lbl.longB2 = Het zwaartepunt wordt gemeten vanaf de voorkant van de
|
RocketCompCfg.lbl.longB2 = Het zwaartepunt wordt gemeten vanaf de voorkant van de
|
||||||
RocketCompCfg.lbl.Commentsonthe = Opmerkingen over de
|
RocketCompCfg.lbl.Commentsonthe = Opmerkingen over de
|
||||||
|
|||||||
@ -644,7 +644,7 @@ update.dlg.latestVersion = Korzystasz z najnowszej wersji OpenRocket: %s.
|
|||||||
RocketCompCfg.but.ttip.Setforall = Nadaj to wyko\u0144czenie wszystkim cz\u0119\u015Bci\u0105 sk\u0142adow\u0105 rakiety.
|
RocketCompCfg.but.ttip.Setforall = Nadaj to wyko\u0144czenie wszystkim cz\u0119\u015Bci\u0105 sk\u0142adow\u0105 rakiety.
|
||||||
RocketCompCfg.checkbox.Overridemass = Wymu\u015B ci\u0119\u017Car:
|
RocketCompCfg.checkbox.Overridemass = Wymu\u015B ci\u0119\u017Car:
|
||||||
RocketCompCfg.checkbox.Overridecenterofgrav = Wymu\u015B \u015Brodek ci\u0119\u017Cko\u015Bci:
|
RocketCompCfg.checkbox.Overridecenterofgrav = Wymu\u015B \u015Brodek ci\u0119\u017Cko\u015Bci:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Wymu\u015B ci\u0119\u017Car oraz \u015Brodek ci\u0119\u017Cko\u015Bci wszystkich dodatkowych cz\u0119\u015Bci sk\u0142adowych
|
RocketCompCfg.checkbox.OverrideSubcomponents = Nadpisanie dla wszystkich podkomponent\u00F3w
|
||||||
RocketCompCfg.lbl.longB1 = <html>Wymuszony ci\u0119\u017Car nie uwzgl\u0119dnia silników.<br>
|
RocketCompCfg.lbl.longB1 = <html>Wymuszony ci\u0119\u017Car nie uwzgl\u0119dnia silników.<br>
|
||||||
RocketCompCfg.lbl.longB2 = \u015Arodek ci\u0119\u017Cko\u015Bci jest mierzony od przodu
|
RocketCompCfg.lbl.longB2 = \u015Arodek ci\u0119\u017Cko\u015Bci jest mierzony od przodu
|
||||||
RocketCompCfg.lbl.Commentsonthe = Uwagi -
|
RocketCompCfg.lbl.Commentsonthe = Uwagi -
|
||||||
|
|||||||
@ -809,7 +809,7 @@ 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.Overridecoeffofdrag = Modificar o coeficiente de arrasto:
|
||||||
RocketCompCfg.checkbox.Overridemass = Modificar massa:
|
RocketCompCfg.checkbox.Overridemass = Modificar massa:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Modificar a massa e o CG de todos os subcomponentes
|
RocketCompCfg.checkbox.OverrideSubcomponents = Modificar de todos os subcomponentes
|
||||||
RocketCompCfg.checkbox.Usedefaultcolor = Use a cor padr\u00e3o
|
RocketCompCfg.checkbox.Usedefaultcolor = Use a cor padr\u00e3o
|
||||||
RocketCompCfg.combo.ttip.componentmaterialaffects = O material do componente afeta o peso do componente.
|
RocketCompCfg.combo.ttip.componentmaterialaffects = O material do componente afeta o peso do componente.
|
||||||
RocketCompCfg.lbl.Choosecolor = Escolha a cor
|
RocketCompCfg.lbl.Choosecolor = Escolha a cor
|
||||||
|
|||||||
@ -802,7 +802,7 @@ RocketCompCfg.but.ttip.Setforall = Set this finish for all components of the roc
|
|||||||
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.Overridecoeffofdrag = Override coefficient of drag:
|
||||||
RocketCompCfg.checkbox.OverrideSubcomponents = Override mass and CG of all subcomponents
|
RocketCompCfg.checkbox.OverrideSubcomponents = Override for 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
|
||||||
RocketCompCfg.lbl.Commentsonthe = Comments on the
|
RocketCompCfg.lbl.Commentsonthe = Comments on the
|
||||||
|
|||||||
@ -129,8 +129,16 @@ class DocumentConfig {
|
|||||||
setters.put("RocketComponent:overridecd", new OverrideSetter(
|
setters.put("RocketComponent:overridecd", new OverrideSetter(
|
||||||
Reflection.findMethod(RocketComponent.class, "setOverrideCD", double.class),
|
Reflection.findMethod(RocketComponent.class, "setOverrideCD", double.class),
|
||||||
Reflection.findMethod(RocketComponent.class, "setCDOverridden", boolean.class)));
|
Reflection.findMethod(RocketComponent.class, "setCDOverridden", boolean.class)));
|
||||||
|
// TODO: delete overridesubcomponents setters if no compatibility is needed anymore with OR 15.03
|
||||||
setters.put("RocketComponent:overridesubcomponents", new BooleanSetter(
|
setters.put("RocketComponent:overridesubcomponents", new BooleanSetter(
|
||||||
Reflection.findMethod(RocketComponent.class, "setSubcomponentsOverridden", boolean.class)));
|
Reflection.findMethod(RocketComponent.class, "setSubcomponentsOverridden", boolean.class)));
|
||||||
|
|
||||||
|
setters.put("RocketComponent:overridesubcomponentsmass", new BooleanSetter(
|
||||||
|
Reflection.findMethod(RocketComponent.class, "setSubcomponentsOverriddenMass", boolean.class)));
|
||||||
|
setters.put("RocketComponent:overridesubcomponentscg", new BooleanSetter(
|
||||||
|
Reflection.findMethod(RocketComponent.class, "setSubcomponentsOverriddenCG", boolean.class)));
|
||||||
|
setters.put("RocketComponent:overridesubcomponentscd", new BooleanSetter(
|
||||||
|
Reflection.findMethod(RocketComponent.class, "setSubcomponentsOverriddenCD", boolean.class)));
|
||||||
setters.put("RocketComponent:comment", new StringSetter(
|
setters.put("RocketComponent:comment", new StringSetter(
|
||||||
Reflection.findMethod(RocketComponent.class, "setComment", String.class)));
|
Reflection.findMethod(RocketComponent.class, "setComment", String.class)));
|
||||||
setters.put("RocketComponent:preset", new ComponentPresetSetter(
|
setters.put("RocketComponent:preset", new ComponentPresetSetter(
|
||||||
|
|||||||
@ -128,22 +128,20 @@ public class RocketComponentSaver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Overrides
|
// Overrides
|
||||||
boolean overridden = false;
|
|
||||||
if (c.isMassOverridden()) {
|
if (c.isMassOverridden()) {
|
||||||
elements.add("<overridemass>" + c.getOverrideMass() + "</overridemass>");
|
elements.add("<overridemass>" + c.getOverrideMass() + "</overridemass>");
|
||||||
overridden = true;
|
elements.add("<overridesubcomponentsmass>" + c.isSubcomponentsOverriddenMass()
|
||||||
|
+ "</overridesubcomponentsmass>");
|
||||||
}
|
}
|
||||||
if (c.isCGOverridden()) {
|
if (c.isCGOverridden()) {
|
||||||
elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>");
|
elements.add("<overridecg>" + c.getOverrideCGX() + "</overridecg>");
|
||||||
overridden = true;
|
elements.add("<overridesubcomponentscg>" + c.isSubcomponentsOverriddenCG()
|
||||||
|
+ "</overridesubcomponentscg>");
|
||||||
}
|
}
|
||||||
if (c.isCDOverridden()) {
|
if (c.isCDOverridden()) {
|
||||||
elements.add("<overridecd>" + c.getOverrideCD() + "</overridecd>");
|
elements.add("<overridecd>" + c.getOverrideCD() + "</overridecd>");
|
||||||
overridden = true;
|
elements.add("<overridesubcomponentscd>" + c.isSubcomponentsOverriddenCD()
|
||||||
}
|
+ "</overridesubcomponentscd>");
|
||||||
if (overridden) {
|
|
||||||
elements.add("<overridesubcomponents>" + c.isSubcomponentsOverridden()
|
|
||||||
+ "</overridesubcomponents>");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -175,7 +175,8 @@ public abstract class BaseHandler<C extends RocketComponent> extends AbstractEle
|
|||||||
if (override) {
|
if (override) {
|
||||||
component.setCGOverridden(override);
|
component.setCGOverridden(override);
|
||||||
component.setMassOverridden(override);
|
component.setMassOverridden(override);
|
||||||
component.setSubcomponentsOverridden(false); //Rocksim does not support this type of override
|
component.setSubcomponentsOverriddenMass(false); //Rocksim does not support this type of override
|
||||||
|
component.setSubcomponentsOverriddenCG(false); //Rocksim does not support this type of override
|
||||||
component.setOverrideMass(mass);
|
component.setOverrideMass(mass);
|
||||||
component.setOverrideCGX(cg);
|
component.setOverrideCGX(cg);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -208,12 +208,12 @@ class RocketDesignHandler extends AbstractElementHandler {
|
|||||||
final AxialStage stage = new AxialStage();
|
final AxialStage stage = new AxialStage();
|
||||||
if (stage3Mass > 0.0d) {
|
if (stage3Mass > 0.0d) {
|
||||||
stage.setMassOverridden(true);
|
stage.setMassOverridden(true);
|
||||||
stage.setSubcomponentsOverridden(true); //Rocksim does not support this type of override
|
stage.setSubcomponentsOverriddenMass(true); //Rocksim does not support this type of override
|
||||||
stage.setOverrideMass(stage3Mass);
|
stage.setOverrideMass(stage3Mass);
|
||||||
}
|
}
|
||||||
if (stage3CG > 0.0d) {
|
if (stage3CG > 0.0d) {
|
||||||
stage.setCGOverridden(true);
|
stage.setCGOverridden(true);
|
||||||
stage.setSubcomponentsOverridden(true); //Rocksim does not support this type of override
|
stage.setSubcomponentsOverriddenCG(true); //Rocksim does not support this type of override
|
||||||
stage.setOverrideCGX(stage3CG);
|
stage.setOverrideCGX(stage3CG);
|
||||||
}
|
}
|
||||||
component.addChild(stage);
|
component.addChild(stage);
|
||||||
@ -224,12 +224,12 @@ class RocketDesignHandler extends AbstractElementHandler {
|
|||||||
final AxialStage stage = new AxialStage();
|
final AxialStage stage = new AxialStage();
|
||||||
if (stage2Mass > 0.0d) {
|
if (stage2Mass > 0.0d) {
|
||||||
stage.setMassOverridden(true);
|
stage.setMassOverridden(true);
|
||||||
stage.setSubcomponentsOverridden(true); //Rocksim does not support this type of override
|
stage.setSubcomponentsOverriddenMass(true); //Rocksim does not support this type of override
|
||||||
stage.setOverrideMass(stage2Mass);
|
stage.setOverrideMass(stage2Mass);
|
||||||
}
|
}
|
||||||
if (stage2CG > 0.0d) {
|
if (stage2CG > 0.0d) {
|
||||||
stage.setCGOverridden(true);
|
stage.setCGOverridden(true);
|
||||||
stage.setSubcomponentsOverridden(true); //Rocksim does not support this type of override
|
stage.setSubcomponentsOverriddenCG(true); //Rocksim does not support this type of override
|
||||||
stage.setOverrideCGX(stage2CG);
|
stage.setOverrideCGX(stage2CG);
|
||||||
}
|
}
|
||||||
component.addChild(stage);
|
component.addChild(stage);
|
||||||
@ -241,12 +241,12 @@ class RocketDesignHandler extends AbstractElementHandler {
|
|||||||
final AxialStage stage = new AxialStage();
|
final AxialStage stage = new AxialStage();
|
||||||
if (stage1Mass > 0.0d) {
|
if (stage1Mass > 0.0d) {
|
||||||
stage.setMassOverridden(true);
|
stage.setMassOverridden(true);
|
||||||
stage.setSubcomponentsOverridden(true); //Rocksim does not support this type of override
|
stage.setSubcomponentsOverriddenMass(true); //Rocksim does not support this type of override
|
||||||
stage.setOverrideMass(stage1Mass);
|
stage.setOverrideMass(stage1Mass);
|
||||||
}
|
}
|
||||||
if (stage1CG > 0.0d) {
|
if (stage1CG > 0.0d) {
|
||||||
stage.setCGOverridden(true);
|
stage.setCGOverridden(true);
|
||||||
stage.setSubcomponentsOverridden(true); //Rocksim does not support this type of override
|
stage.setSubcomponentsOverriddenCG(true); //Rocksim does not support this type of override
|
||||||
stage.setOverrideCGX(stage1CG);
|
stage.setOverrideCGX(stage1CG);
|
||||||
}
|
}
|
||||||
component.addChild(stage);
|
component.addChild(stage);
|
||||||
|
|||||||
@ -355,15 +355,15 @@ public class MassCalculation {
|
|||||||
// setting zero as the CG position means the top of the component, which is component.getPosition()
|
// setting zero as the CG position means the top of the component, which is component.getPosition()
|
||||||
final Coordinate compZero = parentTransform.transform( component.getPosition() );
|
final Coordinate compZero = parentTransform.transform( component.getPosition() );
|
||||||
|
|
||||||
if (component.isSubcomponentsOverridden()) {
|
if (component.isSubcomponentsOverriddenMass() || component.isSubcomponentsOverriddenCG()) {
|
||||||
if (component.isMassive()) {
|
if (component.isMassive()) {
|
||||||
// if this component mass, merge it in before overriding:
|
// if this component mass, merge it in before overriding:
|
||||||
this.addMass( compCM );
|
this.addMass( compCM );
|
||||||
}
|
}
|
||||||
if (component.isMassOverridden()) {
|
if (component.isSubcomponentsOverriddenMass() && component.isMassOverridden()) {
|
||||||
this.setCM( this.getCM().setWeight(component.getOverrideMass()) );
|
this.setCM( this.getCM().setWeight(component.getOverrideMass()) );
|
||||||
}
|
}
|
||||||
if (component.isCGOverridden()) {
|
if (component.isSubcomponentsOverriddenCG() && component.isCGOverridden()) {
|
||||||
this.setCM( this.getCM().setX(compZero.x + component.getOverrideCGX()));
|
this.setCM( this.getCM().setX(compZero.x + component.getOverrideCGX()));
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
|
|||||||
@ -99,15 +99,17 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
// Override mass/CG/CD
|
// Override mass/CG/CD
|
||||||
protected double overrideMass = 0;
|
protected double overrideMass = 0;
|
||||||
protected boolean massOverridden = false;
|
protected boolean massOverridden = false;
|
||||||
|
private boolean overrideSubcomponentsMass = false;
|
||||||
|
|
||||||
private double overrideCGX = 0;
|
private double overrideCGX = 0;
|
||||||
private boolean cgOverridden = false;
|
private boolean cgOverridden = false;
|
||||||
|
private boolean overrideSubcomponentsCG = false;
|
||||||
|
|
||||||
private double overrideCD = 0;
|
private double overrideCD = 0;
|
||||||
private boolean cdOverridden = false;
|
private boolean cdOverridden = false;
|
||||||
|
private boolean overrideSubcomponentsCD = false;
|
||||||
|
|
||||||
private boolean cdOverriddenByAncestor = false;
|
private boolean cdOverriddenByAncestor = false;
|
||||||
private boolean overrideSubcomponents = false;
|
|
||||||
|
|
||||||
|
|
||||||
// User-given name of the component
|
// User-given name of the component
|
||||||
@ -707,7 +709,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
this.overrideCD = x;
|
this.overrideCD = x;
|
||||||
|
|
||||||
if (isCDOverridden()) {
|
if (isCDOverridden()) {
|
||||||
if (isSubcomponentsOverridden()) {
|
if (isSubcomponentsOverriddenCD()) {
|
||||||
overrideSubcomponentsCD(true);
|
overrideSubcomponentsCD(true);
|
||||||
}
|
}
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||||
@ -749,7 +751,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
// tree. If we are overriding our own CD, we need to override all
|
// tree. If we are overriding our own CD, we need to override all
|
||||||
// our descendants. If we are not overriding our own CD, we are
|
// our descendants. If we are not overriding our own CD, we are
|
||||||
// also not overriding our descendants
|
// also not overriding our descendants
|
||||||
if (isSubcomponentsOverridden()) {
|
if (isSubcomponentsOverriddenCD()) {
|
||||||
overrideSubcomponentsCD(o);
|
overrideSubcomponentsCD(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -777,28 +779,107 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
*
|
*
|
||||||
* @return whether the current mass, CG, and/or CD override overrides subcomponents as well.
|
* @return whether the current mass, CG, and/or CD override overrides subcomponents as well.
|
||||||
*/
|
*/
|
||||||
public boolean isSubcomponentsOverridden() {
|
public boolean isSubcomponentsOverriddenMass() {
|
||||||
mutex.verify();
|
mutex.verify();
|
||||||
return overrideSubcomponents;
|
return overrideSubcomponentsMass;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: delete no compatibility is needed anymore with OR 15.03
|
||||||
|
public void setSubcomponentsOverridden(boolean override) {
|
||||||
|
setSubcomponentsOverriddenMass(override);
|
||||||
|
setSubcomponentsOverriddenCG(override);
|
||||||
|
setSubcomponentsOverriddenCD(override);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set whether the mass and/or CG override overrides all subcomponent values
|
* Set whether the mass and/or CG override overrides all subcomponent values
|
||||||
* as well. See {@link #isSubcomponentsOverridden()} for details.
|
* as well. See {@link #isSubcomponentsOverriddenMass()} for details.
|
||||||
*
|
*
|
||||||
* @param override whether the mass and/or CG override overrides all subcomponent.
|
* @param override whether the mass and/or CG override overrides all subcomponent.
|
||||||
*/
|
*/
|
||||||
public void setSubcomponentsOverridden(boolean override) {
|
public void setSubcomponentsOverriddenMass(boolean override) {
|
||||||
for (RocketComponent listener : configListeners) {
|
for (RocketComponent listener : configListeners) {
|
||||||
listener.setSubcomponentsOverridden(override);
|
listener.setSubcomponentsOverriddenMass(override);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overrideSubcomponents == override) {
|
if (overrideSubcomponentsMass == override) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
checkState();
|
checkState();
|
||||||
overrideSubcomponents = override;
|
overrideSubcomponentsMass = override;
|
||||||
|
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether the CG override overrides all subcomponent values
|
||||||
|
* as well. The default implementation is a normal getter/setter implementation,
|
||||||
|
* however, subclasses are allowed to override this behavior if some subclass
|
||||||
|
* always or never overrides subcomponents. In this case the subclass should
|
||||||
|
* also override {@link #isOverrideSubcomponentsEnabled()} to return
|
||||||
|
* <code>false</code>.
|
||||||
|
*
|
||||||
|
* @return whether the current CG override overrides subcomponents as well.
|
||||||
|
*/
|
||||||
|
public boolean isSubcomponentsOverriddenCG() {
|
||||||
|
mutex.verify();
|
||||||
|
return overrideSubcomponentsCG;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether the mass and/or CG override overrides all subcomponent values
|
||||||
|
* as well. See {@link #isSubcomponentsOverriddenCG()} for details.
|
||||||
|
*
|
||||||
|
* @param override whether the mass and/or CG override overrides all subcomponent.
|
||||||
|
*/
|
||||||
|
public void setSubcomponentsOverriddenCG(boolean override) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setSubcomponentsOverriddenCG(override);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (overrideSubcomponentsCG == override) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
checkState();
|
||||||
|
overrideSubcomponentsCG = override;
|
||||||
|
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether the CD override overrides all subcomponent values
|
||||||
|
* as well. The default implementation is a normal getter/setter implementation,
|
||||||
|
* however, subclasses are allowed to override this behavior if some subclass
|
||||||
|
* always or never overrides subcomponents. In this case the subclass should
|
||||||
|
* also override {@link #isOverrideSubcomponentsEnabled()} to return
|
||||||
|
* <code>false</code>.
|
||||||
|
*
|
||||||
|
* @return whether the current CD override overrides subcomponents as well.
|
||||||
|
*/
|
||||||
|
public boolean isSubcomponentsOverriddenCD() {
|
||||||
|
mutex.verify();
|
||||||
|
return overrideSubcomponentsCD;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether the CD override overrides all subcomponent values
|
||||||
|
* as well. See {@link #isSubcomponentsOverriddenCD()} for details.
|
||||||
|
*
|
||||||
|
* @param override whether the CD override overrides all subcomponent.
|
||||||
|
*/
|
||||||
|
public void setSubcomponentsOverriddenCD(boolean override) {
|
||||||
|
for (RocketComponent listener : configListeners) {
|
||||||
|
listener.setSubcomponentsOverriddenCD(override);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (overrideSubcomponentsCD == override) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
checkState();
|
||||||
|
overrideSubcomponentsCD = override;
|
||||||
|
|
||||||
overrideSubcomponentsCD(override);
|
overrideSubcomponentsCD(override);
|
||||||
|
|
||||||
@ -815,7 +896,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
* If we are setting the override false, descend the component tree marking every
|
* If we are setting the override false, descend the component tree marking every
|
||||||
* component as not overridden by ancestor.
|
* component as not overridden by ancestor.
|
||||||
* If in the course of descending the tree we encounter a descendant whose direct
|
* If in the course of descending the tree we encounter a descendant whose direct
|
||||||
* CD override and overridesubcomponents flags are both true, descend from there
|
* CD override and overrideSubcomponentsCD flags are both true, descend from there
|
||||||
* setting the ancestoroverride from that component
|
* setting the ancestoroverride from that component
|
||||||
*
|
*
|
||||||
* @param override whether setting or clearing overrides
|
* @param override whether setting or clearing overrides
|
||||||
@ -827,7 +908,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
|
|
||||||
c.cdOverriddenByAncestor = override;
|
c.cdOverriddenByAncestor = override;
|
||||||
|
|
||||||
if (!override && c.isCDOverridden() && c.isSubcomponentsOverridden()) {
|
if (!override && c.isCDOverridden() && c.isSubcomponentsOverriddenCD()) {
|
||||||
c.overrideSubcomponentsCD(true);
|
c.overrideSubcomponentsCD(true);
|
||||||
} else {
|
} else {
|
||||||
c.overrideSubcomponentsCD(override);
|
c.overrideSubcomponentsCD(override);
|
||||||
@ -2334,7 +2415,9 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
|||||||
this.overrideCGX = src.overrideCGX;
|
this.overrideCGX = src.overrideCGX;
|
||||||
this.cgOverridden = src.cgOverridden;
|
this.cgOverridden = src.cgOverridden;
|
||||||
this.cdOverriddenByAncestor = src.cdOverriddenByAncestor;
|
this.cdOverriddenByAncestor = src.cdOverriddenByAncestor;
|
||||||
this.overrideSubcomponents = src.overrideSubcomponents;
|
this.overrideSubcomponentsMass = src.overrideSubcomponentsMass;
|
||||||
|
this.overrideSubcomponentsCG = src.overrideSubcomponentsCG;
|
||||||
|
this.overrideSubcomponentsCD = src.overrideSubcomponentsCD;
|
||||||
this.name = src.name;
|
this.name = src.name;
|
||||||
this.comment = src.comment;
|
this.comment = src.comment;
|
||||||
this.id = src.id;
|
this.id = src.id;
|
||||||
|
|||||||
@ -345,7 +345,8 @@ public class TestRockets {
|
|||||||
c.setMassOverridden(rnd.nextBoolean());
|
c.setMassOverridden(rnd.nextBoolean());
|
||||||
c.setOverrideCGX(rnd(0.2));
|
c.setOverrideCGX(rnd(0.2));
|
||||||
c.setOverrideMass(rnd(0.05));
|
c.setOverrideMass(rnd(0.05));
|
||||||
c.setSubcomponentsOverridden(rnd.nextBoolean());
|
c.setSubcomponentsOverriddenMass(rnd.nextBoolean());
|
||||||
|
c.setSubcomponentsOverriddenCG(rnd.nextBoolean());
|
||||||
|
|
||||||
if (c.isMassive()) {
|
if (c.isMassive()) {
|
||||||
// Only massive components are drawn
|
// Only massive components are drawn
|
||||||
|
|||||||
@ -81,7 +81,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
// if we use a mass override, setting to same mass, we should get same result
|
// if we use a mass override, setting to same mass, we should get same result
|
||||||
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
||||||
|
|
||||||
sustainer.setSubcomponentsOverridden(true);
|
sustainer.setSubcomponentsOverriddenMass(true);
|
||||||
sustainer.setMassOverridden(true);
|
sustainer.setMassOverridden(true);
|
||||||
sustainer.setOverrideMass(actualRocketDryMass);
|
sustainer.setOverrideMass(actualRocketDryMass);
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
assertEquals(expCMx, actualRocketDryCM.x, EPSILON);
|
assertEquals(expCMx, actualRocketDryCM.x, EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
boosterStage.setSubcomponentsOverridden(true);
|
boosterStage.setSubcomponentsOverriddenCG(true);
|
||||||
boosterStage.setCGOverridden(true);
|
boosterStage.setCGOverridden(true);
|
||||||
boosterStage.setOverrideCGX(0.0);
|
boosterStage.setOverrideCGX(0.0);
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
assertEquals(0.05, actualRocketDryCM.x, EPSILON);
|
assertEquals(0.05, actualRocketDryCM.x, EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
sustainerStage.setSubcomponentsOverridden(true);
|
sustainerStage.setSubcomponentsOverriddenMass(true);
|
||||||
sustainerStage.setMassOverridden(true);
|
sustainerStage.setMassOverridden(true);
|
||||||
sustainerStage.setOverrideMass(0.001); // something small, but not zero
|
sustainerStage.setOverrideMass(0.001); // something small, but not zero
|
||||||
|
|
||||||
@ -302,7 +302,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
assertEquals(0.10, actualStructure.cm.x, EPSILON);
|
assertEquals(0.10, actualStructure.cm.x, EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
boosterStage.setSubcomponentsOverridden(true);
|
boosterStage.setSubcomponentsOverriddenMass(true);
|
||||||
boosterStage.setMassOverridden(true);
|
boosterStage.setMassOverridden(true);
|
||||||
boosterStage.setOverrideMass(0.001); // something small, but not zero
|
boosterStage.setOverrideMass(0.001); // something small, but not zero
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
assertEquals(expCMx, actualRocketDryCM.x, EPSILON);
|
assertEquals(expCMx, actualRocketDryCM.x, EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
boosterBody.setSubcomponentsOverridden(false);
|
boosterBody.setSubcomponentsOverriddenCG(false);
|
||||||
boosterBody.setCGOverridden(true);
|
boosterBody.setCGOverridden(true);
|
||||||
boosterBody.setOverrideCGX(0.0);
|
boosterBody.setOverrideCGX(0.0);
|
||||||
|
|
||||||
@ -395,7 +395,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
assertEquals(expCMx, actualRocketDryCM.x, EPSILON);
|
assertEquals(expCMx, actualRocketDryCM.x, EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
boosterBody.setSubcomponentsOverridden(false);
|
boosterBody.setSubcomponentsOverriddenMass(false);
|
||||||
boosterBody.setMassOverridden(true);
|
boosterBody.setMassOverridden(true);
|
||||||
boosterBody.setOverrideMass(0.001);
|
boosterBody.setOverrideMass(0.001);
|
||||||
|
|
||||||
@ -409,7 +409,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
assertEquals(0.06976699, actualRocketDryCM.x, EPSILON);
|
assertEquals(0.06976699, actualRocketDryCM.x, EPSILON);
|
||||||
}
|
}
|
||||||
|
|
||||||
boosterBody.setSubcomponentsOverridden(true); // change. Also, this body lacks subcomponents.
|
boosterBody.setSubcomponentsOverriddenMass(true); // change. Also, this body lacks subcomponents.
|
||||||
boosterBody.setMassOverridden(true); // repeat
|
boosterBody.setMassOverridden(true); // repeat
|
||||||
boosterBody.setOverrideMass(0.001); // repeat
|
boosterBody.setOverrideMass(0.001); // repeat
|
||||||
|
|
||||||
@ -973,9 +973,10 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
final AxialStage coreStage = (AxialStage) rocket.getChild(1);
|
final AxialStage coreStage = (AxialStage) rocket.getChild(1);
|
||||||
final ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
|
final ParallelStage boosters = (ParallelStage) coreStage.getChild(0).getChild(0);
|
||||||
final double overrideMass = 0.5;
|
final double overrideMass = 0.5;
|
||||||
boosters.setSubcomponentsOverridden(true);
|
boosters.setSubcomponentsOverriddenMass(true);
|
||||||
boosters.setMassOverridden(true);
|
boosters.setMassOverridden(true);
|
||||||
boosters.setOverrideMass(overrideMass);
|
boosters.setOverrideMass(overrideMass);
|
||||||
|
boosters.setSubcomponentsOverriddenCG(true);
|
||||||
boosters.setCGOverridden(true);
|
boosters.setCGOverridden(true);
|
||||||
boosters.setOverrideCGX(6.0);
|
boosters.setOverrideCGX(6.0);
|
||||||
|
|
||||||
@ -1140,7 +1141,7 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
fins.setName("podFins");
|
fins.setName("podFins");
|
||||||
fins.setThickness(0.01);
|
fins.setThickness(0.01);
|
||||||
fins.setMassOverridden(true); fins.setOverrideMass(0.02835);
|
fins.setMassOverridden(true); fins.setOverrideMass(0.02835);
|
||||||
fins.setSubcomponentsOverridden(false);
|
fins.setSubcomponentsOverriddenMass(false);
|
||||||
fins.setAxialOffset(-0.01); fins.setAxialMethod(AxialMethod.BOTTOM);
|
fins.setAxialOffset(-0.01); fins.setAxialMethod(AxialMethod.BOTTOM);
|
||||||
podBody.addChild(fins);
|
podBody.addChild(fins);
|
||||||
|
|
||||||
@ -1207,12 +1208,12 @@ public class MassCalculatorTest extends BaseTestCase {
|
|||||||
|
|
||||||
// if we use a mass override, setting to same mass, we should get same result
|
// if we use a mass override, setting to same mass, we should get same result
|
||||||
AxialStage sustainerRef = (AxialStage) rocketRef.getChild(0);
|
AxialStage sustainerRef = (AxialStage) rocketRef.getChild(0);
|
||||||
sustainerRef.setSubcomponentsOverridden(true);
|
sustainerRef.setSubcomponentsOverriddenMass(true);
|
||||||
sustainerRef.setMassOverridden(true);
|
sustainerRef.setMassOverridden(true);
|
||||||
sustainerRef.setOverrideMass(rocketDryMassRef);
|
sustainerRef.setOverrideMass(rocketDryMassRef);
|
||||||
|
|
||||||
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
||||||
sustainer.setSubcomponentsOverridden(true);
|
sustainer.setSubcomponentsOverriddenMass(true);
|
||||||
sustainer.setMassOverridden(true);
|
sustainer.setMassOverridden(true);
|
||||||
sustainer.setOverrideMass(rocketDryMass);
|
sustainer.setOverrideMass(rocketDryMass);
|
||||||
|
|
||||||
|
|||||||
@ -54,7 +54,8 @@ public class FreeformFinSetTest extends BaseTestCase {
|
|||||||
sourceSet.setMaterial(Material.newMaterial(Type.BULK, "test-material", 0.1, true));
|
sourceSet.setMaterial(Material.newMaterial(Type.BULK, "test-material", 0.1, true));
|
||||||
sourceSet.setOverrideCGX(0.012);
|
sourceSet.setOverrideCGX(0.012);
|
||||||
sourceSet.setOverrideMass(0.0123);
|
sourceSet.setOverrideMass(0.0123);
|
||||||
sourceSet.setSubcomponentsOverridden(true);
|
sourceSet.setSubcomponentsOverriddenMass(true);
|
||||||
|
sourceSet.setSubcomponentsOverriddenCG(true);
|
||||||
sourceSet.setAxialMethod(AxialMethod.ABSOLUTE);
|
sourceSet.setAxialMethod(AxialMethod.ABSOLUTE);
|
||||||
sourceSet.setAxialOffset(0.1);
|
sourceSet.setAxialOffset(0.1);
|
||||||
sourceSet.setTabHeight(0.01);
|
sourceSet.setTabHeight(0.01);
|
||||||
@ -196,7 +197,8 @@ public class FreeformFinSetTest extends BaseTestCase {
|
|||||||
}
|
}
|
||||||
assertEquals(0.012, finSet.getOverrideCGX(), EPSILON);
|
assertEquals(0.012, finSet.getOverrideCGX(), EPSILON);
|
||||||
assertEquals(0.0123, finSet.getOverrideMass(), EPSILON);
|
assertEquals(0.0123, finSet.getOverrideMass(), EPSILON);
|
||||||
assertTrue(finSet.isSubcomponentsOverridden());
|
assertTrue(finSet.isSubcomponentsOverriddenMass());
|
||||||
|
assertTrue(finSet.isSubcomponentsOverriddenCG());
|
||||||
|
|
||||||
assertEquals(AxialMethod.ABSOLUTE, finSet.getAxialMethod());
|
assertEquals(AxialMethod.ABSOLUTE, finSet.getAxialMethod());
|
||||||
assertEquals(0.1, finSet.getAxialOffset(), EPSILON);
|
assertEquals(0.1, finSet.getAxialOffset(), EPSILON);
|
||||||
@ -232,7 +234,8 @@ public class FreeformFinSetTest extends BaseTestCase {
|
|||||||
}
|
}
|
||||||
assertEquals(0.012, finSet.getOverrideCGX(), EPSILON);
|
assertEquals(0.012, finSet.getOverrideCGX(), EPSILON);
|
||||||
assertEquals(0.0123, finSet.getOverrideMass(), EPSILON);
|
assertEquals(0.0123, finSet.getOverrideMass(), EPSILON);
|
||||||
assertTrue(finSet.isSubcomponentsOverridden());
|
assertTrue(finSet.isSubcomponentsOverriddenMass());
|
||||||
|
assertTrue(finSet.isSubcomponentsOverriddenCG());
|
||||||
|
|
||||||
assertEquals(AxialMethod.ABSOLUTE, finSet.getAxialMethod());
|
assertEquals(AxialMethod.ABSOLUTE, finSet.getAxialMethod());
|
||||||
assertEquals(0.1, finSet.getAxialOffset(), EPSILON);
|
assertEquals(0.1, finSet.getAxialOffset(), EPSILON);
|
||||||
|
|||||||
@ -65,19 +65,19 @@ public class OverrideTest extends BaseTestCase {
|
|||||||
// We start by just checking the override flags
|
// We start by just checking the override flags
|
||||||
// Initially no overrides
|
// Initially no overrides
|
||||||
assertFalse(sustainer.isCDOverridden());
|
assertFalse(sustainer.isCDOverridden());
|
||||||
assertFalse(sustainer.isSubcomponentsOverridden());
|
assertFalse(sustainer.isSubcomponentsOverriddenCD());
|
||||||
assertFalse(sustainer.isCDOverriddenByAncestor());
|
assertFalse(sustainer.isCDOverriddenByAncestor());
|
||||||
|
|
||||||
assertFalse(bodytube.isCDOverridden());
|
assertFalse(bodytube.isCDOverridden());
|
||||||
assertFalse(bodytube.isSubcomponentsOverridden());
|
assertFalse(bodytube.isSubcomponentsOverriddenCD());
|
||||||
assertFalse(bodytube.isCDOverriddenByAncestor());
|
assertFalse(bodytube.isCDOverriddenByAncestor());
|
||||||
|
|
||||||
assertFalse(finset.isCDOverridden());
|
assertFalse(finset.isCDOverridden());
|
||||||
assertFalse(finset.isSubcomponentsOverridden());
|
assertFalse(finset.isSubcomponentsOverriddenCD());
|
||||||
assertFalse(finset.isCDOverriddenByAncestor());
|
assertFalse(finset.isCDOverriddenByAncestor());
|
||||||
|
|
||||||
// Override sustainer CD and subcomponents
|
// Override sustainer CD and subcomponents
|
||||||
sustainer.setSubcomponentsOverridden(true);
|
sustainer.setSubcomponentsOverriddenCD(true);
|
||||||
sustainer.setCDOverridden(true);
|
sustainer.setCDOverridden(true);
|
||||||
sustainer.setOverrideCD(0.5);
|
sustainer.setOverrideCD(0.5);
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ public class OverrideTest extends BaseTestCase {
|
|||||||
// Set body tube to override subcomponents, override its CD; it's still
|
// Set body tube to override subcomponents, override its CD; it's still
|
||||||
// overridden by ancestor
|
// overridden by ancestor
|
||||||
bodytube.setCDOverridden(true);
|
bodytube.setCDOverridden(true);
|
||||||
bodytube.setSubcomponentsOverridden(true);
|
bodytube.setSubcomponentsOverriddenCD(true);
|
||||||
bodytube.setOverrideCD(0.25);
|
bodytube.setOverrideCD(0.25);
|
||||||
|
|
||||||
assertTrue(bodytube.isCDOverriddenByAncestor());
|
assertTrue(bodytube.isCDOverriddenByAncestor());
|
||||||
@ -103,7 +103,7 @@ public class OverrideTest extends BaseTestCase {
|
|||||||
assertEquals(sustainer.getOverrideCD(), forces.getCD(), MathUtil.EPSILON);
|
assertEquals(sustainer.getOverrideCD(), forces.getCD(), MathUtil.EPSILON);
|
||||||
|
|
||||||
// Turn off sustainer subcomponents override; body tube and nose cone aren't overridden by ancestor but fin set is
|
// Turn off sustainer subcomponents override; body tube and nose cone aren't overridden by ancestor but fin set is
|
||||||
sustainer.setSubcomponentsOverridden(false);
|
sustainer.setSubcomponentsOverriddenCD(false);
|
||||||
|
|
||||||
// CD of rocket should be overridden CD of sustainer plus body tube plus calculated CD of nose cone
|
// CD of rocket should be overridden CD of sustainer plus body tube plus calculated CD of nose cone
|
||||||
Map<RocketComponent, AerodynamicForces> forceMap = calc.getForceAnalysis(configuration, conditions, warnings);
|
Map<RocketComponent, AerodynamicForces> forceMap = calc.getForceAnalysis(configuration, conditions, warnings);
|
||||||
|
|||||||
@ -4,6 +4,7 @@ package net.sf.openrocket.gui.configdialog;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
|
import java.awt.Font;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -236,7 +237,7 @@ public class RocketComponentConfig extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (RocketComponent c = component.getParent(); c != null; c = c.getParent()) {
|
for (RocketComponent c = component.getParent(); c != null; c = c.getParent()) {
|
||||||
if (c.isMassOverridden() && c.isSubcomponentsOverridden()) {
|
if (c.isMassOverridden() && c.isSubcomponentsOverriddenMass()) {
|
||||||
overridetext = trans.get("RocketCompCfg.lbl.overriddenby") + " " + c.getName() + ")";
|
overridetext = trans.get("RocketCompCfg.lbl.overriddenby") + " " + c.getName() + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -359,15 +360,29 @@ public class RocketComponentConfig extends JPanel {
|
|||||||
BasicSlider bs;
|
BasicSlider bs;
|
||||||
|
|
||||||
// OVERRIDE MASS ----------------------------------
|
// OVERRIDE MASS ----------------------------------
|
||||||
|
JPanel checkboxes = new JPanel(new MigLayout("inset 0"));
|
||||||
bm = new BooleanModel(component, "MassOverridden");
|
bm = new BooleanModel(component, "MassOverridden");
|
||||||
check = new JCheckBox(bm);
|
check = new JCheckBox(bm);
|
||||||
//// Override mass:
|
//// Override mass:
|
||||||
check.setText(trans.get("RocketCompCfg.checkbox.Overridemass"));
|
check.setText(trans.get("RocketCompCfg.checkbox.Overridemass"));
|
||||||
check.setToolTipText(trans.get("RocketCompCfg.checkbox.Overridemass.ttip"));
|
check.setToolTipText(trans.get("RocketCompCfg.checkbox.Overridemass.ttip"));
|
||||||
panel.add(check, "growx 1, gapright 20lp");
|
checkboxes.add(check, "wrap");
|
||||||
order.add(check);
|
order.add(check);
|
||||||
|
|
||||||
|
////// Override subcomponents
|
||||||
|
BooleanModel bmSubcomp = new BooleanModel(component, "SubcomponentsOverriddenMass");
|
||||||
|
check = new JCheckBox(bmSubcomp);
|
||||||
|
check.setText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents"));
|
||||||
|
Font smallFont = check.getFont();
|
||||||
|
smallFont = smallFont.deriveFont(smallFont.getSize2D() - 1);
|
||||||
|
check.setFont(smallFont);
|
||||||
|
check.setToolTipText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents.Mass.ttip"));
|
||||||
|
bm.addEnableComponent(check, true);
|
||||||
|
checkboxes.add(check, "gapleft 25lp, wrap");
|
||||||
|
order.add(check);
|
||||||
|
|
||||||
|
panel.add(checkboxes, "growx 1, gapright 20lp");
|
||||||
|
|
||||||
DoubleModel m = new DoubleModel(component, "OverrideMass", UnitGroup.UNITS_MASS, 0);
|
DoubleModel m = new DoubleModel(component, "OverrideMass", UnitGroup.UNITS_MASS, 0);
|
||||||
|
|
||||||
JSpinner spin = new JSpinner(m.getSpinnerModel());
|
JSpinner spin = new JSpinner(m.getSpinnerModel());
|
||||||
@ -387,15 +402,27 @@ public class RocketComponentConfig extends JPanel {
|
|||||||
// END OVERRIDE MASS ----------------------------------
|
// END OVERRIDE MASS ----------------------------------
|
||||||
|
|
||||||
// OVERRIDE CG ----------------------------------
|
// OVERRIDE CG ----------------------------------
|
||||||
|
checkboxes = new JPanel(new MigLayout("inset 0"));
|
||||||
bm = new BooleanModel(component, "CGOverridden");
|
bm = new BooleanModel(component, "CGOverridden");
|
||||||
check = new JCheckBox(bm);
|
check = new JCheckBox(bm);
|
||||||
//// Override center of gravity:"
|
//// Override center of gravity:"
|
||||||
check.setText(trans.get("RocketCompCfg.checkbox.Overridecenterofgrav"));
|
check.setText(trans.get("RocketCompCfg.checkbox.Overridecenterofgrav"));
|
||||||
check.setToolTipText(trans.get("RocketCompCfg.checkbox.Overridecenterofgrav.ttip"));
|
check.setToolTipText(trans.get("RocketCompCfg.checkbox.Overridecenterofgrav.ttip"));
|
||||||
panel.add(check, "growx 1, gapright 20lp");
|
checkboxes.add(check, "wrap");
|
||||||
order.add(check);
|
order.add(check);
|
||||||
|
|
||||||
|
////// Override subcomponents
|
||||||
|
bmSubcomp = new BooleanModel(component, "SubcomponentsOverriddenCG");
|
||||||
|
check = new JCheckBox(bmSubcomp);
|
||||||
|
check.setText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents"));
|
||||||
|
check.setFont(smallFont);
|
||||||
|
check.setToolTipText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents.CG.ttip"));
|
||||||
|
bm.addEnableComponent(check, true);
|
||||||
|
checkboxes.add(check, "gapleft 25lp, wrap");
|
||||||
|
order.add(check);
|
||||||
|
|
||||||
|
panel.add(checkboxes, "growx 1, gapright 20lp");
|
||||||
|
|
||||||
m = new DoubleModel(component, "OverrideCGX", UnitGroup.UNITS_LENGTH, 0);
|
m = new DoubleModel(component, "OverrideCGX", UnitGroup.UNITS_LENGTH, 0);
|
||||||
// Calculate suitable length for slider
|
// Calculate suitable length for slider
|
||||||
DoubleModel length;
|
DoubleModel length;
|
||||||
@ -442,45 +469,46 @@ public class RocketComponentConfig extends JPanel {
|
|||||||
bm.addEnableComponent(bs);
|
bm.addEnableComponent(bs);
|
||||||
panel.add(bs, "growx 5, w 100lp, wrap");
|
panel.add(bs, "growx 5, w 100lp, wrap");
|
||||||
|
|
||||||
|
|
||||||
// END OVERRIDE CG ---------------------------------------------------
|
// END OVERRIDE CG ---------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// BEGIN OVERRIDE CD ------------------------------------------
|
// BEGIN OVERRIDE CD ------------------------------------------
|
||||||
|
checkboxes = new JPanel(new MigLayout("inset 0"));
|
||||||
bm = new BooleanModel(component, "CDOverridden");
|
bm = new BooleanModel(component, "CDOverridden");
|
||||||
check = new JCheckBox(bm);
|
check = new JCheckBox(bm);
|
||||||
//// Override coefficient of drag:
|
//// Override coefficient of drag:
|
||||||
check.setText(trans.get("RocketCompCfg.checkbox.SetDragCoeff"));
|
check.setText(trans.get("RocketCompCfg.checkbox.SetDragCoeff"));
|
||||||
check.setToolTipText(trans.get("RocketCompCfg.checkbox.SetDragCoeff.ttip"));
|
check.setToolTipText(trans.get("RocketCompCfg.checkbox.SetDragCoeff.ttip"));
|
||||||
panel.add(check, "growx 1, gapright 20lp");
|
checkboxes.add(check, "wrap");
|
||||||
order.add(check);
|
order.add(check);
|
||||||
|
|
||||||
|
////// Override subcomponents
|
||||||
|
bmSubcomp = new BooleanModel(component, "SubcomponentsOverriddenCD");
|
||||||
|
check = new JCheckBox(bmSubcomp);
|
||||||
|
check.setText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents"));
|
||||||
|
check.setFont(smallFont);
|
||||||
|
check.setToolTipText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents.CD.ttip"));
|
||||||
|
bm.addEnableComponent(check, true);
|
||||||
|
checkboxes.add(check, "gapleft 25lp, wrap");
|
||||||
|
order.add(check);
|
||||||
|
|
||||||
|
panel.add(checkboxes, "growx 1, gapright 20lp");
|
||||||
|
|
||||||
m = new DoubleModel(component, "OverrideCD", UnitGroup.UNITS_COEFFICIENT, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
|
m = new DoubleModel(component, "OverrideCD", UnitGroup.UNITS_COEFFICIENT, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
|
||||||
spin = new JSpinner(m.getSpinnerModel());
|
spin = new JSpinner(m.getSpinnerModel());
|
||||||
|
|
||||||
spin.setEditor(new SpinnerEditor(spin));
|
spin.setEditor(new SpinnerEditor(spin));
|
||||||
bm.addEnableComponent(spin, true);
|
bm.addEnableComponent(spin, true);
|
||||||
panel.add(spin, "growx 1");
|
panel.add(spin, "top, growx 1");
|
||||||
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
|
order.add(((SpinnerEditor) spin.getEditor()).getTextField());
|
||||||
|
|
||||||
|
|
||||||
bs = new BasicSlider(m.getSliderModel(-1.0, 1.0));
|
bs = new BasicSlider(m.getSliderModel(-1.0, 1.0));
|
||||||
bm.addEnableComponent(bs);
|
bm.addEnableComponent(bs);
|
||||||
panel.add(bs, "skip, growx 5, w 100lp, wrap");
|
panel.add(bs, "top, skip, growx 5, w 100lp, wrap");
|
||||||
|
|
||||||
// END OVERRIDE CD --------------------------------------------------
|
// END OVERRIDE CD --------------------------------------------------
|
||||||
|
|
||||||
// BEGIN OVERRIDE SUBCOMPONENTS --------------------------------------------------
|
|
||||||
|
|
||||||
bm = new BooleanModel(component, "SubcomponentsOverridden");
|
|
||||||
check = new JCheckBox(bm);
|
|
||||||
//// Override mass, CG, and CD of all subcomponents
|
|
||||||
check.setText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents"));
|
|
||||||
check.setToolTipText(trans.get("RocketCompCfg.checkbox.OverrideSubcomponents.ttip"));
|
|
||||||
panel.add(check, "spanx, wrap 35lp");
|
|
||||||
|
|
||||||
// END OVERRIDE SUBCOMPONENTS --------------------------------------------------
|
|
||||||
|
|
||||||
// OVERRIDE MASS, CG DOESN'T INCLUDE MOTORS --------------------------------------------------
|
// OVERRIDE MASS, CG DOESN'T INCLUDE MOTORS --------------------------------------------------
|
||||||
panel.add(new StyledLabel(trans.get("RocketCompCfg.lbl.longB1") +
|
panel.add(new StyledLabel(trans.get("RocketCompCfg.lbl.longB1") +
|
||||||
//// The center of gravity is measured from the front end of the
|
//// The center of gravity is measured from the front end of the
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user