[Feature] Implemented file saving for Parallel Stage auto-positioning.
radialoffset may be set to "auto" instead of a number. In this case, the radial offset of the stage will be auto positioned to just touch its parent stage. (offset = radius_parent + radius_p-stage)
This commit is contained in:
parent
e3250c9a91
commit
52ee7ba750
@ -9,7 +9,6 @@ import net.sf.openrocket.preset.ComponentPreset;
|
||||
import net.sf.openrocket.rocketcomponent.AxialStage;
|
||||
import net.sf.openrocket.rocketcomponent.BodyComponent;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.ParallelStage;
|
||||
import net.sf.openrocket.rocketcomponent.Bulkhead;
|
||||
import net.sf.openrocket.rocketcomponent.CenteringRing;
|
||||
import net.sf.openrocket.rocketcomponent.DeploymentConfiguration;
|
||||
@ -21,14 +20,15 @@ import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
|
||||
import net.sf.openrocket.rocketcomponent.FinSet;
|
||||
import net.sf.openrocket.rocketcomponent.FreeformFinSet;
|
||||
import net.sf.openrocket.rocketcomponent.InnerTube;
|
||||
import net.sf.openrocket.rocketcomponent.RailButton;
|
||||
import net.sf.openrocket.rocketcomponent.LaunchLug;
|
||||
import net.sf.openrocket.rocketcomponent.MassComponent;
|
||||
import net.sf.openrocket.rocketcomponent.MassObject;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.Parachute;
|
||||
import net.sf.openrocket.rocketcomponent.ParallelStage;
|
||||
import net.sf.openrocket.rocketcomponent.PodSet;
|
||||
import net.sf.openrocket.rocketcomponent.RadiusRingComponent;
|
||||
import net.sf.openrocket.rocketcomponent.RailButton;
|
||||
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
|
||||
import net.sf.openrocket.rocketcomponent.ReferenceType;
|
||||
import net.sf.openrocket.rocketcomponent.RingComponent;
|
||||
@ -91,6 +91,7 @@ class DocumentConfig {
|
||||
// Other
|
||||
constructors.put("stage", AxialStage.class.getConstructor(new Class<?>[0]));
|
||||
constructors.put("boosterset", ParallelStage.class.getConstructor(new Class<?>[0]));
|
||||
constructors.put("parallelstage", ParallelStage.class.getConstructor(new Class<?>[0]));
|
||||
constructors.put("podset", PodSet.class.getConstructor(new Class<?>[0]));
|
||||
|
||||
} catch (NoSuchMethodException e) {
|
||||
@ -148,12 +149,14 @@ class DocumentConfig {
|
||||
"auto",
|
||||
Reflection.findMethod(BodyTube.class, "setOuterRadiusAutomatic", boolean.class)));
|
||||
|
||||
// BoosterSet
|
||||
setters.put("BoosterSet:instancecount", new IntSetter(
|
||||
// ParallelStage
|
||||
setters.put("ParallelStage:instancecount", new IntSetter(
|
||||
Reflection.findMethod(ParallelStage.class, "setInstanceCount",int.class)));
|
||||
setters.put("BoosterSet:radialoffset", new DoubleSetter(
|
||||
Reflection.findMethod(ParallelStage.class, "setRadialOffset", double.class)));
|
||||
setters.put("BoosterSet:angleoffset", new DoubleSetter(
|
||||
setters.put("ParallelStage:radialoffset", new DoubleSetter(
|
||||
Reflection.findMethod(ParallelStage.class, "setRadialOffset", double.class),
|
||||
"auto",
|
||||
Reflection.findMethod(ParallelStage.class, "setAutoRadialOffset", boolean.class)));
|
||||
setters.put("ParallelStage:angleoffset", new DoubleSetter(
|
||||
Reflection.findMethod(ParallelStage.class, "setAngularOffset", double.class)));
|
||||
|
||||
// SymmetricComponent
|
||||
|
@ -29,9 +29,9 @@ public class AxialStageSaver extends ComponentAssemblySaver {
|
||||
}
|
||||
} else {
|
||||
if (c instanceof ParallelStage) {
|
||||
list.add("<boosterset>");
|
||||
list.add("<parallelstage>");
|
||||
instance.addParams(c, list);
|
||||
list.add("</boosterset>");
|
||||
list.add("</parallelstage>");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,9 +4,9 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.openrocket.rocketcomponent.ParallelStage;
|
||||
import net.sf.openrocket.rocketcomponent.ComponentAssembly;
|
||||
import net.sf.openrocket.rocketcomponent.Instanceable;
|
||||
import net.sf.openrocket.rocketcomponent.ParallelStage;
|
||||
import net.sf.openrocket.rocketcomponent.PodSet;
|
||||
import net.sf.openrocket.rocketcomponent.RingInstanceable;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
@ -24,11 +24,12 @@ public class ComponentAssemblySaver extends RocketComponentSaver {
|
||||
list.add("<podset>");
|
||||
instance.addParams(c, list);
|
||||
list.add("</podset>");
|
||||
} else if (c instanceof ParallelStage) {
|
||||
list.add("<boosterset>");
|
||||
instance.addParams(c, list);
|
||||
list.add("</boosterset>");
|
||||
}
|
||||
// else if (c instanceof ParallelStage) {
|
||||
// list.add("<boosterset>");
|
||||
// instance.addParams(c, list);
|
||||
// list.add("</boosterset>");
|
||||
// }
|
||||
}
|
||||
|
||||
return list;
|
||||
@ -51,16 +52,21 @@ public class ComponentAssemblySaver extends RocketComponentSaver {
|
||||
final String radoffs_tag = "radialoffset";
|
||||
final String startangle_tag = "angleoffset";
|
||||
|
||||
|
||||
if ( currentStage instanceof Instanceable) {
|
||||
int instanceCount = currentStage.getInstanceCount();
|
||||
elementsToReturn.add("<" + instCt_tag + ">" + instanceCount + "</" + instCt_tag + ">");
|
||||
if( currentStage instanceof RingInstanceable ){
|
||||
RingInstanceable ring = (RingInstanceable) currentStage;
|
||||
double radialOffset = ring.getRadialOffset();
|
||||
elementsToReturn.add("<" + radoffs_tag + ">" + radialOffset + "</" + radoffs_tag + ">");
|
||||
if(( currentStage instanceof ParallelStage )&&( ((ParallelStage)currentStage).getAutoRadialOffset() )){
|
||||
elementsToReturn.add("<" + radoffs_tag + ">auto</" + radoffs_tag + ">");
|
||||
}else{
|
||||
double radialOffset = ring.getRadialOffset();
|
||||
elementsToReturn.add("<" + radoffs_tag + ">" + radialOffset + "</" + radoffs_tag + ">");
|
||||
}
|
||||
double angularOffset = ring.getAngularOffset();
|
||||
elementsToReturn.add("<" + startangle_tag + ">" + angularOffset + "</" + startangle_tag + ">");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ public class ParallelStage extends AxialStage implements FlightConfigurableCompo
|
||||
|
||||
protected double angularSeparation = Math.PI;
|
||||
protected double angularPosition_rad = 0;
|
||||
protected boolean autoRadialPosition = true;
|
||||
protected boolean autoRadialPosition = false;
|
||||
protected double radialPosition_m = 0;
|
||||
|
||||
public ParallelStage() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user