[Bugfix] Fixed UI issues related to 'Instanceable' implementation.

- RingComponent is no longer Instanceable.
- Fixed setter settings for file loading:
    - Fixed methods references for Innstanceable-implementing classes
        - BoosterSet
        - PodSet
        - InnerTube
        - CenteringRing
        - LaunchButton
        - LaunchLug
This commit is contained in:
Daniel_M_Williams 2015-10-16 19:56:02 -04:00
parent 80c4ef5254
commit dac67b0f71
4 changed files with 81 additions and 56 deletions

View File

@ -21,9 +21,8 @@ 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.Instanceable;
import net.sf.openrocket.rocketcomponent.LaunchButton;
import net.sf.openrocket.rocketcomponent.LaunchLug;
import net.sf.openrocket.rocketcomponent.LineInstanceable;
import net.sf.openrocket.rocketcomponent.MassComponent;
import net.sf.openrocket.rocketcomponent.MassObject;
import net.sf.openrocket.rocketcomponent.NoseCone;
@ -33,7 +32,6 @@ import net.sf.openrocket.rocketcomponent.RadiusRingComponent;
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
import net.sf.openrocket.rocketcomponent.ReferenceType;
import net.sf.openrocket.rocketcomponent.RingComponent;
import net.sf.openrocket.rocketcomponent.RingInstanceable;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.ShockCord;
@ -143,6 +141,20 @@ class DocumentConfig {
// BodyComponent
setters.put("BodyComponent:length", new DoubleSetter(
Reflection.findMethod(BodyComponent.class, "setLength", double.class)));
// BodyTube
setters.put("BodyTube:radius", new DoubleSetter(
Reflection.findMethod(BodyTube.class, "setOuterRadius", double.class),
"auto",
Reflection.findMethod(BodyTube.class, "setOuterRadiusAutomatic", boolean.class)));
// BoosterSet
setters.put("BoosterSet:instancecount", new IntSetter(
Reflection.findMethod(BoosterSet.class, "setInstanceCount",int.class)));
setters.put("BoosterSet:radialoffset", new DoubleSetter(
Reflection.findMethod(BoosterSet.class, "setRadialOffset", double.class)));
setters.put("BoosterSet:angleoffset", new DoubleSetter(
Reflection.findMethod(BoosterSet.class, "setAngularOffset", double.class)));
// SymmetricComponent
setters.put("SymmetricComponent:thickness", new DoubleSetter(
@ -150,12 +162,18 @@ class DocumentConfig {
"filled",
Reflection.findMethod(SymmetricComponent.class, "setFilled", boolean.class)));
// BodyTube
setters.put("BodyTube:radius", new DoubleSetter(
Reflection.findMethod(BodyTube.class, "setOuterRadius", double.class),
"auto",
Reflection.findMethod(BodyTube.class, "setOuterRadiusAutomatic", boolean.class)));
// LaunchButton
setters.put("LaunchButton:instancecount", new IntSetter(
Reflection.findMethod(LaunchButton.class, "setInstanceCount",int.class)));
setters.put("LaunchButton:instanceseparation", new DoubleSetter(
Reflection.findMethod( LaunchButton.class, "setInstanceSeparation", double.class)));
// LaunchLug
setters.put("LaunchLug:instancecount", new IntSetter(
Reflection.findMethod(LaunchLug.class, "setInstanceCount",int.class)));
setters.put("LaunchLug:instanceseparation", new DoubleSetter(
Reflection.findMethod( LaunchLug.class, "setInstanceSeparation", double.class)));
// Transition
setters.put("Transition:shape", new EnumSetter<Transition.Shape>(
Reflection.findMethod(Transition.class, "setType", Transition.Shape.class),
@ -305,6 +323,8 @@ class DocumentConfig {
setters.put("InnerTube:clusterrotation", new DoubleSetter(
Reflection.findMethod(InnerTube.class, "setClusterRotation", double.class),
Math.PI / 180.0));
setters.put("InnerTube:instancecount", new IntSetter(
Reflection.findMethod(InnerTube.class, "setInstanceCount",int.class)));
// RadiusRingComponent
@ -325,7 +345,12 @@ class DocumentConfig {
Reflection.findMethod(CenteringRing.class, "setOuterRadius", double.class),
"auto",
Reflection.findMethod(CenteringRing.class, "setOuterRadiusAutomatic", boolean.class)));
setters.put("CenteringRing:instancecount", new IntSetter(
Reflection.findMethod(CenteringRing.class, "setInstanceCount",int.class)));
setters.put("CenteringRing:instanceseparation", new DoubleSetter(
Reflection.findMethod( CenteringRing.class, "setInstanceSeparation", double.class)));
// MassObject
setters.put("MassObject:packedlength", new DoubleSetter(
@ -387,6 +412,14 @@ class DocumentConfig {
Reflection.findMethod(Parachute.class, "setLineMaterial", Material.class),
Material.Type.LINE));
// PodSet
setters.put("PodSet:instancecount", new IntSetter(
Reflection.findMethod(PodSet.class, "setInstanceCount",int.class)));
setters.put("PodSet:radialoffset", new DoubleSetter(
Reflection.findMethod(PodSet.class, "setRadialOffset", double.class)));
setters.put("PodSet:angleoffset", new DoubleSetter(
Reflection.findMethod(PodSet.class, "setAngularOffset", double.class)));
// Streamer
setters.put("Streamer:striplength", new DoubleSetter(
Reflection.findMethod(Streamer.class, "setStripLength", double.class)));
@ -414,6 +447,10 @@ class DocumentConfig {
Reflection.findMethod(AxialStage.class, "getSeparationConfigurations"),
Reflection.findMethod(StageSeparationConfiguration.class, "setSeparationDelay", double.class)));
// to place...
/*
* The keys are of the form Class:param, where Class is the class name and param
* the element name. Setters are searched for in descending class order.
@ -424,18 +461,8 @@ class DocumentConfig {
// setters.put("ComponentAssembly:radialoffset", new DoubleSetter(Reflection.findMethod(AxialStage.class, "setRadialOffset", double.class)));
// setters.put("ComponentAssembly:angleoffset", new DoubleSetter(Reflection.findMethod(AxialStage.class, "setAngularOffset", double.class)));
setters.put("Instanceable:instancecount", new IntSetter(
Reflection.findMethod(Instanceable.class, "setInstanceCount",int.class)));
setters.put("RingInstanceable:radialoffset", new DoubleSetter(
Reflection.findMethod(RingInstanceable.class, "setRadialOffset", double.class)));
setters.put("RingInstance:angleoffset", new DoubleSetter(
Reflection.findMethod(RingInstanceable.class, "setAngularOffset", double.class)));
setters.put("LineInstanceable:instanceseparation", new DoubleSetter(
Reflection.findMethod( LineInstanceable.class, "setInstanceSeparation", double.class)));
}

View File

@ -17,7 +17,11 @@ public class CenteringRing extends RadiusRingComponent implements LineInstanceab
private static final Translator trans = Application.getTranslator();
protected int instanceCount = 1;
// front-front along the positive rocket axis. i.e. [1,0,0];
protected double instanceSeparation = 0;
@Override
public double getInnerRadius() {
// Implement sibling inner radius automation
@ -77,5 +81,32 @@ public class CenteringRing extends RadiusRingComponent implements LineInstanceab
public Type getPresetType() {
return ComponentPreset.Type.CENTERING_RING;
}
@Override
public double getInstanceSeparation(){
return this.instanceSeparation;
}
@Override
public void setInstanceSeparation(final double _separation){
this.instanceSeparation = _separation;
}
@Override
public void setInstanceCount( final int newCount ){
if( 0 < newCount ){
this.instanceCount = newCount;
}
}
@Override
public int getInstanceCount(){
return this.instanceCount;
}
@Override
public String getPatternName(){
return (this.getInstanceCount() + "-Line");
}
}

View File

@ -16,7 +16,7 @@ import net.sf.openrocket.util.MathUtil;
*
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
public abstract class RingComponent extends StructuralComponent implements Coaxial, LineInstanceable {
public abstract class RingComponent extends StructuralComponent implements Coaxial {
protected boolean outerRadiusAutomatic = false;
protected boolean innerRadiusAutomatic = false;
@ -28,10 +28,6 @@ public abstract class RingComponent extends StructuralComponent implements Coaxi
private double shiftY = 0;
private double shiftZ = 0;
protected int instanceCount = 1;
// front-front along the positive rocket axis. i.e. [1,0,0];
protected double instanceSeparation = 0;
@Override
public abstract double getOuterRadius();
@ -221,33 +217,4 @@ public abstract class RingComponent extends StructuralComponent implements Coaxi
return ringRotationalUnitInertia(getOuterRadius(), getInnerRadius());
}
@Override
public double getInstanceSeparation(){
return this.instanceSeparation;
}
@Override
public void setInstanceSeparation(final double _separation){
this.instanceSeparation = _separation;
}
@Override
public void setInstanceCount( final int newCount ){
if( 0 < newCount ){
this.instanceCount = newCount;
}
}
@Override
public int getInstanceCount(){
return this.instanceCount;
}
@Override
public String getPatternName(){
return (this.getInstanceCount() + "-Line");
}
}

View File

@ -228,7 +228,7 @@ public class RocketFigure extends AbstractScaleFigure {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
System.err.println(" paintingComponent... ");
AffineTransform baseTransform = g2.getTransform();