[resolves #328][save][load] Fixed invalid save & load fields for 'FinSet', 'LineInstanceable' Components
- PodSet may save/load auto-radial-offset - Fins now save/load - 'instancecount' - 'angularoffset' - 'radialoffset' = 'auto' - RadiusPositionable interface now enforces 'setAutoRadialOffset(...)' - implemented RockeComponentSaver#emitInteger - all LineInstanceable implementers read/write 'instanceseparation' - [fix] RocketComponentSaver now saves 'instancecount' even if 1==instancecount
This commit is contained in:
parent
eb72329c58
commit
212685b026
@ -187,7 +187,7 @@ class DocumentConfig {
|
||||
// RailButton
|
||||
setters.put("RailButton:instancecount", new IntSetter(
|
||||
Reflection.findMethod( RailButton.class, "setInstanceCount",int.class)));
|
||||
setters.put("RailButton:linseparation", new DoubleSetter(
|
||||
setters.put("RailButton:instanceseparation", new DoubleSetter(
|
||||
Reflection.findMethod( RailButton.class, "setInstanceSeparation", double.class)));
|
||||
setters.put("RailButton:angularoffset", new DoubleSetter(
|
||||
Reflection.findMethod( RailButton.class, "setAngularOffset", double.class), Math.PI / 180.0));
|
||||
@ -242,8 +242,16 @@ class DocumentConfig {
|
||||
// FinSet
|
||||
setters.put("FinSet:fincount", new IntSetter(
|
||||
Reflection.findMethod(FinSet.class, "setFinCount", int.class)));
|
||||
setters.put("FinSet:instancecount", new IntSetter(
|
||||
Reflection.findMethod(FinSet.class, "setInstanceCount", int.class)));
|
||||
setters.put("FinSet:rotation", new DoubleSetter(
|
||||
Reflection.findMethod(FinSet.class, "setBaseRotation", double.class), Math.PI / 180.0));
|
||||
setters.put("FinSet:angularoffset", new DoubleSetter(
|
||||
Reflection.findMethod(FinSet.class, "setAngularOffset", double.class), Math.PI / 180.0));
|
||||
setters.put("FinSet:radialoffset", new DoubleSetter(
|
||||
Reflection.findMethod(FinSet.class, "setRadialOffset", double.class),
|
||||
"auto",
|
||||
Reflection.findMethod(FinSet.class, "setAutoRadialOffset", boolean.class)));
|
||||
setters.put("FinSet:thickness", new DoubleSetter(
|
||||
Reflection.findMethod(FinSet.class, "setThickness", double.class)));
|
||||
setters.put("FinSet:crosssection", new EnumSetter<FinSet.CrossSection>(
|
||||
@ -261,6 +269,7 @@ class DocumentConfig {
|
||||
setters.put("FinSet:filletmaterial", new MaterialSetter(
|
||||
Reflection.findMethod(FinSet.class, "setFilletMaterial", Material.class),
|
||||
Material.Type.BULK));
|
||||
|
||||
// TrapezoidFinSet
|
||||
setters.put("TrapezoidFinSet:rootchord", new DoubleSetter(
|
||||
Reflection.findMethod(TrapezoidFinSet.class, "setRootChord", double.class)));
|
||||
@ -425,7 +434,15 @@ class DocumentConfig {
|
||||
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)));
|
||||
Reflection.findMethod(PodSet.class, "setRadialOffset", double.class),
|
||||
"auto",
|
||||
Reflection.findMethod(PodSet.class, "setAutoRadialOffset", boolean.class)));
|
||||
|
||||
setters.put("ParallelStage:radialoffset", new DoubleSetter(
|
||||
Reflection.findMethod(ParallelStage.class, "setRadialOffset", double.class),
|
||||
"auto",
|
||||
Reflection.findMethod(ParallelStage.class, "setAutoRadialOffset", boolean.class)));
|
||||
|
||||
setters.put("PodSet:angularoffset", new DoubleSetter(
|
||||
Reflection.findMethod(PodSet.class, "setAngularOffset", double.class),Math.PI / 180.0));
|
||||
|
||||
|
@ -12,8 +12,11 @@ public class FinSetSaver extends ExternalComponentSaver {
|
||||
super.addParams(c, elements);
|
||||
|
||||
net.sf.openrocket.rocketcomponent.FinSet fins = (net.sf.openrocket.rocketcomponent.FinSet) c;
|
||||
elements.add("<fincount>" + fins.getFinCount() + "</fincount>");
|
||||
elements.add("<rotation>" + (fins.getBaseRotation() * 180.0 / Math.PI) + "</rotation>");
|
||||
|
||||
// // this information is already saved as 'RingInstanceable' in RocktComponent
|
||||
// elements.add("<fincount>" + fins.getFinCount() + "</fincount>");
|
||||
// elements.add("<rotation>" + (fins.getBaseRotation() * 180.0 / Math.PI) + "</rotation>");
|
||||
|
||||
elements.add("<thickness>" + fins.getThickness() + "</thickness>");
|
||||
elements.add("<crosssection>" + fins.getCrossSection().name().toLowerCase(Locale.ENGLISH)
|
||||
+ "</crosssection>");
|
||||
|
@ -84,18 +84,17 @@ public class RocketComponentSaver {
|
||||
|
||||
if ( c instanceof Instanceable) {
|
||||
int instanceCount = c.getInstanceCount();
|
||||
if( 1 < instanceCount ){
|
||||
if( c instanceof Clusterable ){
|
||||
; // no-op. Instance counts are set via named cluster configurations
|
||||
}
|
||||
if( c instanceof LineInstanceable ){
|
||||
LineInstanceable line = (LineInstanceable)c;
|
||||
emitString( elements, "instancecount", Integer.toString( instanceCount ) );
|
||||
emitDouble( elements, "linseparation", line.getInstanceSeparation());
|
||||
emitInteger( elements, "instancecount", instanceCount );
|
||||
emitDouble( elements, "instanceseparation", line.getInstanceSeparation());
|
||||
}
|
||||
if( c instanceof RingInstanceable){
|
||||
RingInstanceable ring = (RingInstanceable)c;
|
||||
emitString( elements, "instancecount", Integer.toString( instanceCount ));
|
||||
emitInteger( elements, "instancecount", instanceCount );
|
||||
if( ring.getAutoRadialOffset() ){
|
||||
emitString(elements, "radialoffset", "auto");
|
||||
}else{
|
||||
@ -104,7 +103,6 @@ public class RocketComponentSaver {
|
||||
emitDouble( elements, "angularoffset", ring.getAngularOffset()*180.0/Math.PI);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Save position unless "AFTER"
|
||||
@ -253,6 +251,10 @@ public class RocketComponentSaver {
|
||||
emitString( elements, enclosingTag, Double.toString( value ));
|
||||
}
|
||||
|
||||
protected static void emitInteger( final List<String> elements, final String enclosingTag, final int value){
|
||||
elements.add("<"+enclosingTag+">" + Integer.toString( value ) + "</"+enclosingTag+">");
|
||||
}
|
||||
|
||||
protected static void emitString( final List<String> elements, final String enclosingTag, final String value){
|
||||
elements.add("<"+enclosingTag+">" + value + "</"+enclosingTag+">");
|
||||
}
|
||||
|
@ -780,6 +780,11 @@ public abstract class FinSet extends ExternalComponent implements RingInstanceab
|
||||
// no-op. Not allowed for fins
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAutoRadialOffset( final boolean auto ) {
|
||||
// no-op. Fins are *always* automatically positioned
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInstanceCount(int newCount) {
|
||||
setFinCount(newCount);
|
||||
|
@ -15,10 +15,12 @@ public interface RingInstanceable extends Instanceable, AnglePositionable, Radiu
|
||||
public double[] getInstanceAngles();
|
||||
|
||||
|
||||
@Override
|
||||
public boolean getAutoRadialOffset();
|
||||
@Override
|
||||
public double getRadialOffset();
|
||||
@Override
|
||||
public boolean getAutoRadialOffset();
|
||||
public void setAutoRadialOffset( final boolean auto );
|
||||
@Override
|
||||
public void setRadialOffset(final double radius);
|
||||
|
||||
|
@ -1,9 +1,8 @@
|
||||
package net.sf.openrocket.rocketcomponent.position;
|
||||
|
||||
public interface RadiusPositionable {
|
||||
|
||||
public double getRadialOffset();
|
||||
public boolean getAutoRadialOffset();
|
||||
public double getRadialOffset();
|
||||
public void setAutoRadialOffset( final boolean auto );
|
||||
public void setRadialOffset(final double radius);
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user