import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.material.Material;
+import net.sf.openrocket.material.Material.Type;
import net.sf.openrocket.material.MaterialStorage;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.MathUtil;
private static final LogHelper log = Application.getLogger();
private static final Translator trans = Application.getTranslator();
+
/* Static implementations of specific databases: */
/**
static {
// Add default materials
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Acrylic"), 1190, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Aluminum"), 2700, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Balsa"), 170, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Basswood"), 500, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Birch"), 670, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Brass"), 8600, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Cardboard"), 680, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Carbonfiber"), 1780, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Cork"), 240, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.DepronXPS"), 40, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Fiberglass"), 1850, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Kraftphenolic"), 950, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Maple"), 755, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Paperoffice"), 820, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Pine"), 530, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Plywoodbirch"), 630, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.PolycarbonateLexan"), 1200, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Polystyrene"), 1050, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.PVC"), 1390, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Spruce"), 450, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Steel"), 7850, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.StyrofoamgenericEPS"), 20, false));
- // BULK_MATERIAL.add(new Material.Bulk("Styrofoam (Blue foam, XPS)", 32, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.StyrofoamBluefoamXPS"), 32, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Titanium"), 4500, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.Quantumtubing"), 1050, false));
- BULK_MATERIAL.add(new Material.Bulk(trans.get("Databases.materials.BlueTube"), 1300, false));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Acrylic", 1190));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Aluminum", 2700));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Balsa", 170));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Basswood", 500));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Birch", 670));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Brass", 8600));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Cardboard", 680));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Carbon fiber", 1780));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Cork", 240));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Depron (XPS)", 40));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Fiberglass", 1850));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Kraft phenolic", 950));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Maple", 755));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Paper (office)", 820));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Pine", 530));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Plywood (birch)", 630));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Polycarbonate (Lexan)", 1200));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Polystyrene", 1050));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "PVC", 1390));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Spruce", 450));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Steel", 7850));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Styrofoam (generic EPS)", 20));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Styrofoam \"Blue foam\" (XPS)", 32));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Titanium", 4500));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Quantum tubing", 1050));
+ BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Blue tube", 1300));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Ripstopnylon"), 0.067, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Mylar"), 0.021, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Polyethylenethin"), 0.015, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Polyethyleneheavy"), 0.040, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Silk"), 0.060, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Paperoffice"), 0.080, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Cellophane"), 0.018, false));
- SURFACE_MATERIAL.add(new Material.Surface(trans.get("Databases.materials.Crepepaper"), 0.025, false));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Ripstop nylon", 0.067));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Mylar", 0.021));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Polyethylene (thin)", 0.015));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Polyethylene (heavy)", 0.040));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Silk", 0.060));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Paper (office)", 0.080));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Cellophane", 0.018));
+ SURFACE_MATERIAL.add(newMaterial(Material.Type.SURFACE, "Cr\u00eape paper", 0.025));
- //// Thread (heavy-duty)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Threadheavy-duty"), 0.0003, false));
- //// Elastic cord (round 2mm, 1/16 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Elasticcordround2mm"), 0.0018, false));
- //// Elastic cord (flat 6mm, 1/4 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Elasticcordflat6mm"), 0.0043, false));
- //// Elastic cord (flat 12mm, 1/2 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Elasticcordflat12mm"), 0.008, false));
- //// Elastic cord (flat 19mm, 3/4 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Elasticcordflat19mm"), 0.0012, false));
- //// Elastic cord (flat 25mm, 1 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Elasticcordflat25mm"), 0.0016, false));
- //// Braided nylon (2 mm, 1/16 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Braidednylon2mm"), 0.001, false));
- //// Braided nylon (3 mm, 1/8 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Braidednylon3mm"), 0.0035, false));
- //// Tubular nylon (11 mm, 7/16 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Tubularnylon11mm"), 0.013, false));
- //// Tubular nylon (14 mm, 9/16 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Tubularnylon14mm"), 0.016, false));
- //// Tubular nylon (25 mm, 1 in)
- LINE_MATERIAL.add(new Material.Line(trans.get("Databases.materials.Tubularnylon25mm"), 0.029, false));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Thread (heavy-duty)", 0.0003));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Elastic cord (round 2 mm, 1/16 in)", 0.0018));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Elastic cord (flat 6 mm, 1/4 in)", 0.0043));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Elastic cord (flat 12 mm, 1/2 in)", 0.008));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Elastic cord (flat 19 mm, 3/4 in)", 0.0012));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Elastic cord (flat 25 mm, 1 in)", 0.0016));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Braided nylon (2 mm, 1/16 in)", 0.001));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Braided nylon (3 mm, 1/8 in)", 0.0035));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Tubular nylon (11 mm, 7/16 in)", 0.013));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Tubular nylon (14 mm, 9/16 in)", 0.016));
+ LINE_MATERIAL.add(newMaterial(Material.Type.LINE, "Tubular nylon (25 mm, 1 in)", 0.029));
// Add user-defined materials
}
+ private static Material newMaterial(Type type, String baseName, double density) {
+ String name = trans.get("material", baseName);
+ return Material.newMaterial(type, name, density, false);
+ }
+
+
+
+
/*
* Used just for ensuring initialization of the class.
*/
}
-
/**
* Find a material from the database with the specified type and name. Returns
* <code>null</code> if the specified material could not be found.
+ * <p>
+ * This method will attempt to localize the material name to the current locale, or use
+ * the provided name if unable to do so.
*
- * @param type the material type.
- * @param name the material name in the database.
- * @return the material, or <code>null</code> if not found.
+ * @param type the material type.
+ * @param baseName the material base name in the database.
+ * @return the material, or <code>null</code> if not found.
*/
- public static Material findMaterial(Material.Type type, String name) {
+ public static Material findMaterial(Material.Type type, String baseName) {
Database<Material> db;
switch (type) {
case BULK:
throw new IllegalArgumentException("Illegal material type: " + type);
}
+ String name = trans.get("material", baseName);
+
for (Material m : db) {
if (m.getName().equalsIgnoreCase(name)) {
return m;
/**
- * Find a material from the database or return a new material if the specified
+ * Find a material from the database or return a new user defined material if the specified
* material with the specified density is not found.
+ * <p>
+ * This method will attempt to localize the material name to the current locale, or use
+ * the provided name if unable to do so.
*
* @param type the material type.
- * @param name the material name.
+ * @param baseName the base name of the material.
* @param density the density of the material.
- * @param userDefined whether a newly created material should be user-defined.
* @return the material object from the database or a new material.
*/
- public static Material findMaterial(Material.Type type, String name, double density,
- boolean userDefined) {
+ public static Material findMaterial(Material.Type type, String baseName, double density) {
Database<Material> db;
switch (type) {
case BULK:
throw new IllegalArgumentException("Illegal material type: " + type);
}
+ String name = trans.get("material", baseName);
+
for (Material m : db) {
if (m.getName().equalsIgnoreCase(name) && MathUtil.equals(m.getDensity(), density)) {
return m;
}
}
- return Material.newMaterial(type, name, density, userDefined);
+ return Material.newMaterial(type, name, density, true);
}
-
}