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.radius = Radial Distance | ||||
| RocketCompCfg.outside.angle = Angle | ||||
| RocketCompCfg.outside.count = Number of Boosters | ||||
| RocketCompCfg.outside.rotation = Rotation | ||||
| RocketCompCfg.outside.componentname = Name of parent component | ||||
| RocketCompCfg.tab.Figure = Figure | ||||
|  | ||||
| @ -32,10 +32,25 @@ public interface OutsideComponent { | ||||
| 	 */ | ||||
| 	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  | ||||
| 	 *  | ||||
| 	 * @return              Radial position in radians (m) | ||||
| 	 * @return Radial position in radians (m) | ||||
| 	 */ | ||||
| 	public double getRadialPosition(); | ||||
| 	 | ||||
|  | ||||
| @ -3,17 +3,25 @@ package net.sf.openrocket.rocketcomponent; | ||||
| import net.sf.openrocket.l10n.Translator; | ||||
| import net.sf.openrocket.startup.Application; | ||||
| 
 | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| 
 | ||||
| public class Stage extends ComponentAssembly implements FlightConfigurableComponent, OutsideComponent { | ||||
| 	 | ||||
| 	static final Translator trans = Application.getTranslator(); | ||||
| 	private static final Logger log = LoggerFactory.getLogger(Stage.class); | ||||
| 	 | ||||
| 	private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations; | ||||
| 	 | ||||
| 	private boolean outside = false; | ||||
| 	private double position_angular_rad = 0; | ||||
| 	private double position_radial_m = 0; | ||||
| 	private double angularPosition_rad = 0; | ||||
| 	private double radialPosition_m = 0; | ||||
| 	private double rotation_rad = 0; | ||||
| 	 | ||||
| 	private int count = 2; | ||||
| 	private double separationAngle = Math.PI; | ||||
| 	 | ||||
| 	 | ||||
| 	public Stage() { | ||||
| 		this.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration()); | ||||
| 	} | ||||
| @ -72,6 +80,26 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon | ||||
| 	@Override | ||||
| 	public void setOutside(final boolean _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) { | ||||
| 			fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); | ||||
| 		} | ||||
| @ -80,7 +108,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon | ||||
| 	@Override | ||||
| 	public double getAngularPosition() { | ||||
| 		if (this.outside) { | ||||
| 			return this.position_angular_rad; | ||||
| 			return this.angularPosition_rad; | ||||
| 		} else { | ||||
| 			return 0.; | ||||
| 		} | ||||
| @ -89,7 +117,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void setAngularPosition(final double angle_rad) { | ||||
| 		this.position_angular_rad = angle_rad; | ||||
| 		this.angularPosition_rad = angle_rad; | ||||
| 		if (this.outside) { | ||||
| 			fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); | ||||
| 		} | ||||
| @ -98,7 +126,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon | ||||
| 	@Override | ||||
| 	public double getRadialPosition() { | ||||
| 		if (this.outside) { | ||||
| 			return this.position_radial_m; | ||||
| 			return this.radialPosition_m; | ||||
| 		} else { | ||||
| 			return 0.; | ||||
| 		} | ||||
| @ -106,7 +134,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon | ||||
| 	 | ||||
| 	@Override | ||||
| 	public void setRadialPosition(final double radius) { | ||||
| 		this.position_radial_m = radius; | ||||
| 		this.radialPosition_m = radius; | ||||
| 		if (this.outside) { | ||||
| 			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.DoubleModel; | ||||
| 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.StyledLabel; | ||||
| import net.sf.openrocket.gui.components.UnitSelector; | ||||
| @ -106,6 +107,17 @@ public class StageConfig extends RocketComponentConfig { | ||||
| 		motherPanel.add( rotationUnitSelector, "growx 1, wrap"); | ||||
| 		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 | ||||
| 		JLabel positionLabel = new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto")); | ||||
| 		motherPanel.add( positionLabel); | ||||
| @ -136,18 +148,7 @@ public class StageConfig extends RocketComponentConfig { | ||||
| 		motherPanel.add( relToCombo , "growx, wrap"); | ||||
| 		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 | ||||
| 		JLabel positionPlusLabel = new JLabel(trans.get("LaunchLugCfg.lbl.plus")); | ||||
| 		motherPanel.add( positionPlusLabel ); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user