]> git.gag.com Git - debian/openrocket/commitdiff
Added centering rings and engine blocks presets
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Wed, 18 Apr 2012 19:43:28 +0000 (19:43 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Wed, 18 Apr 2012 19:43:28 +0000 (19:43 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@567 180e2498-e6e9-4542-8430-84ac67f01cd8

core/src/net/sf/openrocket/preset/ComponentPreset.java
core/src/net/sf/openrocket/preset/ComponentPresetFactory.java
core/src/net/sf/openrocket/rocketcomponent/CenteringRing.java
core/src/net/sf/openrocket/rocketcomponent/EngineBlock.java

index 5c42e7bd4a47f66a070fb9525d5ecf7327752f64..9ee7c0096fc1ce134359f387026cb1e6afed9fa5 100644 (file)
@@ -13,10 +13,7 @@ import java.util.Map;
 
 import net.sf.openrocket.material.Material;
 import net.sf.openrocket.motor.Manufacturer;
-import net.sf.openrocket.rocketcomponent.BodyTube;
 import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
-import net.sf.openrocket.rocketcomponent.NoseCone;
-import net.sf.openrocket.rocketcomponent.Transition;
 import net.sf.openrocket.rocketcomponent.Transition.Shape;
 import net.sf.openrocket.unit.UnitGroup;
 import net.sf.openrocket.util.BugException;
@@ -43,8 +40,9 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
                BODY_TUBE( new TypedKey<?>[] {
                                ComponentPreset.MANUFACTURER,
                                ComponentPreset.PARTNO,
-                               ComponentPreset.OUTER_DIAMETER,
+                               ComponentPreset.DESCRIPTION,
                                ComponentPreset.INNER_DIAMETER,
+                               ComponentPreset.OUTER_DIAMETER,
                                ComponentPreset.LENGTH} ),
                                
                NOSE_CONE( new TypedKey<?>[] {
@@ -53,6 +51,7 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
                                ComponentPreset.DESCRIPTION,
                                ComponentPreset.SHAPE,
                                ComponentPreset.OUTER_DIAMETER,
+                               ComponentPreset.SHOULDER_DIAMETER,
                                ComponentPreset.LENGTH} ),
 
                TRANSITION( new TypedKey<?>[] {
@@ -76,8 +75,25 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
                                ComponentPreset.PARTNO,
                                ComponentPreset.DESCRIPTION,
                                ComponentPreset.OUTER_DIAMETER,
+                               ComponentPreset.LENGTH} ),
+
+               CENTERING_RING( new TypedKey<?>[] {
+                               ComponentPreset.MANUFACTURER,
+                               ComponentPreset.PARTNO,
+                               ComponentPreset.DESCRIPTION,
+                               ComponentPreset.INNER_DIAMETER,
+                               ComponentPreset.OUTER_DIAMETER,
+                               ComponentPreset.LENGTH} ),
+
+               ENGINE_BLOCK( new TypedKey<?>[] {
+                               ComponentPreset.MANUFACTURER,
+                               ComponentPreset.PARTNO,
+                               ComponentPreset.DESCRIPTION,
+                               ComponentPreset.INNER_DIAMETER,
+                               ComponentPreset.OUTER_DIAMETER,
                                ComponentPreset.LENGTH} );
 
+
                Type[] compatibleTypes;
                TypedKey<?>[] displayedColumns;
 
index 6531a31e1f3b20c6f2be31ddc6c579c96163254a..5b5d9e903356ed5cc7e93aa964bfc37b9218d92a 100644 (file)
@@ -61,6 +61,14 @@ public abstract class ComponentPresetFactory {
                        makeTubeCoupler(preset);
                        break;
                }
+               case CENTERING_RING: {
+                       makeCenteringRing(preset);
+                       break;
+               }
+               case ENGINE_BLOCK: {
+                       makeEngineBlock(preset);
+                       break;
+               }
                }
 
                preset.computeDigest();
@@ -73,48 +81,17 @@ public abstract class ComponentPresetFactory {
                
                checkRequiredFields( preset, LENGTH );
 
-               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());
-
+               checkDiametersAndThickness(preset);
+               
+               double volume = computeVolumeOfTube( preset );
+               
                // 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);
+                       Material m = Material.newMaterial(Material.Type.BULK, materialName, preset.get(MASS)/volume, false);
                        preset.put(MATERIAL, m);
                }
 
@@ -172,15 +149,13 @@ public abstract class ComponentPresetFactory {
                if ( preset.has(MASS) ) {
                        // compute a density for this component
                        double mass = preset.get(MASS);
-                       Bulkhead tr = new Bulkhead();
-                       tr.loadPreset(preset);
                        // FIXME - Bulkhead.getComponentVolume does not exist!
                        // double density = mass / tr.getComponentVolume();
 
                        double volume = Math.pow(preset.get(OUTER_DIAMETER),2) * Math.PI / 4.0;
                        double density = mass / volume;
 
-                       String materialName = "TransitionCustom";
+                       String materialName = "BulkHeadCustom";
                        if ( preset.has(MATERIAL) ) {
                                materialName = preset.get(MATERIAL).getName();
                        }
@@ -196,53 +171,57 @@ public abstract class ComponentPresetFactory {
                
                checkRequiredFields( preset, LENGTH );
 
-               // FIXME - TubeCoupler does not have getComponentVolume.  So we use a BodyTube for this.
-               BodyTube bt = new BodyTube();
+               checkDiametersAndThickness( preset );
+               
+               double volume = computeVolumeOfTube( preset );
 
-               bt.setLength(preset.get(LENGTH));
+               // Need to translate Mass to Density.
+               if ( preset.has(MASS) ) {
+                       String materialName = "TubeCouplerCustom";
+                       if ( preset.has(MATERIAL) ) {
+                               materialName = preset.get(MATERIAL).getName();
+                       }
+                       Material m = Material.newMaterial(Material.Type.BULK, materialName, preset.get(MASS)/volume, false);
+                       preset.put(MATERIAL, m);
+               }
+       }
 
-               // 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);
+       private static void makeCenteringRing( ComponentPreset preset ) throws InvalidComponentPresetException {
+               checkRequiredFields( preset, LENGTH );
 
-               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());
+               checkDiametersAndThickness( preset );
+
+               double volume = computeVolumeOfTube( preset );
+
+               // Need to translate Mass to Density.
+               if ( preset.has(MASS) ) {
+                       String materialName = "TubeCouplerCustom";
+                       if ( preset.has(MATERIAL) ) {
+                               materialName = preset.get(MATERIAL).getName();
                        }
-                       double innerRadius = preset.get(INNER_DIAMETER)/2.0;
-                       double thickness = preset.get(THICKNESS);
-                       bt.setOuterRadius(innerRadius + thickness);
-                       bt.setThickness(thickness);
+                       Material m = Material.newMaterial(Material.Type.BULK, materialName, preset.get(MASS)/volume, false);
+                       preset.put(MATERIAL, m);
                }
 
-               preset.put(OUTER_DIAMETER, bt.getOuterRadius() *2.0);
-               preset.put(INNER_DIAMETER, bt.getInnerRadius() *2.0);
-               preset.put(THICKNESS, bt.getThickness());
+       }
+       
+       private static void makeEngineBlock( ComponentPreset preset ) throws InvalidComponentPresetException {
+               checkRequiredFields( preset, LENGTH );
+
+               checkDiametersAndThickness( preset );
+
+               double volume = computeVolumeOfTube( preset );
 
                // Need to translate Mass to Density.
                if ( preset.has(MASS) ) {
-                       String materialName = "TubeCustom";
+                       String materialName = "TubeCouplerCustom";
                        if ( preset.has(MATERIAL) ) {
                                materialName = preset.get(MATERIAL).getName();
                        }
-                       Material m = Material.newMaterial(Material.Type.BULK, materialName, preset.get(MASS)/bt.getComponentVolume(), false);
+                       Material m = Material.newMaterial(Material.Type.BULK, materialName, preset.get(MASS)/volume, false);
                        preset.put(MATERIAL, m);
                }
 
-
        }
        
        private static void checkRequiredFields( ComponentPreset preset, TypedKey<?> ... keys ) throws InvalidComponentPresetException {
@@ -253,4 +232,49 @@ public abstract class ComponentPresetFactory {
                }
        }
 
+       private static void checkDiametersAndThickness( ComponentPreset preset ) throws InvalidComponentPresetException {
+               // 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);
+
+               double outerRadius;
+               double innerRadius;
+               double thickness;
+               
+               if ( hasOd ) {
+                       outerRadius = preset.get(OUTER_DIAMETER)/2.0;
+                       thickness = 0;
+                       if ( hasId ) {
+                               innerRadius = preset.get(INNER_DIAMETER)/2.0;
+                               thickness = outerRadius - innerRadius;
+                       } else if ( hasThickness ) {
+                               thickness = preset.get(THICKNESS);
+                               innerRadius = outerRadius - thickness;
+                       } else {
+                               throw new InvalidComponentPresetException("Preset underspecified " + preset.toString());
+                       }
+               } else {
+                       if ( ! hasId && ! hasThickness ) {
+                               throw new InvalidComponentPresetException("Preset underspecified " + preset.toString());
+                       }
+                       innerRadius = preset.get(INNER_DIAMETER)/2.0;
+                       thickness = preset.get(THICKNESS);
+                       outerRadius = innerRadius + thickness;
+               }
+
+               preset.put(OUTER_DIAMETER, outerRadius *2.0);
+               preset.put(INNER_DIAMETER, innerRadius *2.0);
+               preset.put(THICKNESS, thickness );
+
+       }
+       
+       private static double computeVolumeOfTube(ComponentPreset preset) {
+               double or = preset.get(OUTER_DIAMETER)/2.0;
+               double ir = preset.get(INNER_DIAMETER)/2.0;
+               double l = preset.get(LENGTH);
+               return Math.PI * (or*or - ir*ir) * l;
+       }
+
+       
 }
index 21b73e2af1daa65d70611b0f1400e7bf938153d5..ddb59d1b5731603c87c153bf666421acc12f6b6c 100644 (file)
@@ -1,5 +1,7 @@
 package net.sf.openrocket.rocketcomponent;
 
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.ComponentPreset.Type;
 import net.sf.openrocket.util.Coordinate;
 
 
@@ -67,4 +69,9 @@ public class CenteringRing extends RadiusRingComponent {
                return false;
        }
 
+       @Override
+       public Type getPresetType() {
+               return ComponentPreset.Type.CENTERING_RING;
+       }
+
 }
index 2c2c590b94c47843b251875060104a89c43e3932..ce3ab171950101f140b5b9a36955cc438713ad14 100644 (file)
@@ -1,5 +1,8 @@
 package net.sf.openrocket.rocketcomponent;
 
+import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.ComponentPreset.Type;
+
 
 public class EngineBlock extends ThicknessRingComponent {
        
@@ -30,4 +33,9 @@ public class EngineBlock extends ThicknessRingComponent {
                return false;
        }
        
+       @Override
+       public Type getPresetType() {
+               return ComponentPreset.Type.ENGINE_BLOCK;
+       }
+
 }