From: kruland2607 Date: Wed, 18 Apr 2012 19:43:28 +0000 (+0000) Subject: Added centering rings and engine blocks presets X-Git-Tag: upstream/12.09^2~353 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=9fb0a5f1afa36b71d4e7fbba5b2732c8d2a88e9d;p=debian%2Fopenrocket Added centering rings and engine blocks presets git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@567 180e2498-e6e9-4542-8430-84ac67f01cd8 --- diff --git a/core/src/net/sf/openrocket/preset/ComponentPreset.java b/core/src/net/sf/openrocket/preset/ComponentPreset.java index 5c42e7bd..9ee7c009 100644 --- a/core/src/net/sf/openrocket/preset/ComponentPreset.java +++ b/core/src/net/sf/openrocket/preset/ComponentPreset.java @@ -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 { 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.DESCRIPTION, ComponentPreset.SHAPE, ComponentPreset.OUTER_DIAMETER, + ComponentPreset.SHOULDER_DIAMETER, ComponentPreset.LENGTH} ), TRANSITION( new TypedKey[] { @@ -76,8 +75,25 @@ public class ComponentPreset implements Comparable { 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; diff --git a/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java b/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java index 6531a31e..5b5d9e90 100644 --- a/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java +++ b/core/src/net/sf/openrocket/preset/ComponentPresetFactory.java @@ -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; + } + + } diff --git a/core/src/net/sf/openrocket/rocketcomponent/CenteringRing.java b/core/src/net/sf/openrocket/rocketcomponent/CenteringRing.java index 21b73e2a..ddb59d1b 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/CenteringRing.java +++ b/core/src/net/sf/openrocket/rocketcomponent/CenteringRing.java @@ -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; + } + } diff --git a/core/src/net/sf/openrocket/rocketcomponent/EngineBlock.java b/core/src/net/sf/openrocket/rocketcomponent/EngineBlock.java index 2c2c590b..ce3ab171 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/EngineBlock.java +++ b/core/src/net/sf/openrocket/rocketcomponent/EngineBlock.java @@ -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; + } + }