Added support for TubeCoupler.
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Mon, 16 Apr 2012 20:17:38 +0000 (20:17 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Mon, 16 Apr 2012 20:17:38 +0000 (20:17 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@563 180e2498-e6e9-4542-8430-84ac67f01cd8

core/resources/datafiles/presets/semroc/tubecouplerpresets.csv [new file with mode: 0644]
core/src/net/sf/openrocket/file/preset/ColumnDefinition.java
core/src/net/sf/openrocket/preset/ComponentPreset.java
core/src/net/sf/openrocket/preset/ComponentPresetFactory.java
core/src/net/sf/openrocket/rocketcomponent/ThicknessRingComponent.java
core/src/net/sf/openrocket/rocketcomponent/TubeCoupler.java

diff --git a/core/resources/datafiles/presets/semroc/tubecouplerpresets.csv b/core/resources/datafiles/presets/semroc/tubecouplerpresets.csv
new file mode 100644 (file)
index 0000000..37677eb
--- /dev/null
@@ -0,0 +1,21 @@
+Manufacturer,PartNo,Description,Type,InnerDiameter,OuterDiameter,Length,Material,Mass\r
+Semroc,HTC-5,Tube Coupler Series 5,TUBE_COUPLER,0.0120142,0.013081,0.01905,Paper,0.000283495\r
+Semroc,HTC-7,Tube Coupler Series 7,TUBE_COUPLER,0.0170942,0.018161,0.0254,Paper,0.000737087\r
+Semroc,HTC-7B,Tube Coupler Series 7,TUBE_COUPLER,0.0182626,0.0193294,0.0254,Paper,0.000737087\r
+Semroc,HTC-8,Tube Coupler Series 8,TUBE_COUPLER,0.0209042,0.021971,0.0254,Paper,0.001077281\r
+Semroc,HTC-8F,Tube Coupler Series 8F,TUBE_COUPLER,0.0214122,0.022479,0.0254,Paper,0.00110563\r
+Semroc,HTC-9,Tube Coupler Series 9,TUBE_COUPLER,0.0230632,0.02413,0.0254,Paper,0.001162329\r
+Semroc,HTC-10,Tube Coupler Series 10,TUBE_COUPLER,0.0243332,0.0254,0.0381,Paper,0.001814368\r
+Semroc,HTC-11,Tube Coupler Series 11,TUBE_COUPLER,0.0276352,0.028702,0.0381,Paper,0.002012814\r
+Semroc,HTC-13,Tube Coupler Series 13,TUBE_COUPLER,0.0319532,0.03302,0.04445,Paper,0.003543687\r
+Semroc,HTC-16,Tube Coupler Series 16,TUBE_COUPLER,0.0395732,0.04064,0.04445,Paper,0.004961161\r
+Semroc,HTC-18,Tube Coupler Series 18,TUBE_COUPLER,0.0446532,0.04572,0.04445,Paper,0.005953393\r
+Semroc,HTC-20,Tube Coupler Series 20,TUBE_COUPLER,0.0497332,0.0508,0.05334,Paper,0.007512616\r
+Semroc,JT-5C,Tube Coupler Series BT-5,TUBE_COUPLER,0.0120142,0.013081,0.01905,Paper,0.000283495\r
+Semroc,JT-20C,Tube Coupler Series BT-20,TUBE_COUPLER,0.0169672,0.018034,0.0254,Paper,0.000737087\r
+Semroc,JT-50C,Tube Coupler Series BT-50,TUBE_COUPLER,0.0230632,0.02413,0.0254,Paper,0.00110563\r
+Semroc,JT-55C,Tube Coupler Series BT-55,TUBE_COUPLER,0.0315214,0.0325882,0.0381,Paper,0.001389125\r
+Semroc,JT-60C,Tube Coupler Series BT-60,TUBE_COUPLER,0.0394462,0.040513,0.04445,Paper,0.001559222\r
+Semroc,JT-70D,Tube Coupler Series BT-70,TUBE_COUPLER,0.0541782,0.055245,0.015875,Paper,0.002466406\r
+Semroc,JT-70E,Tube Coupler Series BT-70,TUBE_COUPLER,0.0541782,0.055245,0.1016,Paper,0.015790667\r
+Semroc,JT-80E,Tube Coupler Series BT-80,TUBE_COUPLER,0.0638556,0.0649224,0.1016,Paper,0.02069513\r
index a336cfae5bd486a79a6e3df67da61fc269e19ab4..e58a042b0067f95dfa3b02a18670be802009e98f 100644 (file)
@@ -48,6 +48,10 @@ public class ColumnDefinition<T> {
                                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) ) {
index 2ad9fad787e0495064050490c394cb53cbf86959..410470e73c04f798753f76f28c24c5fa5b5ced8f 100644 (file)
@@ -63,6 +63,13 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
                                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,
index 8ade5b9277db7d3f510d255b82b5f7209e04f92b..6531a31e1f3b20c6f2be31ddc6c579c96163254a 100644 (file)
@@ -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) ) {
index 4bded7079e72173eb68e45e7519aa75c5631b7f8..3a8fcd9c69241d1dfe31f68f9bc12b194c23f38f 100644 (file)
@@ -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) {
index 5e22ec0c1cfb3e13e7fecc745e479f54dcb61c04..4f50099c3f5a67c19ee623af5c14ef9e074b6fab 100644 (file)
@@ -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) {