ACTUAL bugfix commit: Stage Config dialog fixed.
This commit is contained in:
parent
2a855ed2a4
commit
8371876718
@ -827,10 +827,11 @@ RocketCompCfg.tab.Pod = Pod
|
||||
RocketCompCfg.tab.PodComment = Options for locating ExteriorComponents outside the Rocket
|
||||
RocketCompCfg.tab.Parallel = Parallel
|
||||
RocketCompCfg.tab.ParallelComment = Options for locating Stages parallel to other stages
|
||||
RocketCompCfg.parallel.inline = Make this Stage Parallel
|
||||
RocketCompCfg.parallel.radius = Radial Distance (meters)
|
||||
RocketCompCfg.parallel.angle = Angle (Radians)
|
||||
RocketCompCfg.parallel.rotation = Rotation (Radians)
|
||||
RocketCompCfg.outside.stage = Make this Stage Parallel
|
||||
RocketCompCfg.outside.pod = Move this Component Outside
|
||||
RocketCompCfg.outside.radius = Radial Distance (meters)
|
||||
RocketCompCfg.outside.angle = Angle (Radians)
|
||||
RocketCompCfg.outside.rotation = Rotation (Radians)
|
||||
RocketCompCfg.tab.Figure = Figure
|
||||
RocketCompCfg.tab.Figstyleopt = Figure style options
|
||||
RocketCompCfg.tab.Comment = Comment
|
||||
|
@ -18,7 +18,7 @@ import net.sf.openrocket.unit.UnitGroup;
|
||||
|
||||
public abstract class ExternalComponent extends RocketComponent implements OutsideComponent {
|
||||
|
||||
private boolean axial = true;
|
||||
private boolean outside = false;
|
||||
private double position_angular_rad = 0;
|
||||
private double position_radial_m = 0;
|
||||
private double rotation_rad = 0;
|
||||
@ -131,23 +131,23 @@ public abstract class ExternalComponent extends RocketComponent implements Outsi
|
||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getOutside() {
|
||||
return this.outside;
|
||||
}
|
||||
|
||||
public boolean isInline() {
|
||||
return this.axial;
|
||||
return !this.outside;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getParallel() {
|
||||
return !this.axial;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParallel(final boolean parallel) {
|
||||
this.axial = !parallel;
|
||||
public void setOutside(final boolean _outside) {
|
||||
this.outside = _outside;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAngularPosition() {
|
||||
if (axial) {
|
||||
if (outside) {
|
||||
return 0.;
|
||||
}
|
||||
return this.position_angular_rad;
|
||||
@ -160,7 +160,7 @@ public abstract class ExternalComponent extends RocketComponent implements Outsi
|
||||
|
||||
@Override
|
||||
public double getRadialPosition() {
|
||||
if (axial) {
|
||||
if (outside) {
|
||||
return 0.;
|
||||
}
|
||||
return this.position_radial_m;
|
||||
@ -173,7 +173,7 @@ public abstract class ExternalComponent extends RocketComponent implements Outsi
|
||||
|
||||
@Override
|
||||
public double getRotation() {
|
||||
if (axial) {
|
||||
if (outside) {
|
||||
return 0.;
|
||||
}
|
||||
return this.rotation_rad;
|
||||
|
@ -6,17 +6,17 @@ public interface OutsideComponent {
|
||||
/**
|
||||
* Indicates whether this component is located inside or outside of the rest of the rocket. (Specifically, inside or outside its parent.)
|
||||
*
|
||||
* @return <code> True </code> This component is aligned with its parent
|
||||
* <code> False </code> This component is offset from its parent -- like an external pod, or strap-on stage
|
||||
* @return <code> False </code> This component is aligned with its parent
|
||||
* <code> True </code> This component is offset from its parent -- like an external pod, or strap-on stage
|
||||
*/
|
||||
public boolean getParallel();
|
||||
public boolean getOutside();
|
||||
|
||||
/**
|
||||
* Change whether this component is located inside or outside of the rest of the rocket. (Specifically, inside or outside its parent.)
|
||||
*
|
||||
* @param inline True indicates that this component axially aligned with its parent. False indicates an off-center component.
|
||||
* @param inline False indicates that this component axially aligned with its parent. True indicates an off-center component.
|
||||
*/
|
||||
public void setParallel(final boolean inline);
|
||||
public void setOutside(final boolean inline);
|
||||
|
||||
/**
|
||||
* Get the position of this component in polar coordinates
|
||||
|
@ -9,7 +9,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
|
||||
private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations;
|
||||
|
||||
private boolean axial = true;
|
||||
private boolean outside = false;
|
||||
private double position_angular_rad = 0;
|
||||
private double position_radial_m = 0;
|
||||
private double rotation_rad = 0;
|
||||
@ -70,22 +70,23 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getParallel() {
|
||||
return !this.axial;
|
||||
public boolean getOutside() {
|
||||
return this.outside;
|
||||
}
|
||||
|
||||
public boolean getInline() {
|
||||
return this.axial;
|
||||
|
||||
public boolean isInline() {
|
||||
return !this.outside;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParallel(final boolean parallel) {
|
||||
this.axial = !parallel;
|
||||
public void setOutside(final boolean _outside) {
|
||||
this.outside = _outside;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAngularPosition() {
|
||||
if (axial) {
|
||||
if (this.isInline()) {
|
||||
return 0.;
|
||||
}
|
||||
return this.position_angular_rad;
|
||||
@ -98,7 +99,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
|
||||
@Override
|
||||
public double getRadialPosition() {
|
||||
if (axial) {
|
||||
if (this.isInline()) {
|
||||
return 0.;
|
||||
}
|
||||
return this.position_radial_m;
|
||||
@ -111,7 +112,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
|
||||
@Override
|
||||
public double getRotation() {
|
||||
if (axial) {
|
||||
if (this.isInline()) {
|
||||
return 0.;
|
||||
}
|
||||
return this.rotation_rad;
|
||||
|
@ -126,6 +126,9 @@ public class RocketComponentConfig extends JPanel {
|
||||
tabbedPane.addTab(trans.get("RocketCompCfg.tab.Comment"), null, commentTab(),
|
||||
trans.get("RocketCompCfg.tab.Specifyacomment"));
|
||||
|
||||
if( component instanceof ExternalComponent ){
|
||||
tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Pod"), null, podTab( (ExternalComponent) component ), trans.get("RocketCompCfg.tab.PodComment"), 2);
|
||||
}
|
||||
|
||||
|
||||
addButtons();
|
||||
@ -159,10 +162,6 @@ public class RocketComponentConfig extends JPanel {
|
||||
});
|
||||
buttonPanel.add(closeButton, "right, gap 30lp");
|
||||
|
||||
if( component instanceof ExternalComponent ){
|
||||
tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Pod"), null, podTab( (ExternalComponent) component ), trans.get("RocketCompCfg.tab.PodComment"), 2);
|
||||
}
|
||||
|
||||
updateFields();
|
||||
|
||||
this.add(buttonPanel, "spanx, growx");
|
||||
@ -288,10 +287,10 @@ public class RocketComponentConfig extends JPanel {
|
||||
private JPanel podTab( final ExternalComponent pod ){
|
||||
// enable parallel staging
|
||||
JPanel motherPanel = new JPanel( new MigLayout("fill"));
|
||||
podsEnabledModel = new BooleanModel( component, "Parallel");
|
||||
podsEnabledModel.setValue(false);
|
||||
podsEnabledModel = new BooleanModel( component, "Outside");
|
||||
podsEnabledModel.setValue( pod.getOutside());
|
||||
JCheckBox parallelEnabled = new JCheckBox( podsEnabledModel);
|
||||
parallelEnabled.setText(trans.get("RocketCompCfg.parallel.inline"));
|
||||
parallelEnabled.setText(trans.get("RocketCompCfg.outside.pod"));
|
||||
motherPanel.add(parallelEnabled, "wrap");
|
||||
|
||||
JPanel enabledPanel = new JPanel( new MigLayout("fill"));
|
||||
@ -300,25 +299,35 @@ public class RocketComponentConfig extends JPanel {
|
||||
enabledPanel.add(new JSeparator(SwingConstants.HORIZONTAL), "growx,wrap");
|
||||
|
||||
// set radial distance
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.radius")), "align left");
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.radius")), "align left");
|
||||
DoubleModel radiusModel = new DoubleModel( pod, "RadialPosition", 0.);
|
||||
radiusModel.setCurrentUnit( UnitGroup.UNITS_DISTANCE.getSIUnit() );
|
||||
JSpinner radiusSpinner = new JSpinner( radiusModel.getSpinnerModel());
|
||||
radiusSpinner.setEditor(new SpinnerEditor(radiusSpinner ));
|
||||
enabledPanel.add(radiusSpinner , "growx, wrap, align right");
|
||||
|
||||
// set angle around the primary stage
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.angle")), "align left");
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.angle")), "align left");
|
||||
DoubleModel angleModel = new DoubleModel( pod, "AngularPosition", 0., Math.PI*2);
|
||||
angleModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad") );
|
||||
JSpinner angleSpinner = new JSpinner(angleModel.getSpinnerModel());
|
||||
angleSpinner.setEditor(new SpinnerEditor(angleSpinner));
|
||||
enabledPanel.add(angleSpinner, "growx, wrap");
|
||||
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.rotation")), "align left");
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.rotation")), "align left");
|
||||
DoubleModel rotationModel = new DoubleModel( pod, "Rotation", 0.0, Math.PI*2);
|
||||
rotationModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad") );
|
||||
JSpinner rotationSpinner = new JSpinner(rotationModel.getSpinnerModel());
|
||||
rotationSpinner.setEditor(new SpinnerEditor(rotationSpinner));
|
||||
enabledPanel.add(rotationSpinner, "growx, wrap");
|
||||
|
||||
// TODO: add multiplicity
|
||||
// enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.rotation")), "align left");
|
||||
// DoubleModel rotationModel = new DoubleModel( pod, "Rotation", 0.0, Math.PI*2);
|
||||
// JSpinner rotationSpinner = new JSpinner(rotationModel.getSpinnerModel());
|
||||
// rotationSpinner.setEditor(new SpinnerEditor(rotationSpinner));
|
||||
// enabledPanel.add(rotationSpinner, "growx, wrap");
|
||||
//
|
||||
setDeepEnabled( enabledPanel, podsEnabledModel.getValue());
|
||||
parallelEnabled.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
|
@ -27,6 +27,7 @@ import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.unit.UnitGroup;
|
||||
|
||||
public class StageConfig extends RocketComponentConfig {
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
@ -53,10 +54,10 @@ public class StageConfig extends RocketComponentConfig {
|
||||
private JPanel parallelTab( final Stage stage ){
|
||||
// enable parallel staging
|
||||
JPanel motherPanel = new JPanel( new MigLayout("fill"));
|
||||
parallelEnabledModel = new BooleanModel( component, "Parallel");
|
||||
parallelEnabledModel.setValue( stage.getInline());
|
||||
parallelEnabledModel = new BooleanModel( component, "Outside");
|
||||
parallelEnabledModel.setValue( stage.getOutside());
|
||||
JCheckBox parallelEnabled = new JCheckBox( parallelEnabledModel);
|
||||
parallelEnabled.setText(trans.get("RocketCompCfg.parallel.inline"));
|
||||
parallelEnabled.setText(trans.get("RocketCompCfg.outside.stage"));
|
||||
motherPanel.add(parallelEnabled, "wrap");
|
||||
|
||||
JPanel enabledPanel = new JPanel( new MigLayout("fill"));
|
||||
@ -65,32 +66,36 @@ public class StageConfig extends RocketComponentConfig {
|
||||
enabledPanel.add(new JSeparator(SwingConstants.HORIZONTAL), "growx,wrap");
|
||||
|
||||
// set radial distance
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.radius")), "align left");
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.radius")), "align left");
|
||||
DoubleModel radiusModel = new DoubleModel( stage, "RadialPosition", 0.0);
|
||||
radiusModel.setCurrentUnit( UnitGroup.UNITS_DISTANCE.getSIUnit() );
|
||||
JSpinner radiusSpinner = new JSpinner( radiusModel.getSpinnerModel());
|
||||
radiusSpinner.setEditor(new SpinnerEditor(radiusSpinner ));
|
||||
enabledPanel.add(radiusSpinner , "growx, wrap, align right");
|
||||
|
||||
// set angle around the primary stage
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.angle")), "align left");
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.angle")), "align left");
|
||||
DoubleModel angleModel = new DoubleModel( stage, "AngularPosition", 0.0, Math.PI*2);
|
||||
angleModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad"));
|
||||
JSpinner angleSpinner = new JSpinner(angleModel.getSpinnerModel());
|
||||
angleSpinner.setEditor(new SpinnerEditor(angleSpinner));
|
||||
enabledPanel.add(angleSpinner, "growx, wrap");
|
||||
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.rotation")), "align left");
|
||||
enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.rotation")), "align left");
|
||||
DoubleModel rotationModel = new DoubleModel( stage, "Rotation", 0.0, Math.PI*2);
|
||||
rotationModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad") );
|
||||
JSpinner rotationSpinner = new JSpinner(rotationModel.getSpinnerModel());
|
||||
rotationSpinner.setEditor(new SpinnerEditor(rotationSpinner));
|
||||
enabledPanel.add(rotationSpinner, "growx, wrap");
|
||||
|
||||
setDeepEnabled( enabledPanel, parallelEnabledModel.getValue());
|
||||
|
||||
parallelEnabled.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
setDeepEnabled( parallelEnabledPanel, parallelEnabledModel.getValue());
|
||||
}
|
||||
});
|
||||
setDeepEnabled( parallelEnabledPanel, parallelEnabledModel.getValue());
|
||||
|
||||
motherPanel.add( enabledPanel , "growx, wrap");
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user