Added support for TubeCoupler.
This commit is contained in:
parent
5d6da040b2
commit
1184c698be
@ -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
|
|
@ -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) ) {
|
||||
|
@ -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,
|
||||
|
@ -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) ) {
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user