Implement MaterialHolder, a container for the Material objects loaded during processing of rocksim csv files. Added logic to streamer and parachutes so it can produce a SURFACE material if the csv file specified a BULK material and thickness.
This commit is contained in:
parent
4eea3292b6
commit
0a199d73c3
@ -14,7 +14,7 @@ public abstract class BaseComponentLoader extends RocksimComponentFileLoader {
|
|||||||
|
|
||||||
List<ComponentPreset> presets;
|
List<ComponentPreset> presets;
|
||||||
|
|
||||||
public BaseComponentLoader(Map<String, Material> materials) {
|
public BaseComponentLoader(MaterialHolder materials) {
|
||||||
super();
|
super();
|
||||||
presets = new ArrayList<ComponentPreset>();
|
presets = new ArrayList<ComponentPreset>();
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import net.sf.openrocket.preset.ComponentPreset.Type;
|
|||||||
|
|
||||||
public class BodyTubeLoader extends BaseComponentLoader {
|
public class BodyTubeLoader extends BaseComponentLoader {
|
||||||
|
|
||||||
public BodyTubeLoader(Map<String, Material> materials) {
|
public BodyTubeLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
fileColumns.add(new DoubleUnitColumnParser("ID","Units",ComponentPreset.INNER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("ID","Units",ComponentPreset.INNER_DIAMETER));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
import net.sf.openrocket.preset.TypedPropertyMap;
|
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||||
|
|
||||||
public class BulkHeadLoader extends BaseComponentLoader {
|
public class BulkHeadLoader extends BaseComponentLoader {
|
||||||
|
|
||||||
public BulkHeadLoader(Map<String, Material> materials) {
|
public BulkHeadLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
|
fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
|
|
||||||
public class CenteringRingLoader extends BodyTubeLoader {
|
public class CenteringRingLoader extends BodyTubeLoader {
|
||||||
|
|
||||||
public CenteringRingLoader(Map<String, Material> materials) {
|
public CenteringRingLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
|
|
||||||
public class EngineBlockLoader extends BodyTubeLoader {
|
public class EngineBlockLoader extends BodyTubeLoader {
|
||||||
|
|
||||||
public EngineBlockLoader(Map<String, Material> materials) {
|
public EngineBlockLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
|
|
||||||
public class LaunchLugLoader extends BaseComponentLoader {
|
public class LaunchLugLoader extends BaseComponentLoader {
|
||||||
|
|
||||||
public LaunchLugLoader(Map<String, Material> materials) {
|
public LaunchLugLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
fileColumns.add(new DoubleUnitColumnParser("ID","Units",ComponentPreset.INNER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("ID","Units",ComponentPreset.INNER_DIAMETER));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
||||||
|
@ -9,11 +9,11 @@ import net.sf.openrocket.preset.TypedPropertyMap;
|
|||||||
|
|
||||||
public class LineMaterialColumnParser extends BaseColumnParser {
|
public class LineMaterialColumnParser extends BaseColumnParser {
|
||||||
|
|
||||||
private Map<String,Material> materialMap = Collections.<String,Material>emptyMap();
|
private final MaterialHolder materialMap;
|
||||||
|
|
||||||
private final TypedKey<Material> param;
|
private final TypedKey<Material> param;
|
||||||
|
|
||||||
public LineMaterialColumnParser(Map<String,Material> materialMap, String columnName, TypedKey<Material> param) {
|
public LineMaterialColumnParser(MaterialHolder materialMap, String columnName, TypedKey<Material> param) {
|
||||||
super(columnName);
|
super(columnName);
|
||||||
this.param = param;
|
this.param = param;
|
||||||
this.materialMap = materialMap;
|
this.materialMap = materialMap;
|
||||||
@ -27,16 +27,9 @@ public class LineMaterialColumnParser extends BaseColumnParser {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Material.Line myMaterial;
|
Material.Line myMaterial = new Material.Line(columnData, 0.0, true);
|
||||||
|
|
||||||
Material m = materialMap.get(columnData);
|
|
||||||
|
|
||||||
if ( m == null || m.getType() != Material.Type.LINE ) {
|
|
||||||
myMaterial = new Material.Line(columnData, 0.0, true);
|
|
||||||
} else {
|
|
||||||
myMaterial =(Material.Line) m;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
myMaterial = materialMap.getLineMaterial(myMaterial);
|
||||||
props.put(param, myMaterial);
|
props.put(param, myMaterial);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,17 +10,17 @@ import net.sf.openrocket.preset.TypedPropertyMap;
|
|||||||
|
|
||||||
public class MaterialColumnParser extends BaseColumnParser {
|
public class MaterialColumnParser extends BaseColumnParser {
|
||||||
|
|
||||||
private Map<String,Material> materialMap = Collections.<String,Material>emptyMap();
|
private final MaterialHolder materialMap;
|
||||||
|
|
||||||
private final TypedKey<Material> param;
|
private final TypedKey<Material> param;
|
||||||
|
|
||||||
public MaterialColumnParser(Map<String,Material> materialMap, String columnName, TypedKey<Material> param) {
|
public MaterialColumnParser(MaterialHolder materialMap, String columnName, TypedKey<Material> param) {
|
||||||
super(columnName);
|
super(columnName);
|
||||||
this.param = param;
|
this.param = param;
|
||||||
this.materialMap = materialMap;
|
this.materialMap = materialMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MaterialColumnParser(Map<String,Material> materialMap) {
|
public MaterialColumnParser(MaterialHolder materialMap) {
|
||||||
this(materialMap, "Material", ComponentPreset.MATERIAL);
|
this(materialMap, "Material", ComponentPreset.MATERIAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,10 +32,8 @@ public class MaterialColumnParser extends BaseColumnParser {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Material m = materialMap.get(columnData);
|
Material.Bulk m = new Material.Bulk(columnData, 0.0, true);
|
||||||
if ( m == null ) {
|
m = materialMap.getBulkMaterial(m);
|
||||||
m = new Material.Bulk(columnData, 0.0, true);
|
|
||||||
}
|
|
||||||
props.put(param, m);
|
props.put(param, m);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
90
core/src/net/sf/openrocket/preset/loader/MaterialHolder.java
Normal file
90
core/src/net/sf/openrocket/preset/loader/MaterialHolder.java
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.sf.openrocket.material.Material;
|
||||||
|
import net.sf.openrocket.unit.UnitGroup;
|
||||||
|
|
||||||
|
public class MaterialHolder {
|
||||||
|
|
||||||
|
private final Map<String,Material.Bulk> bulkMaterials = new HashMap<String,Material.Bulk>();
|
||||||
|
|
||||||
|
private final Map<String,Material.Surface> surfaceMaterials = new HashMap<String,Material.Surface>();
|
||||||
|
|
||||||
|
private final Map<String, Material.Line> lineMaterials = new HashMap<String,Material.Line>();
|
||||||
|
|
||||||
|
public void put( Material material ) {
|
||||||
|
switch ( material.getType() ) {
|
||||||
|
case BULK:
|
||||||
|
bulkMaterials.put(material.getName(), (Material.Bulk) material);
|
||||||
|
break;
|
||||||
|
case SURFACE:
|
||||||
|
surfaceMaterials.put(material.getName(), (Material.Surface) material);
|
||||||
|
break;
|
||||||
|
case LINE:
|
||||||
|
lineMaterials.put(material.getName(), (Material.Line) material);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material.Bulk getBulkMaterial( Material.Bulk material ) {
|
||||||
|
Material.Bulk m = bulkMaterials.get( material.getName() );
|
||||||
|
return (m==null) ? material : m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material.Surface getSurfaceMaterial( Material.Surface material, Double thickness ) {
|
||||||
|
Material.Surface m = surfaceMaterials.get(material.getName() );
|
||||||
|
if ( m != null ) {
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
// Try to see if we can convert a bulk material.
|
||||||
|
if ( thickness == null ) {
|
||||||
|
// if we have no thickness, there is nothing we can do
|
||||||
|
return material;
|
||||||
|
}
|
||||||
|
String thicknessName = UnitGroup.UNITS_LENGTH.getUnit("mm").toString(thickness);
|
||||||
|
String convertedMaterialName = material.getName() + "(" + thicknessName + ")";
|
||||||
|
m = surfaceMaterials.get(convertedMaterialName);
|
||||||
|
if ( m != null ) {
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
Material.Bulk bulk = bulkMaterials.get(material.getName() );
|
||||||
|
|
||||||
|
if ( bulk == null ) {
|
||||||
|
return material;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ok, now we have a thickness and a bulk material of the correct name,
|
||||||
|
// we can make our own surface material.
|
||||||
|
|
||||||
|
Material.Surface surface = new Material.Surface( convertedMaterialName, bulk.getDensity() * thickness , true);
|
||||||
|
|
||||||
|
this.put(surface);
|
||||||
|
|
||||||
|
return surface;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material.Line getLineMaterial( Material.Line material ) {
|
||||||
|
Material.Line m = lineMaterials.get( material.getName() );
|
||||||
|
return (m==null) ? material : m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return bulkMaterials.size() + surfaceMaterials.size() + lineMaterials.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<Material> values() {
|
||||||
|
|
||||||
|
HashSet<Material> allMats = new HashSet<Material>();
|
||||||
|
allMats.addAll( bulkMaterials.values() );
|
||||||
|
allMats.addAll( surfaceMaterials.values() );
|
||||||
|
allMats.addAll( lineMaterials.values() );
|
||||||
|
|
||||||
|
return allMats;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -10,7 +10,7 @@ import net.sf.openrocket.util.BugException;
|
|||||||
|
|
||||||
public class MaterialLoader extends RocksimComponentFileLoader {
|
public class MaterialLoader extends RocksimComponentFileLoader {
|
||||||
|
|
||||||
private Map<String,Material> materialMap = new HashMap<String,Material>();
|
private MaterialHolder materialMap = new MaterialHolder();
|
||||||
|
|
||||||
private final static TypedKey<String> MATERIALNAME = new TypedKey<String>("MaterialName", String.class);
|
private final static TypedKey<String> MATERIALNAME = new TypedKey<String>("MaterialName", String.class);
|
||||||
private final static TypedKey<String> UNITS = new TypedKey<String>("Units", String.class);
|
private final static TypedKey<String> UNITS = new TypedKey<String>("Units", String.class);
|
||||||
@ -28,7 +28,7 @@ public class MaterialLoader extends RocksimComponentFileLoader {
|
|||||||
return RocksimComponentFileType.MATERIAL;
|
return RocksimComponentFileType.MATERIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Material> getMaterialMap() {
|
public MaterialHolder getMaterialMap() {
|
||||||
return materialMap;
|
return materialMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,19 +41,19 @@ public class MaterialLoader extends RocksimComponentFileLoader {
|
|||||||
String cleanedMaterialName = stripAll(name, '"').trim();
|
String cleanedMaterialName = stripAll(name, '"').trim();
|
||||||
|
|
||||||
if ( "g/cm".equals( unit ) ) {
|
if ( "g/cm".equals( unit ) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Line(cleanedMaterialName, 0.1d * density, true));
|
materialMap.put( new Material.Line(cleanedMaterialName, 0.1d * density, true));
|
||||||
} else if ( "g/cm2".equals(unit) ) {
|
} else if ( "g/cm2".equals(unit) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Surface(cleanedMaterialName, 10.0d * density, true));
|
materialMap.put( new Material.Surface(cleanedMaterialName, 10.0d * density, true));
|
||||||
} else if ( "g/cm3".equals(unit) ) {
|
} else if ( "g/cm3".equals(unit) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Bulk(cleanedMaterialName, 1000.0d * density, true));
|
materialMap.put( new Material.Bulk(cleanedMaterialName, 1000.0d * density, true));
|
||||||
} else if ( "kg/m3".equals(unit) ) {
|
} else if ( "kg/m3".equals(unit) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Bulk(cleanedMaterialName, density, true));
|
materialMap.put( new Material.Bulk(cleanedMaterialName, density, true));
|
||||||
} else if ( "lb/ft3".equals(unit) ) {
|
} else if ( "lb/ft3".equals(unit) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Bulk(cleanedMaterialName, 16.0184634d * density, true));
|
materialMap.put( new Material.Bulk(cleanedMaterialName, 16.0184634d * density, true));
|
||||||
} else if ( "oz/in".equals(unit) ) {
|
} else if ( "oz/in".equals(unit) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Line(cleanedMaterialName, 1.11612296d * density, true));
|
materialMap.put( new Material.Line(cleanedMaterialName, 1.11612296d * density, true));
|
||||||
} else if ( "oz/in2".equals(unit ) ) {
|
} else if ( "oz/in2".equals(unit ) ) {
|
||||||
materialMap.put( cleanedMaterialName, new Material.Surface(cleanedMaterialName, 43.94184876d * density, true));
|
materialMap.put( new Material.Surface(cleanedMaterialName, 43.94184876d * density, true));
|
||||||
} else {
|
} else {
|
||||||
throw new BugException("Unknown unit in Materials file: " + unit);
|
throw new BugException("Unknown unit in Materials file: " + unit);
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
import net.sf.openrocket.preset.TypedPropertyMap;
|
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||||
|
|
||||||
public class NoseConeLoader extends BaseComponentLoader {
|
public class NoseConeLoader extends BaseComponentLoader {
|
||||||
|
|
||||||
public NoseConeLoader(Map<String, Material> materials) {
|
public NoseConeLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Outer Dia","Units",ComponentPreset.AFT_OUTER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("Outer Dia","Units",ComponentPreset.AFT_OUTER_DIAMETER));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
|
fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
import net.sf.openrocket.material.Material;
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
|
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||||
|
|
||||||
public class ParachuteLoader extends BaseComponentLoader {
|
public class ParachuteLoader extends BaseComponentLoader {
|
||||||
|
|
||||||
Map<String,Material> materialMap;
|
private final MaterialHolder materials;
|
||||||
|
|
||||||
public ParachuteLoader(Map<String, Material> materials) {
|
public ParachuteLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
this.materialMap = materials;
|
this.materials = materials;
|
||||||
fileColumns.add(new IntegerColumnParser("n sides", ComponentPreset.SIDES));
|
fileColumns.add(new IntegerColumnParser("n sides", ComponentPreset.SIDES));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.DIAMETER));
|
||||||
fileColumns.add(new IntegerColumnParser("Shroud Count", ComponentPreset.LINE_COUNT));
|
fileColumns.add(new IntegerColumnParser("Shroud Count", ComponentPreset.LINE_COUNT));
|
||||||
@ -34,4 +33,17 @@ public class ParachuteLoader extends BaseComponentLoader {
|
|||||||
return RocksimComponentFileType.PARACHUTE;
|
return RocksimComponentFileType.PARACHUTE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void postProcess(TypedPropertyMap props) {
|
||||||
|
super.postProcess(props);
|
||||||
|
|
||||||
|
// Fix the material since some files use bulk materials for streamers.
|
||||||
|
Double thickness = props.get( ComponentPreset.THICKNESS );
|
||||||
|
Material.Surface material = (Material.Surface) props.get( ComponentPreset.MATERIAL );
|
||||||
|
|
||||||
|
material = materials.getSurfaceMaterial(material, thickness);
|
||||||
|
props.put(ComponentPreset.MATERIAL, material);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public class RocksimComponentFileTranslator {
|
|||||||
MaterialLoader mats = new MaterialLoader();
|
MaterialLoader mats = new MaterialLoader();
|
||||||
mats.load();
|
mats.load();
|
||||||
|
|
||||||
Map<String, Material> materialMap = mats.getMaterialMap();
|
MaterialHolder materialMap = mats.getMaterialMap();
|
||||||
System.err.println("\tMaterial types loaded: " + materialMap.size());
|
System.err.println("\tMaterial types loaded: " + materialMap.size());
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1,18 +1,17 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
import net.sf.openrocket.material.Material;
|
||||||
import net.sf.openrocket.preset.ComponentPreset;
|
import net.sf.openrocket.preset.ComponentPreset;
|
||||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||||
|
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||||
|
|
||||||
public class StreamerLoader extends BaseComponentLoader {
|
public class StreamerLoader extends BaseComponentLoader {
|
||||||
|
|
||||||
Map<String,Material> materialMap;
|
private final MaterialHolder materials;
|
||||||
|
|
||||||
public StreamerLoader(Map<String, Material> materials) {
|
public StreamerLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
this.materialMap = materials;
|
this.materials = materials;
|
||||||
fileColumns.add(new SurfaceMaterialColumnParser(materials,"Material",ComponentPreset.MATERIAL));
|
fileColumns.add(new SurfaceMaterialColumnParser(materials,"Material",ComponentPreset.MATERIAL));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
|
fileColumns.add(new DoubleUnitColumnParser("Length","Units",ComponentPreset.LENGTH));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Width","Units",ComponentPreset.WIDTH));
|
fileColumns.add(new DoubleUnitColumnParser("Width","Units",ComponentPreset.WIDTH));
|
||||||
@ -31,4 +30,18 @@ public class StreamerLoader extends BaseComponentLoader {
|
|||||||
return RocksimComponentFileType.STREAMER;
|
return RocksimComponentFileType.STREAMER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void postProcess(TypedPropertyMap props) {
|
||||||
|
super.postProcess(props);
|
||||||
|
|
||||||
|
// Fix the material since some files use bulk materials for streamers.
|
||||||
|
Double thickness = props.get( ComponentPreset.THICKNESS );
|
||||||
|
Material.Surface material = (Material.Surface) props.get( ComponentPreset.MATERIAL );
|
||||||
|
|
||||||
|
material = materials.getSurfaceMaterial(material, thickness);
|
||||||
|
|
||||||
|
props.put(ComponentPreset.MATERIAL, material);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,16 @@
|
|||||||
package net.sf.openrocket.preset.loader;
|
package net.sf.openrocket.preset.loader;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.sf.openrocket.material.Material;
|
import net.sf.openrocket.material.Material;
|
||||||
import net.sf.openrocket.preset.TypedKey;
|
import net.sf.openrocket.preset.TypedKey;
|
||||||
import net.sf.openrocket.preset.TypedPropertyMap;
|
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||||
|
|
||||||
public class SurfaceMaterialColumnParser extends BaseColumnParser {
|
public class SurfaceMaterialColumnParser extends BaseColumnParser {
|
||||||
|
|
||||||
private Map<String,Material> materialMap = Collections.<String,Material>emptyMap();
|
private final MaterialHolder materialMap;
|
||||||
|
|
||||||
private final TypedKey<Material> param;
|
private final TypedKey<Material> param;
|
||||||
|
|
||||||
public SurfaceMaterialColumnParser(Map<String,Material> materialMap, String columnName, TypedKey<Material> param) {
|
public SurfaceMaterialColumnParser(MaterialHolder materialMap, String columnName, TypedKey<Material> param) {
|
||||||
super(columnName);
|
super(columnName);
|
||||||
this.param = param;
|
this.param = param;
|
||||||
this.materialMap = materialMap;
|
this.materialMap = materialMap;
|
||||||
@ -27,16 +24,8 @@ public class SurfaceMaterialColumnParser extends BaseColumnParser {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Material.Surface myMaterial;
|
Material.Surface myMaterial = new Material.Surface(columnData, 0.0, true);
|
||||||
|
myMaterial = materialMap.getSurfaceMaterial(myMaterial, null);
|
||||||
Material m = materialMap.get(columnData);
|
|
||||||
|
|
||||||
if ( m == null || m.getType() != Material.Type.SURFACE ) {
|
|
||||||
myMaterial = new Material.Surface(columnData, 0.0, true);
|
|
||||||
} else {
|
|
||||||
myMaterial =(Material.Surface) m;
|
|
||||||
}
|
|
||||||
|
|
||||||
props.put(param, myMaterial);
|
props.put(param, myMaterial);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import net.sf.openrocket.preset.ComponentPreset.Type;
|
|||||||
|
|
||||||
public class TransitionLoader extends NoseConeLoader {
|
public class TransitionLoader extends NoseConeLoader {
|
||||||
|
|
||||||
public TransitionLoader(Map<String, Material> materials) {
|
public TransitionLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Front Insert Len","Units",ComponentPreset.FORE_SHOULDER_LENGTH));
|
fileColumns.add(new DoubleUnitColumnParser("Front Insert Len","Units",ComponentPreset.FORE_SHOULDER_LENGTH));
|
||||||
fileColumns.add(new DoubleUnitColumnParser("Front Insert OD","Units",ComponentPreset.FORE_SHOULDER_DIAMETER));
|
fileColumns.add(new DoubleUnitColumnParser("Front Insert OD","Units",ComponentPreset.FORE_SHOULDER_DIAMETER));
|
||||||
|
@ -8,7 +8,7 @@ import net.sf.openrocket.preset.ComponentPreset.Type;
|
|||||||
|
|
||||||
public class TubeCouplerLoader extends BodyTubeLoader {
|
public class TubeCouplerLoader extends BodyTubeLoader {
|
||||||
|
|
||||||
public TubeCouplerLoader(Map<String, Material> materials) {
|
public TubeCouplerLoader(MaterialHolder materials) {
|
||||||
super(materials);
|
super(materials);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user