added gui and model elements for stage multiplicity
This commit is contained in:
parent
c5d47cf806
commit
8e268a9a25
@ -828,6 +828,7 @@ RocketCompCfg.tab.ParallelComment = Options for locating stages parallel to othe
|
|||||||
RocketCompCfg.outside.stage = Make this Stage Parallel
|
RocketCompCfg.outside.stage = Make this Stage Parallel
|
||||||
RocketCompCfg.outside.radius = Radial Distance
|
RocketCompCfg.outside.radius = Radial Distance
|
||||||
RocketCompCfg.outside.angle = Angle
|
RocketCompCfg.outside.angle = Angle
|
||||||
|
RocketCompCfg.outside.count = Number of Boosters
|
||||||
RocketCompCfg.outside.rotation = Rotation
|
RocketCompCfg.outside.rotation = Rotation
|
||||||
RocketCompCfg.outside.componentname = Name of parent component
|
RocketCompCfg.outside.componentname = Name of parent component
|
||||||
RocketCompCfg.tab.Figure = Figure
|
RocketCompCfg.tab.Figure = Figure
|
||||||
|
@ -32,10 +32,25 @@ public interface OutsideComponent {
|
|||||||
*/
|
*/
|
||||||
public void setAngularPosition(final double phi);
|
public void setAngularPosition(final double phi);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of instances this stage represents
|
||||||
|
*
|
||||||
|
* @return number of instances this stage currently represents
|
||||||
|
*/
|
||||||
|
public int getCount();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the multiplicity of this component
|
||||||
|
*
|
||||||
|
* @param number of instances this component should represent
|
||||||
|
*/
|
||||||
|
public void setCount(final int phi);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the position of this component in polar coordinates
|
* Get the position of this component in polar coordinates
|
||||||
*
|
*
|
||||||
* @return Radial position in radians (m)
|
* @return Radial position in radians (m)
|
||||||
*/
|
*/
|
||||||
public double getRadialPosition();
|
public double getRadialPosition();
|
||||||
|
|
||||||
|
@ -3,17 +3,25 @@ package net.sf.openrocket.rocketcomponent;
|
|||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class Stage extends ComponentAssembly implements FlightConfigurableComponent, OutsideComponent {
|
public class Stage extends ComponentAssembly implements FlightConfigurableComponent, OutsideComponent {
|
||||||
|
|
||||||
static final Translator trans = Application.getTranslator();
|
static final Translator trans = Application.getTranslator();
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(Stage.class);
|
||||||
|
|
||||||
private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations;
|
private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations;
|
||||||
|
|
||||||
private boolean outside = false;
|
private boolean outside = false;
|
||||||
private double position_angular_rad = 0;
|
private double angularPosition_rad = 0;
|
||||||
private double position_radial_m = 0;
|
private double radialPosition_m = 0;
|
||||||
private double rotation_rad = 0;
|
private double rotation_rad = 0;
|
||||||
|
|
||||||
|
private int count = 2;
|
||||||
|
private double separationAngle = Math.PI;
|
||||||
|
|
||||||
|
|
||||||
public Stage() {
|
public Stage() {
|
||||||
this.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
this.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
||||||
}
|
}
|
||||||
@ -72,6 +80,26 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
|||||||
@Override
|
@Override
|
||||||
public void setOutside(final boolean _outside) {
|
public void setOutside(final boolean _outside) {
|
||||||
this.outside = _outside;
|
this.outside = _outside;
|
||||||
|
if (Position.AFTER == this.relativePosition) {
|
||||||
|
this.relativePosition = Position.BOTTOM;
|
||||||
|
this.position = 0;
|
||||||
|
}
|
||||||
|
if (this.outside) {
|
||||||
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return this.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCount(final int _count) {
|
||||||
|
mutex.verify();
|
||||||
|
this.count = _count;
|
||||||
|
this.separationAngle = Math.PI * 2 / this.count;
|
||||||
|
|
||||||
if (this.outside) {
|
if (this.outside) {
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
@ -80,7 +108,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
|||||||
@Override
|
@Override
|
||||||
public double getAngularPosition() {
|
public double getAngularPosition() {
|
||||||
if (this.outside) {
|
if (this.outside) {
|
||||||
return this.position_angular_rad;
|
return this.angularPosition_rad;
|
||||||
} else {
|
} else {
|
||||||
return 0.;
|
return 0.;
|
||||||
}
|
}
|
||||||
@ -89,7 +117,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngularPosition(final double angle_rad) {
|
public void setAngularPosition(final double angle_rad) {
|
||||||
this.position_angular_rad = angle_rad;
|
this.angularPosition_rad = angle_rad;
|
||||||
if (this.outside) {
|
if (this.outside) {
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
@ -98,7 +126,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
|||||||
@Override
|
@Override
|
||||||
public double getRadialPosition() {
|
public double getRadialPosition() {
|
||||||
if (this.outside) {
|
if (this.outside) {
|
||||||
return this.position_radial_m;
|
return this.radialPosition_m;
|
||||||
} else {
|
} else {
|
||||||
return 0.;
|
return 0.;
|
||||||
}
|
}
|
||||||
@ -106,7 +134,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRadialPosition(final double radius) {
|
public void setRadialPosition(final double radius) {
|
||||||
this.position_radial_m = radius;
|
this.radialPosition_m = radius;
|
||||||
if (this.outside) {
|
if (this.outside) {
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import net.sf.openrocket.gui.SpinnerEditor;
|
|||||||
import net.sf.openrocket.gui.adaptors.BooleanModel;
|
import net.sf.openrocket.gui.adaptors.BooleanModel;
|
||||||
import net.sf.openrocket.gui.adaptors.DoubleModel;
|
import net.sf.openrocket.gui.adaptors.DoubleModel;
|
||||||
import net.sf.openrocket.gui.adaptors.EnumModel;
|
import net.sf.openrocket.gui.adaptors.EnumModel;
|
||||||
|
import net.sf.openrocket.gui.adaptors.IntegerModel;
|
||||||
import net.sf.openrocket.gui.components.BasicSlider;
|
import net.sf.openrocket.gui.components.BasicSlider;
|
||||||
import net.sf.openrocket.gui.components.StyledLabel;
|
import net.sf.openrocket.gui.components.StyledLabel;
|
||||||
import net.sf.openrocket.gui.components.UnitSelector;
|
import net.sf.openrocket.gui.components.UnitSelector;
|
||||||
@ -106,6 +107,17 @@ public class StageConfig extends RocketComponentConfig {
|
|||||||
motherPanel.add( rotationUnitSelector, "growx 1, wrap");
|
motherPanel.add( rotationUnitSelector, "growx 1, wrap");
|
||||||
parallelEnabledModel.addEnableComponent( rotationUnitSelector , true);
|
parallelEnabledModel.addEnableComponent( rotationUnitSelector , true);
|
||||||
|
|
||||||
|
// set multiplicity
|
||||||
|
JLabel countLabel = new JLabel(trans.get("RocketCompCfg.outside.count"));
|
||||||
|
motherPanel.add( countLabel, "align left");
|
||||||
|
parallelEnabledModel.addEnableComponent( countLabel, true);
|
||||||
|
|
||||||
|
IntegerModel countModel = new IntegerModel( stage, "Count", 1 );
|
||||||
|
JSpinner countSpinner = new JSpinner(countModel.getSpinnerModel());
|
||||||
|
countSpinner.setEditor(new SpinnerEditor(countSpinner));
|
||||||
|
motherPanel.add(countSpinner, "growx 1, wrap");
|
||||||
|
parallelEnabledModel.addEnableComponent( countSpinner, true);
|
||||||
|
|
||||||
// setPositions relative to parent component
|
// setPositions relative to parent component
|
||||||
JLabel positionLabel = new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto"));
|
JLabel positionLabel = new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto"));
|
||||||
motherPanel.add( positionLabel);
|
motherPanel.add( positionLabel);
|
||||||
@ -136,18 +148,7 @@ public class StageConfig extends RocketComponentConfig {
|
|||||||
motherPanel.add( relToCombo , "growx, wrap");
|
motherPanel.add( relToCombo , "growx, wrap");
|
||||||
parallelEnabledModel.addEnableComponent( relToCombo );
|
parallelEnabledModel.addEnableComponent( relToCombo );
|
||||||
|
|
||||||
// // EnumModel(ChangeSource source, String valueName, Enum<T>[] values) {
|
|
||||||
// ComboBoxModel<RocketComponent.Position> posRelModel = new EnumModel<RocketComponent.Position>(component, "RelativePosition",
|
|
||||||
// new RocketComponent.Position[] {
|
|
||||||
// RocketComponent.Position.TOP,
|
|
||||||
// RocketComponent.Position.MIDDLE,
|
|
||||||
// RocketComponent.Position.BOTTOM,
|
|
||||||
// RocketComponent.Position.ABSOLUTE
|
|
||||||
// });
|
|
||||||
// JComboBox<?> combo = new JComboBox<RocketComponent.Position>( posRelModel );
|
|
||||||
// motherPanel.add(combo, "spanx, growx, wrap");
|
|
||||||
// parallelEnabledModel.addEnableComponent( positionLabel);
|
|
||||||
//
|
|
||||||
// plus
|
// plus
|
||||||
JLabel positionPlusLabel = new JLabel(trans.get("LaunchLugCfg.lbl.plus"));
|
JLabel positionPlusLabel = new JLabel(trans.get("LaunchLugCfg.lbl.plus"));
|
||||||
motherPanel.add( positionPlusLabel );
|
motherPanel.add( positionPlusLabel );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user