From: kruland2607 Date: Mon, 16 Apr 2012 20:17:38 +0000 (+0000) Subject: Added support for TubeCoupler. X-Git-Tag: upstream/12.09^2~357 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=f476a440dd2a024628613dea28e6f08e80173e50;p=debian%2Fopenrocket Added support for TubeCoupler. git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@563 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/resources/datafiles/presets/semroc/tubecouplerpresets.csv b/core/resources/datafiles/presets/semroc/tubecouplerpresets.csv new file mode 100644 index 00000000..37677eb3 --- /dev/null +++ b/core/resources/datafiles/presets/semroc/tubecouplerpresets.csv @@ -0,0 +1,21 @@ +Manufacturer,PartNo,Description,Type,InnerDiameter,OuterDiameter,Length,Material,Mass +Semroc,HTC-5,Tube Coupler Series 5,TUBE_COUPLER,0.0120142,0.013081,0.01905,Paper,0.000283495 +Semroc,HTC-7,Tube Coupler Series 7,TUBE_COUPLER,0.0170942,0.018161,0.0254,Paper,0.000737087 +Semroc,HTC-7B,Tube Coupler Series 7,TUBE_COUPLER,0.0182626,0.0193294,0.0254,Paper,0.000737087 +Semroc,HTC-8,Tube Coupler Series 8,TUBE_COUPLER,0.0209042,0.021971,0.0254,Paper,0.001077281 +Semroc,HTC-8F,Tube Coupler Series 8F,TUBE_COUPLER,0.0214122,0.022479,0.0254,Paper,0.00110563 +Semroc,HTC-9,Tube Coupler Series 9,TUBE_COUPLER,0.0230632,0.02413,0.0254,Paper,0.001162329 +Semroc,HTC-10,Tube Coupler Series 10,TUBE_COUPLER,0.0243332,0.0254,0.0381,Paper,0.001814368 +Semroc,HTC-11,Tube Coupler Series 11,TUBE_COUPLER,0.0276352,0.028702,0.0381,Paper,0.002012814 +Semroc,HTC-13,Tube Coupler Series 13,TUBE_COUPLER,0.0319532,0.03302,0.04445,Paper,0.003543687 +Semroc,HTC-16,Tube Coupler Series 16,TUBE_COUPLER,0.0395732,0.04064,0.04445,Paper,0.004961161 +Semroc,HTC-18,Tube Coupler Series 18,TUBE_COUPLER,0.0446532,0.04572,0.04445,Paper,0.005953393 +Semroc,HTC-20,Tube Coupler Series 20,TUBE_COUPLER,0.0497332,0.0508,0.05334,Paper,0.007512616 +Semroc,JT-5C,Tube Coupler Series BT-5,TUBE_COUPLER,0.0120142,0.013081,0.01905,Paper,0.000283495 +Semroc,JT-20C,Tube Coupler Series BT-20,TUBE_COUPLER,0.0169672,0.018034,0.0254,Paper,0.000737087 +Semroc,JT-50C,Tube Coupler Series BT-50,TUBE_COUPLER,0.0230632,0.02413,0.0254,Paper,0.00110563 +Semroc,JT-55C,Tube Coupler Series BT-55,TUBE_COUPLER,0.0315214,0.0325882,0.0381,Paper,0.001389125 +Semroc,JT-60C,Tube Coupler Series BT-60,TUBE_COUPLER,0.0394462,0.040513,0.04445,Paper,0.001559222 +Semroc,JT-70D,Tube Coupler Series BT-70,TUBE_COUPLER,0.0541782,0.055245,0.015875,Paper,0.002466406 +Semroc,JT-70E,Tube Coupler Series BT-70,TUBE_COUPLER,0.0541782,0.055245,0.1016,Paper,0.015790667 +Semroc,JT-80E,Tube Coupler Series BT-80,TUBE_COUPLER,0.0638556,0.0649224,0.1016,Paper,0.02069513 diff --git a/core/src/net/sf/openrocket/file/preset/ColumnDefinition.java b/core/src/net/sf/openrocket/file/preset/ColumnDefinition.java index a336cfae..e58a042b 100644 --- a/core/src/net/sf/openrocket/file/preset/ColumnDefinition.java +++ b/core/src/net/sf/openrocket/file/preset/ColumnDefinition.java @@ -48,6 +48,10 @@ public class ColumnDefinition { String translated_value = Application.getTranslator().get("Databases.materials.Balsa"); return getMaterialFor(translated_value); } + if ( "paper".equalsIgnoreCase(value) ) { + String translated_value = Application.getTranslator().get("Databases.materials.Paperoffice"); + return getMaterialFor(translated_value); + } throw new IllegalArgumentException("Invalid material " + value + " in component preset."); } if ( type.equals(Shape.class) ) { diff --git a/core/src/net/sf/openrocket/preset/ComponentPreset.java b/core/src/net/sf/openrocket/preset/ComponentPreset.java index 2ad9fad7..410470e7 100644 --- a/core/src/net/sf/openrocket/preset/ComponentPreset.java +++ b/core/src/net/sf/openrocket/preset/ComponentPreset.java @@ -63,6 +63,13 @@ public class ComponentPreset implements Comparable { ComponentPreset.OUTER_DIAMETER, ComponentPreset.LENGTH} ), + TUBE_COUPLER( new TypedKey[] { + ComponentPreset.MANUFACTURER, + ComponentPreset.PARTNO, + ComponentPreset.OUTER_DIAMETER, + ComponentPreset.INNER_DIAMETER, + ComponentPreset.LENGTH} ), + BULK_HEAD( new TypedKey[] { ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, diff --git a/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java b/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java index 8ade5b92..6531a31e 100644 --- a/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java +++ b/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java @@ -57,6 +57,10 @@ public abstract class ComponentPresetFactory { makeBulkHead(preset); break; } + case TUBE_COUPLER: { + makeTubeCoupler(preset); + break; + } } preset.computeDigest(); @@ -188,6 +192,59 @@ public abstract class ComponentPresetFactory { } + private static void makeTubeCoupler( ComponentPreset preset ) throws InvalidComponentPresetException { + + checkRequiredFields( preset, LENGTH ); + + // FIXME - TubeCoupler does not have getComponentVolume. So we use a BodyTube for this. + BodyTube bt = new BodyTube(); + + bt.setLength(preset.get(LENGTH)); + + // Need to verify contains 2 of OD, thickness, ID. Compute the third. + boolean hasOd = preset.has(OUTER_DIAMETER); + boolean hasId = preset.has(INNER_DIAMETER); + boolean hasThickness = preset.has(THICKNESS); + + if ( hasOd ) { + double outerRadius = preset.get(OUTER_DIAMETER)/2.0; + double thickness = 0; + bt.setOuterRadius( outerRadius ); + if ( hasId ) { + thickness = outerRadius - preset.get(INNER_DIAMETER)/2.0; + } else if ( hasThickness ) { + thickness = preset.get(THICKNESS); + } else { + throw new InvalidComponentPresetException("Body tube preset underspecified " + preset.toString()); + } + bt.setThickness( thickness ); + } else { + if ( ! hasId && ! hasThickness ) { + throw new InvalidComponentPresetException("Body tube preset underspecified " + preset.toString()); + } + double innerRadius = preset.get(INNER_DIAMETER)/2.0; + double thickness = preset.get(THICKNESS); + bt.setOuterRadius(innerRadius + thickness); + bt.setThickness(thickness); + } + + preset.put(OUTER_DIAMETER, bt.getOuterRadius() *2.0); + preset.put(INNER_DIAMETER, bt.getInnerRadius() *2.0); + preset.put(THICKNESS, bt.getThickness()); + + // Need to translate Mass to Density. + if ( preset.has(MASS) ) { + String materialName = "TubeCustom"; + if ( preset.has(MATERIAL) ) { + materialName = preset.get(MATERIAL).getName(); + } + Material m = Material.newMaterial(Material.Type.BULK, materialName, preset.get(MASS)/bt.getComponentVolume(), false); + preset.put(MATERIAL, m); + } + + + } + private static void checkRequiredFields( ComponentPreset preset, TypedKey ... keys ) throws InvalidComponentPresetException { for( TypedKey key: keys ) { if (! preset.has(key) ) { diff --git a/core/src/net/sf/openrocket/rocketcomponent/ThicknessRingComponent.java b/core/src/net/sf/openrocket/rocketcomponent/ThicknessRingComponent.java index 4bded707..3a8fcd9c 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/ThicknessRingComponent.java +++ b/core/src/net/sf/openrocket/rocketcomponent/ThicknessRingComponent.java @@ -1,5 +1,6 @@ package net.sf.openrocket.rocketcomponent; +import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.MathUtil; @@ -16,7 +17,24 @@ public abstract class ThicknessRingComponent extends RingComponent { protected double outerRadius = 0; protected double thickness = 0; - + @Override + protected void loadFromPreset(ComponentPreset preset) { + if ( preset.has(ComponentPreset.OUTER_DIAMETER) ) { + this.outerRadiusAutomatic = false; + this.innerRadiusAutomatic = false; + double outerDiameter = preset.get(ComponentPreset.OUTER_DIAMETER); + this.outerRadius = outerDiameter/2.0; + if ( preset.has(ComponentPreset.INNER_DIAMETER) ) { + double innerDiameter = preset.get(ComponentPreset.INNER_DIAMETER); + this.thickness = (outerDiameter-innerDiameter) / 2.0; + } + } + super.loadFromPreset(preset); + + fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE); + + } + @Override public double getOuterRadius() { if (isOuterRadiusAutomatic() && getParent() instanceof RadialParent) { diff --git a/core/src/net/sf/openrocket/rocketcomponent/TubeCoupler.java b/core/src/net/sf/openrocket/rocketcomponent/TubeCoupler.java index 5e22ec0c..4f50099c 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/TubeCoupler.java +++ b/core/src/net/sf/openrocket/rocketcomponent/TubeCoupler.java @@ -1,6 +1,8 @@ package net.sf.openrocket.rocketcomponent; import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.preset.ComponentPreset; +import net.sf.openrocket.preset.ComponentPreset.Type; import net.sf.openrocket.startup.Application; @@ -13,7 +15,12 @@ public class TubeCoupler extends ThicknessRingComponent implements RadialParent setLength(0.06); } - + @Override + public Type getPresetType() { + return ComponentPreset.Type.TUBE_COUPLER; + } + + // Make setter visible @Override public void setOuterRadiusAutomatic(boolean auto) {