messy commit: refactored Stage => AxialStage, BoosterSet, PodSet
This commit is contained in:
parent
c1c882eb00
commit
c8a3d675d8
@ -670,6 +670,11 @@ compaddbuttons.Coupler = Coupler
|
||||
compaddbuttons.Centeringring = Centering\nring
|
||||
compaddbuttons.Bulkhead = Bulkhead
|
||||
compaddbuttons.Engineblock = Engine\nblock
|
||||
compaddbuttons.assembly = Assembly Components
|
||||
compaddbuttons.newBooster.lbl = New\nBoosters
|
||||
compaddbuttons.newBooster.ttip = Add a new set booster stage to the rocket design.
|
||||
compaddbuttons.newPods.lbl = New Pods
|
||||
compaddbuttons.newPods.ttip = Add a new set of pods to the rocket design.
|
||||
compaddbuttons.Massobjects = Mass objects
|
||||
compaddbuttons.Parachute = Parachute
|
||||
compaddbuttons.Streamer = Streamer
|
||||
@ -1382,7 +1387,6 @@ Stage.SeparationEvent.EJECTION = Current stage ejection charge
|
||||
Stage.SeparationEvent.LAUNCH = Launch
|
||||
Stage.SeparationEvent.NEVER = Never
|
||||
|
||||
Stage.parallel.toggle = Make this Stage Parallel
|
||||
Stage.parallel.radius = Radial Distance
|
||||
Stage.parallel.angle = Angle
|
||||
Stage.parallel.count = Number of Boosters
|
||||
@ -1390,6 +1394,10 @@ Stage.parallel.rotation = Rotation
|
||||
Stage.parallel.componentname = Relative to Stage
|
||||
Stage.parallel.offset = Offset Value
|
||||
|
||||
BoosterSet.BoosterSet = Booster Set
|
||||
|
||||
PodSet.PodSet = Pod Set
|
||||
|
||||
! BodyTube
|
||||
BodyTube.BodyTube = Body tube
|
||||
! TubeCoupler
|
||||
@ -1463,6 +1471,8 @@ ComponentIcons.Parachute = Parachute
|
||||
ComponentIcons.Streamer = Streamer
|
||||
ComponentIcons.Shockcord = Shock cord
|
||||
ComponentIcons.Masscomponent = Mass component
|
||||
ComponentIcons.Boosters = Booster Stage
|
||||
ComponentIcons.Pods = Pod Stage
|
||||
ComponentIcons.disabled = (disabled)
|
||||
ComponentIcons.Altimeter = Altimeter
|
||||
ComponentIcons.Flightcomputer = Flight computer
|
||||
|
BIN
core/resources/pix/componenticons/boosters-large.png
Normal file
BIN
core/resources/pix/componenticons/boosters-large.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 693 B |
BIN
core/resources/pix/componenticons/boosters-small.png
Normal file
BIN
core/resources/pix/componenticons/boosters-small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 578 B |
BIN
core/resources/pix/componenticons/pods-large.png
Normal file
BIN
core/resources/pix/componenticons/pods-large.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
core/resources/pix/componenticons/pods-small.png
Normal file
BIN
core/resources/pix/componenticons/pods-small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 269 B |
@ -2,7 +2,7 @@ package net.sf.openrocket.document;
|
||||
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
|
||||
public class OpenRocketDocumentFactory {
|
||||
@ -11,7 +11,7 @@ public class OpenRocketDocumentFactory {
|
||||
|
||||
public static OpenRocketDocument createNewRocket() {
|
||||
Rocket rocket = new Rocket();
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
//// Sustainer
|
||||
stage.setName(trans.get("BasicFrame.StageName.Sustainer"));
|
||||
rocket.addChild(stage);
|
||||
|
@ -22,7 +22,7 @@ import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.TubeCoupler;
|
||||
import net.sf.openrocket.rocketcomponent.TubeFinSet;
|
||||
import net.sf.openrocket.simulation.FlightData;
|
||||
@ -284,8 +284,8 @@ public class OpenRocketSaver extends RocketSaver {
|
||||
return FILE_VERSION_DIVISOR + 6;
|
||||
}
|
||||
}
|
||||
if (c instanceof Stage) {
|
||||
Stage stage = (Stage) c;
|
||||
if (c instanceof AxialStage) {
|
||||
AxialStage stage = (AxialStage) c;
|
||||
if (stage.getStageSeparationConfiguration().size() > 0) {
|
||||
return FILE_VERSION_DIVISOR + 6;
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
|
||||
/**
|
||||
* A handler that populates the parameters of a previously constructed rocket component.
|
||||
@ -69,11 +69,11 @@ class ComponentParameterHandler extends AbstractElementHandler {
|
||||
return new DeploymentConfigurationHandler( (RecoveryDevice) component, context );
|
||||
}
|
||||
if ( element.equals("separationconfiguration")) {
|
||||
if ( !(component instanceof Stage) ) {
|
||||
if ( !(component instanceof AxialStage) ) {
|
||||
warnings.add(Warning.fromString("Illegal component defined as stage."));
|
||||
return null;
|
||||
}
|
||||
return new StageSeparationConfigurationHandler( (Stage) component, context );
|
||||
return new StageSeparationConfigurationHandler( (AxialStage) component, context );
|
||||
}
|
||||
|
||||
return PlainTextHandler.INSTANCE;
|
||||
|
@ -31,7 +31,7 @@ import net.sf.openrocket.rocketcomponent.RingComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.ShockCord;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.rocketcomponent.Streamer;
|
||||
import net.sf.openrocket.rocketcomponent.StructuralComponent;
|
||||
@ -86,7 +86,7 @@ class DocumentConfig {
|
||||
constructors.put("streamer", Streamer.class.getConstructor(new Class<?>[0]));
|
||||
|
||||
// Other
|
||||
constructors.put("stage", Stage.class.getConstructor(new Class<?>[0]));
|
||||
constructors.put("stage", AxialStage.class.getConstructor(new Class<?>[0]));
|
||||
|
||||
} catch (NoSuchMethodException e) {
|
||||
throw new BugException(
|
||||
@ -400,17 +400,17 @@ class DocumentConfig {
|
||||
|
||||
// Stage
|
||||
setters.put("Stage:separationevent", new EnumSetter<StageSeparationConfiguration.SeparationEvent>(
|
||||
Reflection.findMethod(Stage.class, "getStageSeparationConfiguration"),
|
||||
Reflection.findMethod(AxialStage.class, "getStageSeparationConfiguration"),
|
||||
Reflection.findMethod(StageSeparationConfiguration.class, "setSeparationEvent", StageSeparationConfiguration.SeparationEvent.class),
|
||||
StageSeparationConfiguration.SeparationEvent.class));
|
||||
setters.put("Stage:separationdelay", new DoubleSetter(
|
||||
Reflection.findMethod(Stage.class, "getStageSeparationConfiguration"),
|
||||
Reflection.findMethod(AxialStage.class, "getStageSeparationConfiguration"),
|
||||
Reflection.findMethod(StageSeparationConfiguration.class, "setSeparationDelay", double.class)));
|
||||
setters.put("Stage:outside", new BooleanSetter(Reflection.findMethod(Stage.class, "setOutside", boolean.class)));
|
||||
setters.put("Stage:relativeto", new IntSetter(Reflection.findMethod(Stage.class, "setRelativeToStage", int.class)));
|
||||
setters.put("Stage:instancecount", new IntSetter(Reflection.findMethod(Stage.class, "setInstanceCount", int.class)));
|
||||
setters.put("Stage:radialoffset", new DoubleSetter(Reflection.findMethod(Stage.class, "setRadialOffset", double.class)));
|
||||
setters.put("Stage:angleoffset", new DoubleSetter(Reflection.findMethod(Stage.class, "setAngularOffset", double.class)));
|
||||
setters.put("Stage:outside", new BooleanSetter(Reflection.findMethod(AxialStage.class, "setOutside", boolean.class)));
|
||||
setters.put("Stage:relativeto", new IntSetter(Reflection.findMethod(AxialStage.class, "setRelativeToStage", int.class)));
|
||||
setters.put("Stage:instancecount", new IntSetter(Reflection.findMethod(AxialStage.class, "setInstanceCount", int.class)));
|
||||
setters.put("Stage:radialoffset", new DoubleSetter(Reflection.findMethod(AxialStage.class, "setRadialOffset", double.class)));
|
||||
setters.put("Stage:angleoffset", new DoubleSetter(Reflection.findMethod(AxialStage.class, "setAngularOffset", double.class)));
|
||||
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ import net.sf.openrocket.rocketcomponent.InternalComponent;
|
||||
import net.sf.openrocket.rocketcomponent.LaunchLug;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent.Position;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.TubeFinSet;
|
||||
|
||||
class PositionSetter implements Setter {
|
||||
@ -45,8 +45,8 @@ class PositionSetter implements Setter {
|
||||
} else if (c instanceof TubeFinSet) {
|
||||
((TubeFinSet) c).setRelativePosition(type);
|
||||
c.setAxialOffset(pos);
|
||||
} else if (c instanceof Stage) {
|
||||
((Stage) c).setRelativePositionMethod(type);
|
||||
} else if (c instanceof AxialStage) {
|
||||
((AxialStage) c).setRelativePositionMethod(type);
|
||||
c.setAxialOffset(pos);
|
||||
} else {
|
||||
warnings.add(Warning.FILE_INVALID_PARAMETER);
|
||||
|
@ -8,19 +8,19 @@ import net.sf.openrocket.file.DocumentLoadingContext;
|
||||
import net.sf.openrocket.file.simplesax.AbstractElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.ElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.PlainTextHandler;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration.SeparationEvent;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
class StageSeparationConfigurationHandler extends AbstractElementHandler {
|
||||
private final Stage stage;
|
||||
private final AxialStage stage;
|
||||
|
||||
private SeparationEvent event = null;
|
||||
private double delay = Double.NaN;
|
||||
|
||||
public StageSeparationConfigurationHandler(Stage stage, DocumentLoadingContext context) {
|
||||
public StageSeparationConfigurationHandler(AxialStage stage, DocumentLoadingContext context) {
|
||||
this.stage = stage;
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ import java.util.Locale;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
|
||||
public class StageSaver extends ComponentAssemblySaver {
|
||||
@ -27,7 +27,7 @@ public class StageSaver extends ComponentAssemblySaver {
|
||||
@Override
|
||||
protected void addParams(RocketComponent c, List<String> elements) {
|
||||
super.addParams(c, elements);
|
||||
Stage stage = (Stage) c;
|
||||
AxialStage stage = (AxialStage) c;
|
||||
|
||||
if (stage.getOutside()) {
|
||||
elements.addAll(this.addStageReplicationParams(stage));
|
||||
@ -60,7 +60,7 @@ public class StageSaver extends ComponentAssemblySaver {
|
||||
}
|
||||
}
|
||||
|
||||
private Collection<? extends String> addStageReplicationParams(final Stage currentStage) {
|
||||
private Collection<? extends String> addStageReplicationParams(final AxialStage currentStage) {
|
||||
List<String> elementsToReturn = new ArrayList<String>();
|
||||
final String instCt_tag = "instancecount";
|
||||
final String radoffs_tag = "radialoffset";
|
||||
|
@ -17,7 +17,7 @@ import net.sf.openrocket.masscalc.BasicMassCalculator;
|
||||
import net.sf.openrocket.masscalc.MassCalculator;
|
||||
import net.sf.openrocket.rocketcomponent.Configuration;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -125,7 +125,7 @@ public class RocksimSaver extends RocketSaver {
|
||||
return result;
|
||||
}
|
||||
|
||||
private StageDTO toStageDTO(Stage stage, RocketDesignDTO designDTO, int stageNumber) {
|
||||
private StageDTO toStageDTO(AxialStage stage, RocketDesignDTO designDTO, int stageNumber) {
|
||||
return new StageDTO(stage, designDTO, stageNumber);
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import net.sf.openrocket.util.ArrayList;
|
||||
|
||||
@ -40,7 +40,7 @@ public class StageDTO {
|
||||
* @param design the encompassing container DTO
|
||||
* @param stageNumber the stage number (3 is always at the top, even if it's the only one)
|
||||
*/
|
||||
public StageDTO(Stage theORStage, RocketDesignDTO design, int stageNumber) {
|
||||
public StageDTO(AxialStage theORStage, RocketDesignDTO design, int stageNumber) {
|
||||
|
||||
if (stageNumber == 3) {
|
||||
if (theORStage.isMassOverridden()) {
|
||||
|
@ -16,7 +16,7 @@ import net.sf.openrocket.file.simplesax.ElementHandler;
|
||||
import net.sf.openrocket.file.simplesax.PlainTextHandler;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
@ -205,7 +205,7 @@ class RocketDesignHandler extends AbstractElementHandler {
|
||||
* rocket defines stage '2' as the initial booster with stage '3' sitting atop it. And so on.
|
||||
*/
|
||||
if ("Stage3Parts".equals(element)) {
|
||||
final Stage stage = new Stage();
|
||||
final AxialStage stage = new AxialStage();
|
||||
if (stage3Mass > 0.0d) {
|
||||
stage.setMassOverridden(true);
|
||||
stage.setOverrideSubcomponents(true); //Rocksim does not support this type of override
|
||||
@ -221,7 +221,7 @@ class RocketDesignHandler extends AbstractElementHandler {
|
||||
}
|
||||
if ("Stage2Parts".equals(element)) {
|
||||
if (stageCount >= 2) {
|
||||
final Stage stage = new Stage();
|
||||
final AxialStage stage = new AxialStage();
|
||||
if (stage2Mass > 0.0d) {
|
||||
stage.setMassOverridden(true);
|
||||
stage.setOverrideSubcomponents(true); //Rocksim does not support this type of override
|
||||
@ -238,7 +238,7 @@ class RocketDesignHandler extends AbstractElementHandler {
|
||||
}
|
||||
if ("Stage1Parts".equals(element)) {
|
||||
if (stageCount == 3) {
|
||||
final Stage stage = new Stage();
|
||||
final AxialStage stage = new AxialStage();
|
||||
if (stage1Mass > 0.0d) {
|
||||
stage.setMassOverridden(true);
|
||||
stage.setOverrideSubcomponents(true); //Rocksim does not support this type of override
|
||||
|
@ -12,7 +12,7 @@ import net.sf.openrocket.plugin.Plugin;
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.util.ArrayList;
|
||||
import net.sf.openrocket.util.Chars;
|
||||
|
||||
@ -59,7 +59,7 @@ public class MotorDescriptionSubstitutor implements RocketSubstitutor {
|
||||
while (iterator.hasNext()) {
|
||||
RocketComponent c = iterator.next();
|
||||
|
||||
if (c instanceof Stage) {
|
||||
if (c instanceof AxialStage) {
|
||||
|
||||
currentList = new ArrayList<String>();
|
||||
list.add(currentList);
|
||||
|
289
core/src/net/sf/openrocket/rocketcomponent/AxialStage.java
Normal file
289
core/src/net/sf/openrocket/rocketcomponent/AxialStage.java
Normal file
@ -0,0 +1,289 @@
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.util.BugException;
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class AxialStage extends ComponentAssembly implements FlightConfigurableComponent {
|
||||
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
private static final Logger log = LoggerFactory.getLogger(AxialStage.class);
|
||||
|
||||
private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations;
|
||||
|
||||
private int stageNumber;
|
||||
private static int stageCount;
|
||||
|
||||
public AxialStage() {
|
||||
this.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
||||
this.relativePosition = Position.AFTER;
|
||||
stageNumber = AxialStage.stageCount;
|
||||
AxialStage.stageCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean allowsChildren() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
//// Stage
|
||||
return trans.get("Stage.Stage");
|
||||
}
|
||||
|
||||
public static int getStageCount() {
|
||||
return AxialStage.stageCount;
|
||||
}
|
||||
|
||||
public FlightConfiguration<StageSeparationConfiguration> getStageSeparationConfiguration() {
|
||||
return separationConfigurations;
|
||||
}
|
||||
|
||||
// not strictly accurate, but this should provide an acceptable estimate for total vehicle size
|
||||
@Override
|
||||
public Collection<Coordinate> getComponentBounds() {
|
||||
Collection<Coordinate> bounds = new ArrayList<Coordinate>(8);
|
||||
Coordinate[] instanceLocations = this.getLocation();
|
||||
double x_min = instanceLocations[0].x;
|
||||
double x_max = x_min + this.length;
|
||||
double r_max = 0;
|
||||
|
||||
|
||||
addBound(bounds, x_min, r_max);
|
||||
addBound(bounds, x_max, r_max);
|
||||
|
||||
return bounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the given type can be added to this component. A Stage allows
|
||||
* only BodyComponents to be added.
|
||||
*
|
||||
* @param type The RocketComponent class type to add.
|
||||
*
|
||||
* @return Whether such a component can be added.
|
||||
*/
|
||||
@Override
|
||||
public boolean isCompatible(Class<? extends RocketComponent> type) {
|
||||
if (type.equals(AxialStage.class)) {
|
||||
return true;
|
||||
} else {
|
||||
return BodyComponent.class.isAssignableFrom(type);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cloneFlightConfiguration(String oldConfigId, String newConfigId) {
|
||||
separationConfigurations.cloneFlightConfiguration(oldConfigId, newConfigId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RocketComponent copyWithOriginalID() {
|
||||
AxialStage copy = (AxialStage) super.copyWithOriginalID();
|
||||
copy.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(separationConfigurations,
|
||||
copy, ComponentChangeEvent.EVENT_CHANGE);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Coordinate[] getLocation() {
|
||||
if (null == this.parent) {
|
||||
throw new BugException(" Attempted to get absolute position Vector of a Stage without a parent. ");
|
||||
}
|
||||
|
||||
if (this.isCenterline()) {
|
||||
return super.getLocation();
|
||||
} else {
|
||||
Coordinate[] parentInstances = this.parent.getLocation();
|
||||
if (1 != parentInstances.length) {
|
||||
throw new BugException(" OpenRocket does not (yet) support external stages attached to external stages. " +
|
||||
"(assumed reason for getting multiple parent locations into an external stage.)");
|
||||
}
|
||||
|
||||
Coordinate[] toReturn = this.shiftCoordinates(parentInstances);
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void setRelativePositionMethod(final Position _newPosition) {
|
||||
if (null == this.parent) {
|
||||
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
|
||||
}
|
||||
if (this.isCenterline()) {
|
||||
// Centerline stages must be set via AFTER-- regardless of what was requested:
|
||||
super.setRelativePosition(Position.AFTER);
|
||||
} else if (this.parent instanceof AxialStage) {
|
||||
if (Position.AFTER == _newPosition) {
|
||||
log.warn("Stages cannot be relative to other stages via AFTER! Ignoring.");
|
||||
super.setRelativePosition(Position.TOP);
|
||||
} else {
|
||||
super.setRelativePosition(_newPosition);
|
||||
}
|
||||
}
|
||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPositionValue() {
|
||||
mutex.verify();
|
||||
|
||||
return this.getAxialOffset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stages may be positioned relative to other stages. In that case, this will set the stage number
|
||||
* against which this stage is positioned.
|
||||
*
|
||||
* @return the stage number which this stage is positioned relative to
|
||||
*/
|
||||
public int getRelativeToStage() {
|
||||
if (null == this.parent) {
|
||||
return -1;
|
||||
} else if (this.parent instanceof AxialStage) {
|
||||
return this.parent.parent.getChildPosition(this.parent);
|
||||
} else if (this.isCenterline()) {
|
||||
if (0 < this.stageNumber) {
|
||||
return --this.stageNumber;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static void resetStageCount() {
|
||||
AxialStage.stageCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStageNumber() {
|
||||
return this.stageNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAxialOffset() {
|
||||
double returnValue = Double.NaN;
|
||||
|
||||
if ((this.isCenterline() && (Position.AFTER != this.relativePosition))) {
|
||||
// remember the implicit (this instanceof Stage)
|
||||
throw new BugException("found a Stage on centerline, but not positioned as AFTER. Please fix this! " + this.getName() + " is " + this.getRelativePosition().name());
|
||||
} else {
|
||||
returnValue = super.asPositionValue(this.relativePosition);
|
||||
}
|
||||
|
||||
if (0.000001 > Math.abs(returnValue)) {
|
||||
returnValue = 0.0;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAxialOffset(final double _pos) {
|
||||
this.updateBounds();
|
||||
super.setAxialOffset(this.relativePosition, _pos);
|
||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Coordinate[] shiftCoordinates(Coordinate[] c) {
|
||||
checkState();
|
||||
return c;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected StringBuilder toDebugDetail() {
|
||||
StringBuilder buf = super.toDebugDetail();
|
||||
// if (-1 == this.getRelativeToStage()) {
|
||||
// System.err.println(" >>refStageName: " + null + "\n");
|
||||
// } else {
|
||||
// Stage refStage = (Stage) this.parent;
|
||||
// System.err.println(" >>refStageName: " + refStage.getName() + "\n");
|
||||
// System.err.println(" ..refCenterX: " + refStage.position.x + "\n");
|
||||
// System.err.println(" ..refLength: " + refStage.getLength() + "\n");
|
||||
// }
|
||||
return buf;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toDebugTreeNode(final StringBuilder buffer, final String prefix) {
|
||||
|
||||
String thisLabel = this.getName() + " (" + this.getStageNumber() + ")";
|
||||
|
||||
buffer.append(String.format("%s %-24s %5.3f", prefix, thisLabel, this.getLength()));
|
||||
buffer.append(String.format(" %24s %24s\n", this.getOffset(), this.getLocation()[0]));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBounds() {
|
||||
// currently only updates the length
|
||||
this.length = 0;
|
||||
Iterator<RocketComponent> childIterator = this.getChildren().iterator();
|
||||
while (childIterator.hasNext()) {
|
||||
RocketComponent curChild = childIterator.next();
|
||||
if (curChild.isCenterline()) {
|
||||
this.length += curChild.getLength();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void update() {
|
||||
if (null == this.parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateBounds();
|
||||
if (this.parent instanceof Rocket) {
|
||||
// stages which are directly children of the rocket are inline, and positioned
|
||||
int childNumber = this.parent.getChildPosition(this);
|
||||
if (0 == childNumber) {
|
||||
this.setAfter(this.parent);
|
||||
} else {
|
||||
RocketComponent prevStage = this.parent.getChild(childNumber - 1);
|
||||
this.setAfter(prevStage);
|
||||
}
|
||||
} else if (this.parent instanceof AxialStage) {
|
||||
this.updateBounds();
|
||||
// because if parent is instanceof Stage, that means 'this' is positioned externally
|
||||
super.update();
|
||||
}
|
||||
|
||||
// updates the internal 'previousComponent' field.
|
||||
this.updateChildSequence();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
protected void updateChildSequence() {
|
||||
Iterator<RocketComponent> childIterator = this.getChildren().iterator();
|
||||
RocketComponent prevComp = null;
|
||||
while (childIterator.hasNext()) {
|
||||
RocketComponent curChild = childIterator.next();
|
||||
if (curChild.isCenterline()) {
|
||||
//curChild.previousComponent = prevComp;
|
||||
curChild.setAfter(prevComp);
|
||||
prevComp = curChild;
|
||||
// } else {
|
||||
// curChild.previousComponent = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -12,10 +12,10 @@ import net.sf.openrocket.util.Coordinate;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class Stage extends ComponentAssembly implements FlightConfigurableComponent, OutsideComponent {
|
||||
public class BoosterSet extends AxialStage implements FlightConfigurableComponent, OutsideComponent {
|
||||
|
||||
static final Translator trans = Application.getTranslator();
|
||||
private static final Logger log = LoggerFactory.getLogger(Stage.class);
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
private static final Logger log = LoggerFactory.getLogger(BoosterSet.class);
|
||||
|
||||
private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations;
|
||||
|
||||
@ -29,11 +29,8 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
private int stageNumber;
|
||||
private static int stageCount;
|
||||
|
||||
public Stage() {
|
||||
this.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
||||
this.relativePosition = Position.AFTER;
|
||||
stageNumber = Stage.stageCount;
|
||||
Stage.stageCount++;
|
||||
public BoosterSet() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -44,11 +41,11 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
//// Stage
|
||||
return trans.get("Stage.Stage");
|
||||
return trans.get("BoosterSet.BoosterSet");
|
||||
}
|
||||
|
||||
public static int getStageCount() {
|
||||
return Stage.stageCount;
|
||||
return BoosterSet.stageCount;
|
||||
}
|
||||
|
||||
public FlightConfiguration<StageSeparationConfiguration> getStageSeparationConfiguration() {
|
||||
@ -93,7 +90,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
*/
|
||||
@Override
|
||||
public boolean isCompatible(Class<? extends RocketComponent> type) {
|
||||
if (type.equals(Stage.class)) {
|
||||
if (type.equals(BoosterSet.class)) {
|
||||
return true;
|
||||
} else {
|
||||
return BodyComponent.class.isAssignableFrom(type);
|
||||
@ -107,7 +104,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
|
||||
@Override
|
||||
protected RocketComponent copyWithOriginalID() {
|
||||
Stage copy = (Stage) super.copyWithOriginalID();
|
||||
BoosterSet copy = (BoosterSet) super.copyWithOriginalID();
|
||||
copy.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(separationConfigurations,
|
||||
copy, ComponentChangeEvent.EVENT_CHANGE);
|
||||
return copy;
|
||||
@ -233,7 +230,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
if (this.isCenterline()) {
|
||||
// Centerline stages must be set via AFTER-- regardless of what was requested:
|
||||
super.setRelativePosition(Position.AFTER);
|
||||
} else if (this.parent instanceof Stage) {
|
||||
} else if (this.parent instanceof BoosterSet) {
|
||||
if (Position.AFTER == _newPosition) {
|
||||
log.warn("Stages cannot be relative to other stages via AFTER! Ignoring.");
|
||||
super.setRelativePosition(Position.TOP);
|
||||
@ -267,7 +264,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
public int getRelativeToStage() {
|
||||
if (null == this.parent) {
|
||||
return -1;
|
||||
} else if (this.parent instanceof Stage) {
|
||||
} else if (this.parent instanceof BoosterSet) {
|
||||
return this.parent.parent.getChildPosition(this.parent);
|
||||
} else if (this.isCenterline()) {
|
||||
if (0 < this.stageNumber) {
|
||||
@ -279,7 +276,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
}
|
||||
|
||||
public static void resetStageCount() {
|
||||
Stage.stageCount = 0;
|
||||
BoosterSet.stageCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -409,7 +406,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
|
||||
RocketComponent prevStage = this.parent.getChild(childNumber - 1);
|
||||
this.setAfter(prevStage);
|
||||
}
|
||||
} else if (this.parent instanceof Stage) {
|
||||
} else if (this.parent instanceof BoosterSet) {
|
||||
this.updateBounds();
|
||||
// because if parent is instanceof Stage, that means 'this' is positioned externally
|
||||
super.update();
|
@ -68,7 +68,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi
|
||||
|
||||
public void setAllStages() {
|
||||
stagesActive.clear();
|
||||
stagesActive.set(0, Stage.getStageCount());
|
||||
stagesActive.set(0, AxialStage.getStageCount());
|
||||
fireChangeEvent();
|
||||
}
|
||||
|
||||
@ -107,18 +107,18 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi
|
||||
* Check whether the stage specified by the index is active.
|
||||
*/
|
||||
public boolean isStageActive(int stage) {
|
||||
if (stage >= Stage.getStageCount())
|
||||
if (stage >= AxialStage.getStageCount())
|
||||
return false;
|
||||
return stagesActive.get(stage);
|
||||
}
|
||||
|
||||
public int getStageCount() {
|
||||
return Stage.getStageCount();
|
||||
return AxialStage.getStageCount();
|
||||
}
|
||||
|
||||
public int getActiveStageCount() {
|
||||
int count = 0;
|
||||
int s = Stage.getStageCount();
|
||||
int s = AxialStage.getStageCount();
|
||||
|
||||
for (int i = 0; i < s; i++) {
|
||||
if (stagesActive.get(i))
|
||||
@ -324,7 +324,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi
|
||||
|
||||
private List<RocketComponent> getActiveComponents(List<RocketComponent> accumulator, final List<RocketComponent> toScan) {
|
||||
for (RocketComponent rc : toScan) {
|
||||
if (rc instanceof Stage) {
|
||||
if (rc instanceof AxialStage) {
|
||||
if (!isStageActive(rc.getStageNumber())) {
|
||||
continue;
|
||||
}
|
||||
|
451
core/src/net/sf/openrocket/rocketcomponent/PodSet.java
Normal file
451
core/src/net/sf/openrocket/rocketcomponent/PodSet.java
Normal file
@ -0,0 +1,451 @@
|
||||
package net.sf.openrocket.rocketcomponent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.util.BugException;
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class PodSet extends ComponentAssembly implements FlightConfigurableComponent, OutsideComponent {
|
||||
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
private static final Logger log = LoggerFactory.getLogger(PodSet.class);
|
||||
|
||||
private FlightConfigurationImpl<StageSeparationConfiguration> separationConfigurations;
|
||||
|
||||
private boolean centerline = true;
|
||||
private double angularPosition_rad = 0;
|
||||
private double radialPosition_m = 0;
|
||||
|
||||
private int count = 2;
|
||||
private double angularSeparation = Math.PI;
|
||||
|
||||
private int stageNumber;
|
||||
private static int stageCount;
|
||||
|
||||
public PodSet() {
|
||||
this.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(this, ComponentChangeEvent.EVENT_CHANGE, new StageSeparationConfiguration());
|
||||
this.relativePosition = Position.AFTER;
|
||||
stageNumber = PodSet.stageCount;
|
||||
PodSet.stageCount++;
|
||||
}
|
||||
|
||||
public class Boosters extends PodSet {
|
||||
public Boosters() {
|
||||
super();
|
||||
}
|
||||
};
|
||||
|
||||
public class Pods extends PodSet {
|
||||
public Pods() {
|
||||
super();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
@Override
|
||||
public boolean allowsChildren() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getComponentName() {
|
||||
//// Stage
|
||||
return trans.get("PodSet.PodSet");
|
||||
}
|
||||
|
||||
public FlightConfiguration<StageSeparationConfiguration> getStageSeparationConfiguration() {
|
||||
return separationConfigurations;
|
||||
}
|
||||
|
||||
// not strictly accurate, but this should provide an acceptable estimate for total vehicle size
|
||||
@Override
|
||||
public Collection<Coordinate> getComponentBounds() {
|
||||
Collection<Coordinate> bounds = new ArrayList<Coordinate>(8);
|
||||
|
||||
double x_min = Double.MAX_VALUE;
|
||||
double x_max = Double.MIN_VALUE;
|
||||
double r_max = 0;
|
||||
|
||||
Coordinate[] instanceLocations = this.getLocation();
|
||||
|
||||
for (Coordinate currentInstanceLocation : instanceLocations) {
|
||||
if (x_min > (currentInstanceLocation.x)) {
|
||||
x_min = currentInstanceLocation.x;
|
||||
}
|
||||
if (x_max < (currentInstanceLocation.x + this.length)) {
|
||||
x_max = currentInstanceLocation.x + this.length;
|
||||
}
|
||||
if (r_max < (this.getRadialOffset())) {
|
||||
r_max = this.getRadialOffset();
|
||||
}
|
||||
}
|
||||
addBound(bounds, x_min, r_max);
|
||||
addBound(bounds, x_max, r_max);
|
||||
|
||||
return bounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the given type can be added to this component. A Stage allows
|
||||
* only BodyComponents to be added.
|
||||
*
|
||||
* @param type The RocketComponent class type to add.
|
||||
*
|
||||
* @return Whether such a component can be added.
|
||||
*/
|
||||
@Override
|
||||
public boolean isCompatible(Class<? extends RocketComponent> type) {
|
||||
if (type.equals(PodSet.class)) {
|
||||
return true;
|
||||
} else {
|
||||
return BodyComponent.class.isAssignableFrom(type);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cloneFlightConfiguration(String oldConfigId, String newConfigId) {
|
||||
separationConfigurations.cloneFlightConfiguration(oldConfigId, newConfigId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RocketComponent copyWithOriginalID() {
|
||||
PodSet copy = (PodSet) super.copyWithOriginalID();
|
||||
copy.separationConfigurations = new FlightConfigurationImpl<StageSeparationConfiguration>(separationConfigurations,
|
||||
copy, ComponentChangeEvent.EVENT_CHANGE);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Coordinate[] getLocation() {
|
||||
if (null == this.parent) {
|
||||
throw new BugException(" Attempted to get absolute position Vector of a Stage without a parent. ");
|
||||
}
|
||||
|
||||
if (this.isCenterline()) {
|
||||
return super.getLocation();
|
||||
} else {
|
||||
Coordinate[] parentInstances = this.parent.getLocation();
|
||||
if (1 != parentInstances.length) {
|
||||
throw new BugException(" OpenRocket does not (yet) support external stages attached to external stages. " +
|
||||
"(assumed reason for getting multiple parent locations into an external stage.)");
|
||||
}
|
||||
|
||||
Coordinate[] toReturn = this.shiftCoordinates(parentInstances);
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getOutside() {
|
||||
return !isCenterline();
|
||||
}
|
||||
|
||||
/**
|
||||
* Detects if this Stage is attached directly to the Rocket (and is thus centerline)
|
||||
* Or if this stage is a parallel (external) stage.
|
||||
*
|
||||
* @return whether this Stage is along the center line of the Rocket.
|
||||
*/
|
||||
@Override
|
||||
public boolean isCenterline() {
|
||||
if (this.parent instanceof Rocket) {
|
||||
this.centerline = true;
|
||||
} else {
|
||||
this.centerline = false;
|
||||
}
|
||||
return this.centerline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub.
|
||||
* The actual value is set via 'isCenterline()'
|
||||
*/
|
||||
@Override
|
||||
public void setOutside(final boolean _outside) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInstanceCount() {
|
||||
if (this.isCenterline()) {
|
||||
return 1;
|
||||
} else {
|
||||
return this.count;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInstanceCount(final int _count) {
|
||||
mutex.verify();
|
||||
if (this.centerline) {
|
||||
return;
|
||||
}
|
||||
if (_count < 1) {
|
||||
// there must be at least one instance....
|
||||
return;
|
||||
}
|
||||
|
||||
this.count = _count;
|
||||
this.angularSeparation = Math.PI * 2 / this.count;
|
||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAngularOffset() {
|
||||
if (this.centerline) {
|
||||
return 0.;
|
||||
} else {
|
||||
return this.angularPosition_rad;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAngularOffset(final double angle_rad) {
|
||||
if (this.centerline) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.angularPosition_rad = angle_rad;
|
||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getRadialOffset() {
|
||||
if (this.centerline) {
|
||||
return 0.;
|
||||
} else {
|
||||
return this.radialPosition_m;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRadialOffset(final double radius) {
|
||||
// log.error(" set radial position for: " + this.getName() + " to: " + this.radialPosition_m + " ... in meters?");
|
||||
if (false == this.centerline) {
|
||||
this.radialPosition_m = radius;
|
||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRelativePositionMethod(final Position _newPosition) {
|
||||
if (null == this.parent) {
|
||||
throw new NullPointerException(" a Stage requires a parent before any positioning! ");
|
||||
}
|
||||
if (this.isCenterline()) {
|
||||
// Centerline stages must be set via AFTER-- regardless of what was requested:
|
||||
super.setRelativePosition(Position.AFTER);
|
||||
} else if (this.parent instanceof PodSet) {
|
||||
if (Position.AFTER == _newPosition) {
|
||||
log.warn("Stages cannot be relative to other stages via AFTER! Ignoring.");
|
||||
super.setRelativePosition(Position.TOP);
|
||||
} else {
|
||||
super.setRelativePosition(_newPosition);
|
||||
}
|
||||
}
|
||||
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPositionValue() {
|
||||
mutex.verify();
|
||||
|
||||
return this.getAxialOffset();
|
||||
}
|
||||
|
||||
/*
|
||||
* @deprecated remove when the file is fixed....
|
||||
*/
|
||||
public void setRelativeToStage(final int _relToStage) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
/**
|
||||
* Stages may be positioned relative to other stages. In that case, this will set the stage number
|
||||
* against which this stage is positioned.
|
||||
*
|
||||
* @return the stage number which this stage is positioned relative to
|
||||
*/
|
||||
public int getRelativeToStage() {
|
||||
if (null == this.parent) {
|
||||
return -1;
|
||||
} else if (this.parent instanceof PodSet) {
|
||||
return this.parent.parent.getChildPosition(this.parent);
|
||||
} else if (this.isCenterline()) {
|
||||
if (0 < this.stageNumber) {
|
||||
return --this.stageNumber;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static void resetStageCount() {
|
||||
PodSet.stageCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStageNumber() {
|
||||
return this.stageNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getAxialOffset() {
|
||||
double returnValue = Double.NaN;
|
||||
|
||||
if ((this.isCenterline() && (Position.AFTER != this.relativePosition))) {
|
||||
// remember the implicit (this instanceof Stage)
|
||||
throw new BugException("found a Stage on centerline, but not positioned as AFTER. Please fix this! " + this.getName() + " is " + this.getRelativePosition().name());
|
||||
} else {
|
||||
returnValue = super.asPositionValue(this.relativePosition);
|
||||
}
|
||||
|
||||
if (0.000001 > Math.abs(returnValue)) {
|
||||
returnValue = 0.0;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAxialOffset(final double _pos) {
|
||||
this.updateBounds();
|
||||
super.setAxialOffset(this.relativePosition, _pos);
|
||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Coordinate[] shiftCoordinates(Coordinate[] c) {
|
||||
checkState();
|
||||
|
||||
if (this.isCenterline()) {
|
||||
return c;
|
||||
}
|
||||
|
||||
if (1 < c.length) {
|
||||
throw new BugException("implementation of 'shiftCoordinates' assumes the coordinate array has len == 1; this is not true, and may produce unexpected behavior! ");
|
||||
}
|
||||
|
||||
double radius = this.radialPosition_m;
|
||||
double angle0 = this.angularPosition_rad;
|
||||
double angleIncr = this.angularSeparation;
|
||||
Coordinate center = this.position;
|
||||
Coordinate[] toReturn = new Coordinate[this.count];
|
||||
Coordinate thisOffset;
|
||||
double thisAngle = angle0;
|
||||
for (int instanceNumber = 0; instanceNumber < this.count; instanceNumber++) {
|
||||
thisOffset = center.add(0, radius * Math.cos(thisAngle), radius * Math.sin(thisAngle));
|
||||
|
||||
toReturn[instanceNumber] = thisOffset.add(c[0]);
|
||||
thisAngle += angleIncr;
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected StringBuilder toDebugDetail() {
|
||||
StringBuilder buf = super.toDebugDetail();
|
||||
// if (-1 == this.getRelativeToStage()) {
|
||||
// System.err.println(" >>refStageName: " + null + "\n");
|
||||
// } else {
|
||||
// Stage refStage = (Stage) this.parent;
|
||||
// System.err.println(" >>refStageName: " + refStage.getName() + "\n");
|
||||
// System.err.println(" ..refCenterX: " + refStage.position.x + "\n");
|
||||
// System.err.println(" ..refLength: " + refStage.getLength() + "\n");
|
||||
// }
|
||||
return buf;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toDebugTreeNode(final StringBuilder buffer, final String prefix) {
|
||||
|
||||
String thisLabel = this.getName() + " (" + this.getStageNumber() + ")";
|
||||
|
||||
buffer.append(String.format("%s %-24s %5.3f", prefix, thisLabel, this.getLength()));
|
||||
|
||||
if (this.isCenterline()) {
|
||||
buffer.append(String.format(" %24s %24s\n", this.getOffset(), this.getLocation()[0]));
|
||||
} else {
|
||||
buffer.append(String.format(" %4.1f via: %s \n", this.getAxialOffset(), this.relativePosition.name()));
|
||||
Coordinate[] relCoords = this.shiftCoordinates(new Coordinate[] { Coordinate.ZERO });
|
||||
Coordinate[] absCoords = this.getLocation();
|
||||
|
||||
for (int instanceNumber = 0; instanceNumber < this.count; instanceNumber++) {
|
||||
Coordinate instanceRelativePosition = relCoords[instanceNumber];
|
||||
Coordinate instanceAbsolutePosition = absCoords[instanceNumber];
|
||||
buffer.append(String.format("%s [instance %2d of %2d] %32s %32s\n", prefix, instanceNumber, count,
|
||||
instanceRelativePosition, instanceAbsolutePosition));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBounds() {
|
||||
// currently only updates the length
|
||||
this.length = 0;
|
||||
Iterator<RocketComponent> childIterator = this.getChildren().iterator();
|
||||
while (childIterator.hasNext()) {
|
||||
RocketComponent curChild = childIterator.next();
|
||||
if (curChild.isCenterline()) {
|
||||
this.length += curChild.getLength();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void update() {
|
||||
if (null == this.parent) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.updateBounds();
|
||||
if (this.parent instanceof Rocket) {
|
||||
// stages which are directly children of the rocket are inline, and positioned
|
||||
int childNumber = this.parent.getChildPosition(this);
|
||||
if (0 == childNumber) {
|
||||
this.setAfter(this.parent);
|
||||
} else {
|
||||
RocketComponent prevStage = this.parent.getChild(childNumber - 1);
|
||||
this.setAfter(prevStage);
|
||||
}
|
||||
} else if (this.parent instanceof PodSet) {
|
||||
this.updateBounds();
|
||||
// because if parent is instanceof Stage, that means 'this' is positioned externally
|
||||
super.update();
|
||||
}
|
||||
|
||||
// updates the internal 'previousComponent' field.
|
||||
this.updateChildSequence();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
protected void updateChildSequence() {
|
||||
Iterator<RocketComponent> childIterator = this.getChildren().iterator();
|
||||
RocketComponent prevComp = null;
|
||||
while (childIterator.hasNext()) {
|
||||
RocketComponent curChild = childIterator.next();
|
||||
if (curChild.isCenterline()) {
|
||||
//curChild.previousComponent = prevComp;
|
||||
curChild.setAfter(prevComp);
|
||||
prevComp = curChild;
|
||||
// } else {
|
||||
// curChild.previousComponent = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -93,7 +93,7 @@ public class Rocket extends RocketComponent {
|
||||
functionalModID = modID;
|
||||
defaultConfiguration = new Configuration(this);
|
||||
|
||||
Stage.resetStageCount();
|
||||
AxialStage.resetStageCount();
|
||||
}
|
||||
|
||||
|
||||
@ -130,7 +130,7 @@ public class Rocket extends RocketComponent {
|
||||
*/
|
||||
public int getStageCount() {
|
||||
checkState();
|
||||
return Stage.getStageCount();
|
||||
return AxialStage.getStageCount();
|
||||
}
|
||||
|
||||
|
||||
@ -196,22 +196,22 @@ public class Rocket extends RocketComponent {
|
||||
return functionalModID;
|
||||
}
|
||||
|
||||
public ArrayList<Stage> getStageList() {
|
||||
ArrayList<Stage> toReturn = new ArrayList<Stage>();
|
||||
public ArrayList<AxialStage> getStageList() {
|
||||
ArrayList<AxialStage> toReturn = new ArrayList<AxialStage>();
|
||||
|
||||
toReturn = Rocket.getStages(toReturn, this);
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
private static ArrayList<Stage> getStages(ArrayList<Stage> accumulator, final RocketComponent parent) {
|
||||
private static ArrayList<AxialStage> getStages(ArrayList<AxialStage> accumulator, final RocketComponent parent) {
|
||||
if ((null == accumulator) || (null == parent)) {
|
||||
return new ArrayList<Stage>();
|
||||
return new ArrayList<AxialStage>();
|
||||
}
|
||||
|
||||
for (RocketComponent curChild : parent.getChildren()) {
|
||||
if (curChild instanceof Stage) {
|
||||
Stage curStage = (Stage) curChild;
|
||||
if (curChild instanceof AxialStage) {
|
||||
AxialStage curStage = (AxialStage) curChild;
|
||||
accumulator.add(curStage);
|
||||
}
|
||||
getStages(accumulator, curChild);
|
||||
@ -707,7 +707,7 @@ public class Rocket extends RocketComponent {
|
||||
*/
|
||||
@Override
|
||||
public boolean isCompatible(Class<? extends RocketComponent> type) {
|
||||
return (Stage.class.isAssignableFrom(type));
|
||||
return (AxialStage.class.isAssignableFrom(type));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1024,7 +1024,7 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
// if this is the root of a hierarchy, constrain the position to zero.
|
||||
if (null == this.parent) {
|
||||
return;
|
||||
} else if ((this.isCenterline()) && (this instanceof Stage)) {
|
||||
} else if ((this.isCenterline()) && (this instanceof AxialStage)) {
|
||||
// enforce AFTER
|
||||
positionMethod = Position.AFTER;
|
||||
}
|
||||
@ -1506,12 +1506,12 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
* @return The Stage component this component belongs to.
|
||||
* @throws IllegalStateException if a Stage component is not in the parentage.
|
||||
*/
|
||||
public final Stage getStage() {
|
||||
public final AxialStage getStage() {
|
||||
checkState();
|
||||
RocketComponent c = this;
|
||||
while (c != null) {
|
||||
if (c instanceof Stage)
|
||||
return (Stage) c;
|
||||
if (c instanceof AxialStage)
|
||||
return (AxialStage) c;
|
||||
c = c.getParent();
|
||||
}
|
||||
throw new IllegalStateException("getStage() called without Stage as a parent.");
|
||||
@ -1530,14 +1530,14 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
|
||||
}
|
||||
|
||||
RocketComponent curComponent = this;
|
||||
while (!(curComponent instanceof Stage)) {
|
||||
while (!(curComponent instanceof AxialStage)) {
|
||||
curComponent = curComponent.parent;
|
||||
if (curComponent == null || curComponent.parent == null) {
|
||||
throw new IllegalStateException("getStageNumber() could not find parent " +
|
||||
"stage.");
|
||||
}
|
||||
}
|
||||
Stage stage = (Stage) curComponent;
|
||||
AxialStage stage = (AxialStage) curComponent;
|
||||
|
||||
return stage.getStageNumber();
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
//// Upper stage motor ignition
|
||||
UPPER_IGNITION(trans.get("Stage.SeparationEvent.UPPER_IGNITION")) {
|
||||
@Override
|
||||
public boolean isSeparationEvent(FlightEvent e, Stage stage) {
|
||||
public boolean isSeparationEvent(FlightEvent e, AxialStage stage) {
|
||||
if (e.getType() != FlightEvent.Type.IGNITION)
|
||||
return false;
|
||||
|
||||
@ -28,7 +28,7 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
//// Current stage motor ignition
|
||||
IGNITION(trans.get("Stage.SeparationEvent.IGNITION")) {
|
||||
@Override
|
||||
public boolean isSeparationEvent(FlightEvent e, Stage stage) {
|
||||
public boolean isSeparationEvent(FlightEvent e, AxialStage stage) {
|
||||
if (e.getType() != FlightEvent.Type.IGNITION)
|
||||
return false;
|
||||
|
||||
@ -40,7 +40,7 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
//// Current stage motor burnout
|
||||
BURNOUT(trans.get("Stage.SeparationEvent.BURNOUT")) {
|
||||
@Override
|
||||
public boolean isSeparationEvent(FlightEvent e, Stage stage) {
|
||||
public boolean isSeparationEvent(FlightEvent e, AxialStage stage) {
|
||||
if (e.getType() != FlightEvent.Type.BURNOUT)
|
||||
return false;
|
||||
|
||||
@ -52,7 +52,7 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
//// Current stage ejection charge
|
||||
EJECTION(trans.get("Stage.SeparationEvent.EJECTION")) {
|
||||
@Override
|
||||
public boolean isSeparationEvent(FlightEvent e, Stage stage) {
|
||||
public boolean isSeparationEvent(FlightEvent e, AxialStage stage) {
|
||||
if (e.getType() != FlightEvent.Type.EJECTION_CHARGE)
|
||||
return false;
|
||||
|
||||
@ -64,14 +64,14 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
//// Launch
|
||||
LAUNCH(trans.get("Stage.SeparationEvent.LAUNCH")) {
|
||||
@Override
|
||||
public boolean isSeparationEvent(FlightEvent e, Stage stage) {
|
||||
public boolean isSeparationEvent(FlightEvent e, AxialStage stage) {
|
||||
return e.getType() == FlightEvent.Type.LAUNCH;
|
||||
}
|
||||
},
|
||||
//// Never
|
||||
NEVER(trans.get("Stage.SeparationEvent.NEVER")) {
|
||||
@Override
|
||||
public boolean isSeparationEvent(FlightEvent e, Stage stage) {
|
||||
public boolean isSeparationEvent(FlightEvent e, AxialStage stage) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
@ -87,7 +87,7 @@ public class StageSeparationConfiguration implements FlightConfigurableParameter
|
||||
/**
|
||||
* Test whether a specific event is a stage separation event.
|
||||
*/
|
||||
public abstract boolean isSeparationEvent(FlightEvent e, Stage stage);
|
||||
public abstract boolean isSeparationEvent(FlightEvent e, AxialStage stage);
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
@ -570,7 +570,7 @@ public abstract class SymmetricComponent extends BodyComponent implements Radial
|
||||
if (c instanceof SymmetricComponent) {
|
||||
return (SymmetricComponent) c;
|
||||
}
|
||||
if (!(c instanceof Stage) &&
|
||||
if (!(c instanceof AxialStage) &&
|
||||
(c.relativePosition == RocketComponent.Position.AFTER))
|
||||
return null; // Bad component type as "parent"
|
||||
}
|
||||
@ -590,7 +590,7 @@ public abstract class SymmetricComponent extends BodyComponent implements Radial
|
||||
if (c instanceof SymmetricComponent) {
|
||||
return (SymmetricComponent) c;
|
||||
}
|
||||
if (!(c instanceof Stage) &&
|
||||
if (!(c instanceof AxialStage) &&
|
||||
(c.relativePosition == RocketComponent.Position.AFTER))
|
||||
return null; // Bad component type as "parent"
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ import net.sf.openrocket.rocketcomponent.MotorConfiguration;
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.simulation.exception.MotorIgnitionException;
|
||||
import net.sf.openrocket.simulation.exception.SimulationException;
|
||||
@ -358,7 +358,7 @@ public class BasicEventSimulationEngine implements SimulationEngine {
|
||||
if (stageNo == 0)
|
||||
continue;
|
||||
|
||||
Stage stage = (Stage) status.getConfiguration().getRocket().getChild(stageNo);
|
||||
AxialStage stage = (AxialStage) status.getConfiguration().getRocket().getChild(stageNo);
|
||||
StageSeparationConfiguration separationConfig = stage.getStageSeparationConfiguration().get(flightConfigurationId);
|
||||
if (separationConfig.getSeparationEvent().isSeparationEvent(event, stage)) {
|
||||
addEvent(new FlightEvent(FlightEvent.Type.STAGE_SEPARATION,
|
||||
|
@ -39,7 +39,7 @@ import net.sf.openrocket.rocketcomponent.ReferenceType;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent.Position;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import net.sf.openrocket.rocketcomponent.Transition.Shape;
|
||||
@ -104,7 +104,7 @@ public class TestRockets {
|
||||
rocket.setRevision("Rocket revision " + key);
|
||||
rocket.setName(key);
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
setBasics(stage);
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -251,13 +251,13 @@ public class TestRockets {
|
||||
double finRootChord = 0.04, finTipChord = 0.05, finSweep = 0.01, finThickness = 0.003, finHeight = 0.03;
|
||||
|
||||
Rocket rocket;
|
||||
Stage stage;
|
||||
AxialStage stage;
|
||||
NoseCone nosecone;
|
||||
BodyTube bodytube;
|
||||
TrapezoidFinSet finset;
|
||||
|
||||
rocket = new Rocket();
|
||||
stage = new Stage();
|
||||
stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
|
||||
nosecone = new NoseCone(Transition.Shape.ELLIPSOID, noseconeLength, noseconeRadius);
|
||||
@ -299,14 +299,14 @@ public class TestRockets {
|
||||
|
||||
public static Rocket makeBigBlue() {
|
||||
Rocket rocket;
|
||||
Stage stage;
|
||||
AxialStage stage;
|
||||
NoseCone nosecone;
|
||||
BodyTube bodytube;
|
||||
FreeformFinSet finset;
|
||||
MassComponent mcomp;
|
||||
|
||||
rocket = new Rocket();
|
||||
stage = new Stage();
|
||||
stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
|
||||
nosecone = new NoseCone(Transition.Shape.ELLIPSOID, 0.105, 0.033);
|
||||
@ -368,7 +368,7 @@ public class TestRockets {
|
||||
|
||||
public static Rocket makeIsoHaisu() {
|
||||
Rocket rocket;
|
||||
Stage stage;
|
||||
AxialStage stage;
|
||||
NoseCone nosecone;
|
||||
BodyTube tube1, tube2, tube3;
|
||||
TrapezoidFinSet finset;
|
||||
@ -379,7 +379,7 @@ public class TestRockets {
|
||||
final double R = 0.07;
|
||||
|
||||
rocket = new Rocket();
|
||||
stage = new Stage();
|
||||
stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
|
||||
nosecone = new NoseCone(Transition.Shape.OGIVE, 0.53, R);
|
||||
@ -557,7 +557,7 @@ public class TestRockets {
|
||||
rocket.setName("v100");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
|
||||
// make body tube
|
||||
@ -578,7 +578,7 @@ public class TestRockets {
|
||||
rocket.setName("v101_withFinTabs");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -607,7 +607,7 @@ public class TestRockets {
|
||||
rocket.setName("v101_withTubeCouplerChild");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -633,7 +633,7 @@ public class TestRockets {
|
||||
rocket.setName("v104_withMotorConfig");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -671,7 +671,7 @@ public class TestRockets {
|
||||
rocket.setName("v104_withSimulationData");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -719,7 +719,7 @@ public class TestRockets {
|
||||
rocket.setName("v105_withCustomExpression");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -743,7 +743,7 @@ public class TestRockets {
|
||||
rocket.setName("v105_withComponentPreset");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -779,7 +779,7 @@ public class TestRockets {
|
||||
rocket.setName("v105_withLowerStageRecoveryDevice");
|
||||
|
||||
// make 1st stage
|
||||
Stage stage1 = new Stage();
|
||||
AxialStage stage1 = new AxialStage();
|
||||
stage1.setName("Stage1");
|
||||
rocket.addChild(stage1);
|
||||
|
||||
@ -795,7 +795,7 @@ public class TestRockets {
|
||||
bodyTube1.addChild(parachute);
|
||||
|
||||
// make 2nd stage
|
||||
Stage stage2 = new Stage();
|
||||
AxialStage stage2 = new AxialStage();
|
||||
stage2.setName("Stage2");
|
||||
rocket.addChild(stage2);
|
||||
|
||||
@ -810,7 +810,7 @@ public class TestRockets {
|
||||
rocket.setName("v106_withAppearance");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -831,7 +831,7 @@ public class TestRockets {
|
||||
rocket.setName("v106_withwithMotorMountIgnitionConfig");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -860,7 +860,7 @@ public class TestRockets {
|
||||
rocket.setName("v106_withRecoveryDeviceDeploymentConfig");
|
||||
|
||||
// make stage
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
rocket.addChild(stage);
|
||||
|
||||
@ -886,7 +886,7 @@ public class TestRockets {
|
||||
rocket.setName("v106_withStageSeparationConfig");
|
||||
|
||||
// make 1st stage
|
||||
Stage stage1 = new Stage();
|
||||
AxialStage stage1 = new AxialStage();
|
||||
stage1.setName("Stage1");
|
||||
rocket.addChild(stage1);
|
||||
|
||||
@ -904,7 +904,7 @@ public class TestRockets {
|
||||
stage1.getStageSeparationConfiguration().set("3SecondDelay", stageSepConfig);
|
||||
|
||||
// make 2nd stage
|
||||
Stage stage2 = new Stage();
|
||||
AxialStage stage2 = new AxialStage();
|
||||
stage2.setName("Stage2");
|
||||
rocket.addChild(stage2);
|
||||
|
||||
@ -937,7 +937,7 @@ public class TestRockets {
|
||||
rocket.setName("for_estimateFileSize");
|
||||
|
||||
// make 1st stage
|
||||
Stage stage1 = new Stage();
|
||||
AxialStage stage1 = new AxialStage();
|
||||
stage1.setName("Stage1");
|
||||
rocket.addChild(stage1);
|
||||
|
||||
@ -959,7 +959,7 @@ public class TestRockets {
|
||||
bodyTube1.addChild(parachute);
|
||||
|
||||
// make 2nd stage
|
||||
Stage stage2 = new Stage();
|
||||
AxialStage stage2 = new AxialStage();
|
||||
stage2.setName("Stage2");
|
||||
rocket.addChild(stage2);
|
||||
|
||||
|
@ -9,7 +9,7 @@ import net.sf.openrocket.file.simplesax.PlainTextHandler;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.ExternalComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
@ -37,7 +37,7 @@ public class BodyTubeHandlerTest extends RocksimTestBase {
|
||||
//success
|
||||
}
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
BodyTubeHandler handler = new BodyTubeHandler(null, stage, new WarningSet());
|
||||
BodyTube component = (BodyTube) getField(handler, "bodyTube");
|
||||
assertContains(component, stage.getChildren());
|
||||
@ -50,8 +50,8 @@ public class BodyTubeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testOpenElement() throws Exception {
|
||||
Assert.assertEquals(PlainTextHandler.INSTANCE, new BodyTubeHandler(null, new Stage(), new WarningSet()).openElement(null, null, null));
|
||||
Assert.assertNotNull(new BodyTubeHandler(null, new Stage(), new WarningSet()).openElement("AttachedParts", null, null));
|
||||
Assert.assertEquals(PlainTextHandler.INSTANCE, new BodyTubeHandler(null, new AxialStage(), new WarningSet()).openElement(null, null, null));
|
||||
Assert.assertNotNull(new BodyTubeHandler(null, new AxialStage(), new WarningSet()).openElement("AttachedParts", null, null));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,7 +62,7 @@ public class BodyTubeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testCloseElement() throws Exception {
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
BodyTubeHandler handler = new BodyTubeHandler(null, stage, new WarningSet());
|
||||
BodyTube component = (BodyTube) getField(handler, "bodyTube");
|
||||
HashMap<String, String> attributes = new HashMap<String, String>();
|
||||
@ -134,7 +134,7 @@ public class BodyTubeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testGetComponent() throws Exception {
|
||||
Assert.assertTrue(new BodyTubeHandler(null, new Stage(), new WarningSet()).getComponent() instanceof BodyTube);
|
||||
Assert.assertTrue(new BodyTubeHandler(null, new AxialStage(), new WarningSet()).getComponent() instanceof BodyTube);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,7 +144,7 @@ public class BodyTubeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testGetMaterialType() throws Exception {
|
||||
Assert.assertEquals(Material.Type.BULK, new BodyTubeHandler(null, new Stage(), new WarningSet()).getMaterialType());
|
||||
Assert.assertEquals(Material.Type.BULK, new BodyTubeHandler(null, new AxialStage(), new WarningSet()).getMaterialType());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import net.sf.openrocket.file.simplesax.PlainTextHandler;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.rocketcomponent.ExternalComponent;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
@ -39,7 +39,7 @@ public class NoseConeHandlerTest extends RocksimTestBase {
|
||||
//success
|
||||
}
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
NoseConeHandler handler = new NoseConeHandler(null, stage, new WarningSet());
|
||||
NoseCone component = (NoseCone) getField(handler, "noseCone");
|
||||
assertContains(component, stage.getChildren());
|
||||
@ -52,8 +52,8 @@ public class NoseConeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testOpenElement() throws Exception {
|
||||
Assert.assertEquals(PlainTextHandler.INSTANCE, new NoseConeHandler(null, new Stage(), new WarningSet()).openElement(null, null, null));
|
||||
Assert.assertNotNull(new NoseConeHandler(null, new Stage(), new WarningSet()).openElement("AttachedParts", null, null));
|
||||
Assert.assertEquals(PlainTextHandler.INSTANCE, new NoseConeHandler(null, new AxialStage(), new WarningSet()).openElement(null, null, null));
|
||||
Assert.assertNotNull(new NoseConeHandler(null, new AxialStage(), new WarningSet()).openElement("AttachedParts", null, null));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,7 +65,7 @@ public class NoseConeHandlerTest extends RocksimTestBase {
|
||||
@Test
|
||||
public void testCloseElement() throws Exception {
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
HashMap<String, String> attributes = new HashMap<String, String>();
|
||||
WarningSet warnings = new WarningSet();
|
||||
|
||||
@ -188,7 +188,7 @@ public class NoseConeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testGetComponent() throws Exception {
|
||||
Assert.assertTrue(new NoseConeHandler(null, new Stage(), new WarningSet()).getComponent() instanceof NoseCone);
|
||||
Assert.assertTrue(new NoseConeHandler(null, new AxialStage(), new WarningSet()).getComponent() instanceof NoseCone);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -198,6 +198,6 @@ public class NoseConeHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@Test
|
||||
public void testGetMaterialType() throws Exception {
|
||||
Assert.assertEquals(Material.Type.BULK, new NoseConeHandler(null, new Stage(), new WarningSet()).getMaterialType());
|
||||
Assert.assertEquals(Material.Type.BULK, new NoseConeHandler(null, new AxialStage(), new WarningSet()).getMaterialType());
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import net.sf.openrocket.file.RocketLoadException;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.LaunchLug;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
|
||||
import org.junit.Assert;
|
||||
|
||||
@ -85,13 +85,13 @@ public class RocksimLoaderTest extends BaseTestCase {
|
||||
Assert.assertEquals("Three Stage Everything Included Rocket", doc.getRocket().getName());
|
||||
Assert.assertEquals(0, loader.getWarnings().size());
|
||||
Assert.assertEquals(3, rocket.getStageCount());
|
||||
Stage stage1 = (Stage) rocket.getChild(0);
|
||||
AxialStage stage1 = (AxialStage) rocket.getChild(0);
|
||||
Assert.assertFalse(stage1.isMassOverridden());
|
||||
Assert.assertFalse(stage1.isCGOverridden());
|
||||
Stage stage2 = (Stage) rocket.getChild(1);
|
||||
AxialStage stage2 = (AxialStage) rocket.getChild(1);
|
||||
Assert.assertFalse(stage2.isMassOverridden());
|
||||
Assert.assertFalse(stage2.isCGOverridden());
|
||||
Stage stage3 = (Stage) rocket.getChild(2);
|
||||
AxialStage stage3 = (AxialStage) rocket.getChild(2);
|
||||
Assert.assertFalse(stage3.isMassOverridden());
|
||||
Assert.assertFalse(stage3.isCGOverridden());
|
||||
|
||||
@ -109,9 +109,9 @@ public class RocksimLoaderTest extends BaseTestCase {
|
||||
Assert.assertNotNull(rocket);
|
||||
Assert.assertEquals("Three Stage Everything Included Rocket - Override Total Mass/CG", doc.getRocket().getName());
|
||||
Assert.assertEquals(3, rocket.getStageCount());
|
||||
stage1 = (Stage) rocket.getChild(0);
|
||||
stage2 = (Stage) rocket.getChild(1);
|
||||
stage3 = (Stage) rocket.getChild(2);
|
||||
stage1 = (AxialStage) rocket.getChild(0);
|
||||
stage2 = (AxialStage) rocket.getChild(1);
|
||||
stage3 = (AxialStage) rocket.getChild(2);
|
||||
|
||||
//Do some 1st level and simple asserts; the idea here is to not do a deep validation as that
|
||||
//should have been covered elsewhere. Assert that the stage overrides are correct.
|
||||
@ -170,7 +170,7 @@ public class RocksimLoaderTest extends BaseTestCase {
|
||||
rocket = doc.getRocket();
|
||||
Assert.assertNotNull(rocket);
|
||||
Assert.assertEquals(1, rocket.getStageCount());
|
||||
Stage stage1 = (Stage) rocket.getChild(0);
|
||||
AxialStage stage1 = (AxialStage) rocket.getChild(0);
|
||||
Assert.assertEquals("Nose cone", stage1.getChild(0).getName());
|
||||
Assert.assertEquals("Forward Body tube", stage1.getChild(1).getName());
|
||||
Assert.assertEquals("Aft Body tube", stage1.getChild(2).getName());
|
||||
|
@ -9,7 +9,7 @@ import net.sf.openrocket.file.rocksim.RocksimNoseConeCode;
|
||||
import net.sf.openrocket.file.simplesax.PlainTextHandler;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.rocketcomponent.ExternalComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import org.junit.Assert;
|
||||
|
||||
@ -36,7 +36,7 @@ public class TransitionHandlerTest extends RocksimTestBase {
|
||||
//success
|
||||
}
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
TransitionHandler handler = new TransitionHandler(null, stage, new WarningSet());
|
||||
Transition component = (Transition) getField(handler, "transition");
|
||||
assertContains(component, stage.getChildren());
|
||||
@ -49,7 +49,7 @@ public class TransitionHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testOpenElement() throws Exception {
|
||||
Assert.assertEquals(PlainTextHandler.INSTANCE, new TransitionHandler(null, new Stage(), new WarningSet()).openElement(null, null, null));
|
||||
Assert.assertEquals(PlainTextHandler.INSTANCE, new TransitionHandler(null, new AxialStage(), new WarningSet()).openElement(null, null, null));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,7 +60,7 @@ public class TransitionHandlerTest extends RocksimTestBase {
|
||||
@org.junit.Test
|
||||
public void testCloseElement() throws Exception {
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
HashMap<String, String> attributes = new HashMap<String, String>();
|
||||
WarningSet warnings = new WarningSet();
|
||||
|
||||
@ -214,7 +214,7 @@ public class TransitionHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testGetComponent() throws Exception {
|
||||
Assert.assertTrue(new TransitionHandler(null, new Stage(), new WarningSet()).getComponent() instanceof Transition);
|
||||
Assert.assertTrue(new TransitionHandler(null, new AxialStage(), new WarningSet()).getComponent() instanceof Transition);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -224,7 +224,7 @@ public class TransitionHandlerTest extends RocksimTestBase {
|
||||
*/
|
||||
@org.junit.Test
|
||||
public void testGetMaterialType() throws Exception {
|
||||
Assert.assertEquals(Material.Type.BULK, new TransitionHandler(null, new Stage(), new WarningSet()).getMaterialType());
|
||||
Assert.assertEquals(Material.Type.BULK, new TransitionHandler(null, new AxialStage(), new WarningSet()).getMaterialType());
|
||||
}
|
||||
|
||||
|
||||
|
@ -356,7 +356,7 @@ public class ConfigurationTest extends BaseTestCase {
|
||||
// TODO: get units correct, these units are prob wrong, are lengths are CM, mass are grams
|
||||
|
||||
Rocket rocket;
|
||||
Stage stage;
|
||||
AxialStage stage;
|
||||
NoseCone nosecone;
|
||||
BodyTube tube1;
|
||||
TrapezoidFinSet finset;
|
||||
@ -370,7 +370,7 @@ public class ConfigurationTest extends BaseTestCase {
|
||||
final double R2 = 2.3 / 2;
|
||||
|
||||
rocket = new Rocket();
|
||||
stage = new Stage();
|
||||
stage = new AxialStage();
|
||||
stage.setName("Stage1");
|
||||
|
||||
nosecone = new NoseCone(Transition.Shape.OGIVE, 10.0, R);
|
||||
@ -498,7 +498,7 @@ public class ConfigurationTest extends BaseTestCase {
|
||||
|
||||
Rocket rocket = makeSingleStageTestRocket();
|
||||
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
stage.setName("Booster");
|
||||
|
||||
BodyTube boosterTube = new BodyTube(9.0, R, BT_T);
|
||||
|
@ -251,7 +251,7 @@ public class FinSetTest extends BaseTestCase {
|
||||
|
||||
// Create test rocket
|
||||
Rocket rocket = new Rocket();
|
||||
Stage stage = new Stage();
|
||||
AxialStage stage = new AxialStage();
|
||||
BodyTube body = new BodyTube();
|
||||
|
||||
rocket.addChild(stage);
|
||||
|
@ -27,7 +27,7 @@ public class StageTest extends BaseTestCase {
|
||||
Rocket rocket = new Rocket();
|
||||
rocket.setName("Rocket");
|
||||
|
||||
Stage sustainer = new Stage();
|
||||
AxialStage sustainer = new AxialStage();
|
||||
sustainer.setName("Sustainer stage");
|
||||
RocketComponent sustainerNose = new NoseCone(Transition.Shape.CONICAL, 2.0, tubeRadius);
|
||||
sustainerNose.setName("Sustainer Nosecone");
|
||||
@ -37,7 +37,7 @@ public class StageTest extends BaseTestCase {
|
||||
sustainer.addChild(sustainerBody);
|
||||
rocket.addChild(sustainer);
|
||||
|
||||
Stage core = new Stage();
|
||||
AxialStage core = new AxialStage();
|
||||
core.setName("Core stage");
|
||||
rocket.addChild(core);
|
||||
BodyTube coreUpperBody = new BodyTube(1.8, tubeRadius, 0.01);
|
||||
@ -52,10 +52,10 @@ public class StageTest extends BaseTestCase {
|
||||
return rocket;
|
||||
}
|
||||
|
||||
public Stage createBooster() {
|
||||
public AxialStage createBooster() {
|
||||
double tubeRadius = 0.8;
|
||||
|
||||
Stage booster = new Stage();
|
||||
AxialStage booster = new AxialStage();
|
||||
booster.setName("Booster Stage");
|
||||
booster.setOutside(true);
|
||||
RocketComponent boosterNose = new NoseCone(Transition.Shape.CONICAL, 2.0, tubeRadius);
|
||||
@ -108,7 +108,7 @@ public class StageTest extends BaseTestCase {
|
||||
RocketComponent rocket = createTestRocket();
|
||||
|
||||
// Sustainer Stage
|
||||
Stage sustainer = (Stage) rocket.getChild(0);
|
||||
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
||||
RocketComponent sustainerNose = sustainer.getChild(0);
|
||||
RocketComponent sustainerBody = sustainer.getChild(1);
|
||||
assertThat(" createTestRocket failed: is sustainer stage an ancestor of the sustainer stage? ", sustainer.isAncestor(sustainer), equalTo(false));
|
||||
@ -156,7 +156,7 @@ public class StageTest extends BaseTestCase {
|
||||
String rocketTree = rocket.toDebugTree();
|
||||
|
||||
// Core Stage
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
double expectedCoreLength = 6.0;
|
||||
assertThat(" createTestRocket failed: Core size: ", core.getLength(), equalTo(expectedCoreLength));
|
||||
double expectedCoreX = 5;
|
||||
@ -205,7 +205,7 @@ public class StageTest extends BaseTestCase {
|
||||
public void testSetStagePosition_topOfStack() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage sustainer = (Stage) rocket.getChild(0);
|
||||
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
||||
Coordinate expectedPosition = new Coordinate(0, 0., 0.); // i.e. half the tube length
|
||||
Coordinate targetPosition = new Coordinate(+4.0, 0., 0.);
|
||||
|
||||
@ -232,8 +232,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testBoosterInitialization() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage boosterSet = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage boosterSet = createBooster();
|
||||
core.addChild(boosterSet);
|
||||
|
||||
double targetOffset = 0;
|
||||
@ -268,8 +268,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testBoosterInstanceLocation_BOTTOM() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage boosterSet = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage boosterSet = createBooster();
|
||||
core.addChild(boosterSet);
|
||||
|
||||
double targetOffset = 0;
|
||||
@ -313,8 +313,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testSetStagePosition_outsideABSOLUTE() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
double targetX = +17.0;
|
||||
@ -344,7 +344,7 @@ public class StageTest extends BaseTestCase {
|
||||
public void testSetStagePosition_outsideTopOfStack() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage sustainer = (Stage) rocket.getChild(0);
|
||||
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
||||
Coordinate targetPosition = new Coordinate(+4.0, 0., 0.);
|
||||
Coordinate expectedPosition = targetPosition;
|
||||
|
||||
@ -376,8 +376,8 @@ public class StageTest extends BaseTestCase {
|
||||
@Test
|
||||
public void testSetStagePosition_outsideTOP() {
|
||||
Rocket rocket = this.createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
double targetOffset = +2.0;
|
||||
@ -406,8 +406,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testSetStagePosition_outsideMIDDLE() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
// when 'external' the stage should be freely movable
|
||||
@ -436,8 +436,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testSetStagePosition_outsideBOTTOM() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
// vv function under test
|
||||
@ -465,8 +465,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testAxial_setTOP_getABSOLUTE() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
double targetOffset = +4.50;
|
||||
@ -489,8 +489,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testAxial_setTOP_getAFTER() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
double targetOffset = +4.50;
|
||||
@ -513,8 +513,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testAxial_setTOP_getMIDDLE() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
double targetOffset = +4.50;
|
||||
@ -538,8 +538,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testAxial_setTOP_getBOTTOM() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
|
||||
@ -563,8 +563,8 @@ public class StageTest extends BaseTestCase {
|
||||
public void testAxial_setBOTTOM_getTOP() {
|
||||
// setup
|
||||
RocketComponent rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage booster = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage booster = createBooster();
|
||||
core.addChild(booster);
|
||||
|
||||
double targetOffset = +4.50;
|
||||
@ -586,9 +586,9 @@ public class StageTest extends BaseTestCase {
|
||||
public void testOutsideStageRepositionTOPAfterAdd() {
|
||||
final double boosterRadius = 0.8;
|
||||
Rocket rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
|
||||
Stage booster = new Stage();
|
||||
AxialStage booster = new AxialStage();
|
||||
booster.setName("Booster Stage");
|
||||
core.addChild(booster);
|
||||
final double targetOffset = +2.50;
|
||||
@ -623,11 +623,11 @@ public class StageTest extends BaseTestCase {
|
||||
@Test
|
||||
public void testStageInitializationMethodValueOrder() {
|
||||
Rocket rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage boosterA = createBooster();
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage boosterA = createBooster();
|
||||
boosterA.setName("Booster A Stage");
|
||||
core.addChild(boosterA);
|
||||
Stage boosterB = createBooster();
|
||||
AxialStage boosterB = createBooster();
|
||||
boosterB.setName("Booster B Stage");
|
||||
core.addChild(boosterB);
|
||||
|
||||
@ -653,13 +653,13 @@ public class StageTest extends BaseTestCase {
|
||||
@Test
|
||||
public void testStageNumbering() {
|
||||
Rocket rocket = createTestRocket();
|
||||
Stage sustainer = (Stage) rocket.getChild(0);
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
Stage boosterA = createBooster();
|
||||
AxialStage sustainer = (AxialStage) rocket.getChild(0);
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
AxialStage boosterA = createBooster();
|
||||
boosterA.setName("Booster A Stage");
|
||||
core.addChild(boosterA);
|
||||
boosterA.setAxialOffset(Position.BOTTOM, 0.0);
|
||||
Stage boosterB = createBooster();
|
||||
AxialStage boosterB = createBooster();
|
||||
boosterB.setName("Booster B Stage");
|
||||
core.addChild(boosterB);
|
||||
boosterB.setAxialOffset(Position.BOTTOM, 0);
|
||||
@ -687,7 +687,7 @@ public class StageTest extends BaseTestCase {
|
||||
@Test
|
||||
public void testToAbsolute() {
|
||||
Rocket rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
String treeDump = rocket.toDebugTree();
|
||||
|
||||
Coordinate input = new Coordinate(3, 0, 0);
|
||||
@ -700,7 +700,7 @@ public class StageTest extends BaseTestCase {
|
||||
@Test
|
||||
public void testToRelative() {
|
||||
Rocket rocket = createTestRocket();
|
||||
Stage core = (Stage) rocket.getChild(1);
|
||||
AxialStage core = (AxialStage) rocket.getChild(1);
|
||||
RocketComponent ubody = core.getChild(0);
|
||||
RocketComponent lbody = core.getChild(1);
|
||||
|
||||
|
@ -48,7 +48,7 @@ import net.sf.openrocket.preset.ComponentPreset;
|
||||
import net.sf.openrocket.rocketcomponent.ComponentAssembly;
|
||||
import net.sf.openrocket.rocketcomponent.ExternalComponent;
|
||||
import net.sf.openrocket.rocketcomponent.OutsideComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
|
@ -16,7 +16,7 @@ import net.sf.openrocket.gui.components.UnitSelector;
|
||||
import net.sf.openrocket.gui.components.StyledLabel.Style;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.unit.UnitGroup;
|
||||
@ -30,18 +30,18 @@ public class StageConfig extends RocketComponentConfig {
|
||||
|
||||
// Stage separation config (for non-first stage)
|
||||
if (component.getStageNumber() > 0) {
|
||||
JPanel tab = separationTab((Stage) component);
|
||||
JPanel tab = separationTab((AxialStage) component);
|
||||
tabbedPane.insertTab(trans.get("tab.Separation"), null, tab,
|
||||
trans.get("tab.Separation.ttip"), 1);
|
||||
}
|
||||
|
||||
// only stages which are actually off-centerline will get the dialog here:
|
||||
if( ! component.isCenterline()){
|
||||
tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Parallel"), null, parallelTab( (Stage) component ), trans.get("RocketCompCfg.tab.ParallelComment"), 2);
|
||||
tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Parallel"), null, parallelTab( (AxialStage) component ), trans.get("RocketCompCfg.tab.ParallelComment"), 2);
|
||||
}
|
||||
}
|
||||
|
||||
private JPanel parallelTab( final Stage stage ){
|
||||
private JPanel parallelTab( final AxialStage stage ){
|
||||
JPanel motherPanel = new JPanel( new MigLayout("fill"));
|
||||
|
||||
// set radial distance
|
||||
@ -107,7 +107,7 @@ public class StageConfig extends RocketComponentConfig {
|
||||
return motherPanel;
|
||||
}
|
||||
|
||||
private JPanel separationTab(Stage stage) {
|
||||
private JPanel separationTab(AxialStage stage) {
|
||||
JPanel panel = new JPanel(new MigLayout("fill"));
|
||||
|
||||
// Select separation event
|
||||
|
@ -22,7 +22,7 @@ import net.sf.openrocket.gui.adaptors.EnumModel;
|
||||
import net.sf.openrocket.gui.util.GUIUtil;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration.SeparationEvent;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
@ -36,7 +36,7 @@ public class SeparationSelectionDialog extends JDialog {
|
||||
|
||||
private StageSeparationConfiguration newConfiguration;
|
||||
|
||||
public SeparationSelectionDialog(Window parent, final Rocket rocket, final Stage component) {
|
||||
public SeparationSelectionDialog(Window parent, final Rocket rocket, final AxialStage component) {
|
||||
super(parent, trans.get("edtmotorconfdlg.title.Selectseparationconf"), Dialog.ModalityType.APPLICATION_MODAL);
|
||||
final String id = rocket.getDefaultConfiguration().getFlightConfigurationID();
|
||||
|
||||
|
@ -44,7 +44,7 @@ import net.sf.openrocket.motor.Motor;
|
||||
import net.sf.openrocket.rocketcomponent.Configuration;
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.startup.Preferences;
|
||||
import net.sf.openrocket.util.Color;
|
||||
@ -417,7 +417,7 @@ public class PhotoPanel extends JPanel implements GLEventListener {
|
||||
|
||||
//Figure out the lowest stage shown
|
||||
final int currentStageNumber = configuration.getActiveStages()[configuration.getActiveStages().length-1];
|
||||
final Stage currentStage = (Stage)configuration.getRocket().getChild(currentStageNumber);
|
||||
final AxialStage currentStage = (AxialStage)configuration.getRocket().getChild(currentStageNumber);
|
||||
|
||||
final String motorID = configuration.getFlightConfigurationID();
|
||||
final Iterator<MotorMount> iterator = configuration.motorIterator();
|
||||
@ -427,7 +427,7 @@ public class PhotoPanel extends JPanel implements GLEventListener {
|
||||
//If this mount is not in currentStage continue on to the next one.
|
||||
RocketComponent parent = ((RocketComponent)mount);
|
||||
while ( null != (parent = parent.getParent()) ){
|
||||
if ( parent instanceof Stage ){
|
||||
if ( parent instanceof AxialStage ){
|
||||
if ( parent != currentStage )
|
||||
continue motor;
|
||||
break;
|
||||
|
@ -34,6 +34,7 @@ import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.logging.Markers;
|
||||
import net.sf.openrocket.rocketcomponent.BodyComponent;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.BoosterSet;
|
||||
import net.sf.openrocket.rocketcomponent.Bulkhead;
|
||||
import net.sf.openrocket.rocketcomponent.CenteringRing;
|
||||
import net.sf.openrocket.rocketcomponent.EllipticalFinSet;
|
||||
@ -44,10 +45,12 @@ import net.sf.openrocket.rocketcomponent.LaunchLug;
|
||||
import net.sf.openrocket.rocketcomponent.MassComponent;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.Parachute;
|
||||
import net.sf.openrocket.rocketcomponent.PodSet;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.ShockCord;
|
||||
import net.sf.openrocket.rocketcomponent.Streamer;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import net.sf.openrocket.rocketcomponent.TrapezoidFinSet;
|
||||
import net.sf.openrocket.rocketcomponent.TubeCoupler;
|
||||
@ -70,6 +73,8 @@ import org.slf4j.LoggerFactory;
|
||||
*/
|
||||
|
||||
public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
private static final long serialVersionUID = 4315680855765544950L;
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(ComponentAddButtons.class);
|
||||
private static final Translator trans = Application.getTranslator();
|
||||
|
||||
@ -105,12 +110,16 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
this.viewport = viewport;
|
||||
|
||||
buttons = new ComponentButton[ROWS][];
|
||||
for( int rowCur = 0; rowCur < ROWS; rowCur++){
|
||||
buttons[rowCur]=null;
|
||||
}
|
||||
int row = 0;
|
||||
|
||||
int col = 0;
|
||||
////////////////////////////////////////////
|
||||
|
||||
//// Body components and fin sets
|
||||
addButtonRow(trans.get("compaddbuttons.Bodycompandfinsets"), row,
|
||||
add(new JLabel(trans.get("compaddbuttons.Bodycompandfinsets")), "span, gaptop 0, wrap");
|
||||
addButtonGroup(row,
|
||||
//// Nose cone
|
||||
new BodyComponentButton(NoseCone.class, trans.get("compaddbuttons.Nosecone")),
|
||||
//// Body tube
|
||||
@ -127,14 +136,13 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
new FinButton(TubeFinSet.class, trans.get("compaddbuttons.Tubefin")),
|
||||
//// Launch lug
|
||||
new FinButton(LaunchLug.class, trans.get("compaddbuttons.Launchlug")));
|
||||
|
||||
row++;
|
||||
|
||||
|
||||
/////////////////////////////////////////////
|
||||
|
||||
//// Inner component
|
||||
addButtonRow(trans.get("compaddbuttons.Innercomponent"), row,
|
||||
add(new JLabel(trans.get("compaddbuttons.Innercomponent")), "span, gaptop unrel, wrap");
|
||||
addButtonGroup(row,
|
||||
//// Inner tube
|
||||
new ComponentButton(InnerTube.class, trans.get("compaddbuttons.Innertube")),
|
||||
//// Coupler
|
||||
@ -149,9 +157,23 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
row++;
|
||||
|
||||
////////////////////////////////////////////
|
||||
add(new JLabel(trans.get("compaddbuttons.assembly")), "span 3");
|
||||
add(new JLabel(trans.get("compaddbuttons.Massobjects")), "span, gaptop unrel, wrap");
|
||||
|
||||
// RocketActions.NewStageAct.ttip.Newstage = Add a new stage to the rocket design.
|
||||
// RocketActions.NewStageAct.ttip.newBooster = Add a new set booster stage to the rocket design.
|
||||
// RocketActions.NewStageAct.ttip.newPods = Add a new set of pods to the rocket design.
|
||||
|
||||
//// Component Assembly Components:
|
||||
ComponentButton[] buttonsToAdd = {
|
||||
new ComponentButton(AxialStage.class, trans.get("RocketActions.NewStageAct.Newstage")),
|
||||
new ComponentButton(BoosterSet.class, trans.get("compaddbuttons.newBooster.lbl")),
|
||||
new ComponentButton(PodSet.class, trans.get("compaddbuttons.newPods.lbl"))};
|
||||
addButtonGroup(row, buttonsToAdd);
|
||||
|
||||
//// Mass objects
|
||||
addButtonRow(trans.get("compaddbuttons.Massobjects"), row,
|
||||
// NOTE: These are on the same line as the assemblies above
|
||||
addButtonGroup(row,
|
||||
//// Parachute
|
||||
new ComponentButton(Parachute.class, trans.get("compaddbuttons.Parachute")),
|
||||
//// Streamer
|
||||
@ -160,7 +182,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
new ComponentButton(ShockCord.class, trans.get("compaddbuttons.Shockcord")),
|
||||
// new ComponentButton("Motor clip"),
|
||||
// new ComponentButton("Payload"),
|
||||
//// Mass\ncomponent
|
||||
//// Mass component
|
||||
new ComponentButton(MassComponent.class, trans.get("compaddbuttons.Masscomponent")));
|
||||
|
||||
|
||||
@ -168,7 +190,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
int w = 0, h = 0;
|
||||
|
||||
for (row = 0; row < buttons.length; row++) {
|
||||
for (int col = 0; col < buttons[row].length; col++) {
|
||||
for (col = 0; col < buttons[row].length; col++) {
|
||||
Dimension d = buttons[row][col].getPreferredSize();
|
||||
if (d.width > w)
|
||||
w = d.width;
|
||||
@ -182,7 +204,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
height = h;
|
||||
Dimension d = new Dimension(width, height);
|
||||
for (row = 0; row < buttons.length; row++) {
|
||||
for (int col = 0; col < buttons[row].length; col++) {
|
||||
for (col = 0; col < buttons[row].length; col++) {
|
||||
buttons[row][col].setMinimumSize(d);
|
||||
buttons[row][col].setPreferredSize(d);
|
||||
buttons[row][col].getComponent(0).validate();
|
||||
@ -210,27 +232,32 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
|
||||
|
||||
/**
|
||||
* Adds a row of buttons to the panel.
|
||||
* Adds a buttons to the panel in a row. Assumes.
|
||||
*
|
||||
* @param label Label placed before the row
|
||||
* @param row Row number
|
||||
* @param b List of ComponentButtons to place on the row
|
||||
*/
|
||||
private void addButtonRow(String label, int row, ComponentButton... b) {
|
||||
if (row > 0)
|
||||
add(new JLabel(label), "span, gaptop unrel, wrap");
|
||||
else
|
||||
add(new JLabel(label), "span, gaptop 0, wrap");
|
||||
private void addButtonGroup(int row, ComponentButton... b) {
|
||||
|
||||
int col = 0;
|
||||
buttons[row] = new ComponentButton[b.length];
|
||||
int oldLen=0;
|
||||
if( null == buttons[row] ){
|
||||
buttons[row] = new ComponentButton[b.length];
|
||||
}else{
|
||||
ComponentButton[] oldArr = buttons[row];
|
||||
oldLen = oldArr.length;
|
||||
ComponentButton[] newArr = new ComponentButton[oldLen + b.length];
|
||||
System.arraycopy(oldArr, 0, newArr, 0, oldLen);
|
||||
buttons[row] = newArr;
|
||||
}
|
||||
|
||||
for (int i = 0; i < b.length; i++) {
|
||||
buttons[row][col] = b[i];
|
||||
if (i < b.length - 1)
|
||||
add(b[i], BUTTONPARAM);
|
||||
else
|
||||
add(b[i], BUTTONPARAM + ", wrap");
|
||||
col++;
|
||||
int dstCol = oldLen;
|
||||
int srcCol=0;
|
||||
while( srcCol < b.length) {
|
||||
buttons[row][dstCol] = b[srcCol];
|
||||
add(b[srcCol], BUTTONPARAM);
|
||||
dstCol++;
|
||||
srcCol++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -272,6 +299,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
* Class for a component button.
|
||||
*/
|
||||
private class ComponentButton extends JButton implements TreeSelectionListener {
|
||||
private static final long serialVersionUID = 4510127994205259083L;
|
||||
protected Class<? extends RocketComponent> componentClass = null;
|
||||
private Constructor<? extends RocketComponent> constructor = null;
|
||||
|
||||
@ -466,7 +494,8 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
* A class suitable for BodyComponents. Addition is allowed ...
|
||||
*/
|
||||
private class BodyComponentButton extends ComponentButton {
|
||||
|
||||
private static final long serialVersionUID = 1574998068156786363L;
|
||||
|
||||
public BodyComponentButton(Class<? extends RocketComponent> c, String text) {
|
||||
super(c, text);
|
||||
}
|
||||
@ -599,6 +628,11 @@ public class ComponentAddButtons extends JPanel implements Scrollable {
|
||||
* Class for fin sets, that attach only to BodyTubes.
|
||||
*/
|
||||
private class FinButton extends ComponentButton {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -219204844803871258L;
|
||||
|
||||
public FinButton(Class<? extends RocketComponent> c, String text) {
|
||||
super(c, text);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import javax.swing.ImageIcon;
|
||||
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.BoosterSet;
|
||||
import net.sf.openrocket.rocketcomponent.Bulkhead;
|
||||
import net.sf.openrocket.rocketcomponent.CenteringRing;
|
||||
import net.sf.openrocket.rocketcomponent.EllipticalFinSet;
|
||||
@ -22,6 +23,7 @@ import net.sf.openrocket.rocketcomponent.MassComponent;
|
||||
import net.sf.openrocket.rocketcomponent.MassComponent.MassComponentType;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.Parachute;
|
||||
import net.sf.openrocket.rocketcomponent.PodSet;
|
||||
import net.sf.openrocket.rocketcomponent.ShockCord;
|
||||
import net.sf.openrocket.rocketcomponent.Streamer;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
@ -79,6 +81,10 @@ public class ComponentIcons {
|
||||
ShockCord.class);
|
||||
load("mass", trans.get("ComponentIcons.Masscomponent"),
|
||||
MassComponent.class);
|
||||
load("boosters", trans.get("ComponentIcons.Boosters"),
|
||||
BoosterSet.class);
|
||||
load("pods", trans.get("ComponentIcons.Pods"),
|
||||
PodSet.class);
|
||||
// // Mass components
|
||||
loadMassTypeIcon("mass", trans.get("ComponentIcons.Masscomponent"),
|
||||
MassComponentType.MASSCOMPONENT);
|
||||
|
@ -24,7 +24,7 @@ import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
|
||||
import net.sf.openrocket.rocketcomponent.ComponentChangeListener;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.startup.Preferences;
|
||||
import net.sf.openrocket.util.Pair;
|
||||
@ -174,7 +174,7 @@ public class RocketActions {
|
||||
return false;
|
||||
|
||||
// Cannot remove last stage
|
||||
if ((c instanceof Stage) && (c.getParent().getChildCount() == 1)) {
|
||||
if ((c instanceof AxialStage) && (c.getParent().getChildCount() == 1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -597,7 +597,7 @@ public class RocketActions {
|
||||
|
||||
ComponentConfigDialog.hideDialog();
|
||||
|
||||
RocketComponent stage = new Stage();
|
||||
RocketComponent stage = new AxialStage();
|
||||
//// Booster stage
|
||||
stage.setName(trans.get("RocketActions.ActBoosterstage"));
|
||||
//// Add stage
|
||||
|
@ -17,17 +17,17 @@ import net.sf.openrocket.formatting.RocketDescriptor;
|
||||
import net.sf.openrocket.gui.dialogs.flightconfiguration.SeparationSelectionDialog;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.unit.UnitGroup;
|
||||
|
||||
public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage> {
|
||||
public class SeparationConfigurationPanel extends FlightConfigurablePanel<AxialStage> {
|
||||
|
||||
static final Translator trans = Application.getTranslator();
|
||||
private RocketDescriptor descriptor = Application.getInjector().getInstance(RocketDescriptor.class);
|
||||
|
||||
private FlightConfigurableTableModel<Stage> separationTableModel;
|
||||
private FlightConfigurableTableModel<AxialStage> separationTableModel;
|
||||
private final JButton selectSeparationButton;
|
||||
private final JButton resetDeploymentButton;
|
||||
|
||||
@ -65,9 +65,9 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage>
|
||||
@Override
|
||||
protected JTable initializeTable() {
|
||||
//// Separation selection
|
||||
separationTableModel = new FlightConfigurableTableModel<Stage>(Stage.class, rocket) {
|
||||
separationTableModel = new FlightConfigurableTableModel<AxialStage>(AxialStage.class, rocket) {
|
||||
@Override
|
||||
protected boolean includeComponent(Stage component) {
|
||||
protected boolean includeComponent(AxialStage component) {
|
||||
return component.getStageNumber() > 0;
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage>
|
||||
}
|
||||
|
||||
private void selectDeployment() {
|
||||
Stage stage = getSelectedComponent();
|
||||
AxialStage stage = getSelectedComponent();
|
||||
if (stage == null) {
|
||||
return;
|
||||
}
|
||||
@ -102,7 +102,7 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage>
|
||||
}
|
||||
|
||||
private void resetDeployment() {
|
||||
Stage stage = getSelectedComponent();
|
||||
AxialStage stage = getSelectedComponent();
|
||||
if (stage == null) {
|
||||
return;
|
||||
}
|
||||
@ -116,10 +116,10 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage>
|
||||
resetDeploymentButton.setEnabled(componentSelected);
|
||||
}
|
||||
|
||||
private class SeparationTableCellRenderer extends FlightConfigurablePanel<Stage>.FlightConfigurableCellRenderer {
|
||||
private class SeparationTableCellRenderer extends FlightConfigurablePanel<AxialStage>.FlightConfigurableCellRenderer {
|
||||
|
||||
@Override
|
||||
protected JLabel format(Stage stage, String configId, JLabel label) {
|
||||
protected JLabel format(AxialStage stage, String configId, JLabel label) {
|
||||
StageSeparationConfiguration sepConfig = stage.getStageSeparationConfiguration().get(configId);
|
||||
String spec = getSeparationSpecification(sepConfig);
|
||||
label.setText(spec);
|
||||
|
@ -21,7 +21,7 @@ import net.sf.openrocket.rocketcomponent.Configuration;
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.simulation.FlightData;
|
||||
import net.sf.openrocket.simulation.exception.SimulationException;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
@ -341,7 +341,7 @@ public class DesignReport {
|
||||
boolean topBorder = false;
|
||||
for (RocketComponent c : rocket) {
|
||||
|
||||
if (c instanceof Stage) {
|
||||
if (c instanceof AxialStage) {
|
||||
config.setToStage(stage);
|
||||
stage++;
|
||||
stageMass = massCalc.getCG(config, MassCalcType.LAUNCH_MASS).weight;
|
||||
|
@ -6,7 +6,7 @@ package net.sf.openrocket.gui.print.components;
|
||||
import net.sf.openrocket.gui.print.OpenRocketPrintable;
|
||||
import net.sf.openrocket.gui.print.PrintableContext;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.TreeExpansionEvent;
|
||||
@ -70,7 +70,7 @@ public class RocketPrintTree extends JTree {
|
||||
toAddTo = parent;
|
||||
}
|
||||
for (RocketComponent stage : stages) {
|
||||
if (stage instanceof Stage) {
|
||||
if (stage instanceof AxialStage) {
|
||||
toAddTo.add(createNamedVector(stage.getName(), createPrintTreeNode(true), stage.getStageNumber()));
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||
import net.sf.openrocket.rocketcomponent.RingComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.ShockCord;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.Streamer;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
import net.sf.openrocket.unit.Unit;
|
||||
@ -150,7 +150,7 @@ public class PartsDetailVisitorStrategy {
|
||||
private void handle (RocketComponent component) {
|
||||
//This ugly if-then-else construct is not object oriented. Originally it was an elegant, and very OO savy, design
|
||||
//using the Visitor pattern. Unfortunately, it was misunderstood and was removed.
|
||||
if (component instanceof Stage) {
|
||||
if (component instanceof AxialStage) {
|
||||
try {
|
||||
if (grid != null) {
|
||||
document.add(grid);
|
||||
|
@ -32,7 +32,7 @@ import net.sf.openrocket.rocketcomponent.MotorConfiguration;
|
||||
import net.sf.openrocket.rocketcomponent.MotorMount;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.Stage;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.gui.rocketfigure.RocketComponentShape;
|
||||
import net.sf.openrocket.gui.scalefigure.RocketPanel;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
@ -453,7 +453,7 @@ public class RocketFigure extends AbstractScaleFigure {
|
||||
// generate shapes:
|
||||
if( comp instanceof Rocket){
|
||||
// no-op. no shapes
|
||||
}else if( comp instanceof Stage ){
|
||||
}else if( comp instanceof AxialStage ){
|
||||
// no-op; no shapes here, either.
|
||||
}else{
|
||||
// get all shapes for this component, add to return list.
|
||||
|
Loading…
x
Reference in New Issue
Block a user