use crate::Material;
use super::types::{ExtendedMaterial, MaterialCategory};
pub fn steel() -> Material {
Material::new("steel", 7800.0, 0.6, 0.3)
}
pub fn stainless_steel() -> Material {
Material::new("stainless_steel", 7900.0, 0.55, 0.25)
}
pub fn cast_iron() -> Material {
Material::new("cast_iron", 7200.0, 0.55, 0.2)
}
pub fn aluminum() -> Material {
Material::new("aluminum", 2700.0, 0.47, 0.3)
}
pub fn copper() -> Material {
Material::new("copper", 8960.0, 0.5, 0.25)
}
pub fn brass() -> Material {
Material::new("brass", 8500.0, 0.5, 0.28)
}
pub fn titanium() -> Material {
Material::new("titanium", 4430.0, 0.5, 0.32)
}
pub fn lead() -> Material {
Material::new("lead", 11340.0, 0.4, 0.05)
}
pub fn tungsten() -> Material {
Material::new("tungsten", 19300.0, 0.35, 0.15)
}
pub fn magnesium() -> Material {
Material::new("magnesium", 1740.0, 0.45, 0.3)
}
pub fn nickel() -> Material {
Material::new("nickel", 8908.0, 0.53, 0.28)
}
pub fn zinc() -> Material {
Material::new("zinc", 7133.0, 0.45, 0.2)
}
pub fn silver() -> Material {
Material::new("silver", 10490.0, 0.4, 0.35)
}
pub fn gold() -> Material {
Material::new("gold", 19320.0, 0.35, 0.2)
}
pub fn inconel() -> Material {
Material::new("inconel_718", 8190.0, 0.5, 0.25)
}
pub fn alumina() -> Material {
Material::new("alumina", 3950.0, 0.35, 0.5)
}
pub fn silicon_carbide() -> Material {
Material::new("silicon_carbide", 3210.0, 0.3, 0.45)
}
pub fn silicon_nitride() -> Material {
Material::new("silicon_nitride", 3200.0, 0.32, 0.48)
}
pub fn zirconia() -> Material {
Material::new("zirconia", 5680.0, 0.35, 0.42)
}
pub fn boron_carbide() -> Material {
Material::new("boron_carbide", 2520.0, 0.25, 0.4)
}
pub fn porcelain() -> Material {
Material::new("porcelain", 2400.0, 0.4, 0.45)
}
pub fn fused_silica() -> Material {
Material::new("fused_silica", 2200.0, 0.35, 0.5)
}
pub fn cfrp() -> Material {
Material::new("cfrp", 1600.0, 0.3, 0.4)
}
pub fn gfrp() -> Material {
Material::new("gfrp", 2000.0, 0.35, 0.45)
}
pub fn kevlar_composite() -> Material {
Material::new("kevlar_composite", 1440.0, 0.35, 0.4)
}
pub fn ceramic_matrix_composite() -> Material {
Material::new("cmc_sic_sic", 2800.0, 0.3, 0.35)
}
pub fn metal_matrix_composite() -> Material {
Material::new("mmc_al_sic", 2900.0, 0.4, 0.35)
}
pub fn plywood() -> Material {
Material::new("plywood", 640.0, 0.45, 0.38)
}
pub fn rubber() -> Material {
Material::new("rubber", 1100.0, 0.9, 0.8)
}
pub fn soft_rubber() -> Material {
Material::new("soft_rubber", 950.0, 0.95, 0.92)
}
pub fn hdpe() -> Material {
Material::new("hdpe", 960.0, 0.25, 0.45)
}
pub fn ptfe() -> Material {
Material::new("ptfe", 2200.0, 0.04, 0.35)
}
pub fn nylon() -> Material {
Material::new("nylon", 1150.0, 0.4, 0.5)
}
pub fn polycarbonate() -> Material {
Material::new("polycarbonate", 1200.0, 0.45, 0.55)
}
pub fn pvc() -> Material {
Material::new("pvc", 1380.0, 0.5, 0.4)
}
pub fn acrylic() -> Material {
Material::new("acrylic", 1190.0, 0.5, 0.5)
}
pub fn pet() -> Material {
Material::new("pet", 1380.0, 0.4, 0.45)
}
pub fn polypropylene() -> Material {
Material::new("polypropylene", 905.0, 0.3, 0.4)
}
pub fn polystyrene() -> Material {
Material::new("polystyrene", 1050.0, 0.4, 0.35)
}
pub fn polyurethane_foam() -> Material {
Material::new("polyurethane_foam", 30.0, 0.6, 0.1)
}
pub fn epoxy() -> Material {
Material::new("epoxy", 1200.0, 0.5, 0.35)
}
pub fn peek() -> Material {
Material::new("peek", 1300.0, 0.4, 0.45)
}
pub fn cortical_bone() -> Material {
Material::new("cortical_bone", 1900.0, 0.4, 0.3)
}
pub fn cancellous_bone() -> Material {
Material::new("cancellous_bone", 800.0, 0.35, 0.2)
}
pub fn cartilage() -> Material {
Material::new("cartilage", 1200.0, 0.01, 0.4)
}
pub fn silicone_medical() -> Material {
Material::new("silicone_medical", 1100.0, 0.6, 0.75)
}
pub fn hydroxyapatite() -> Material {
Material::new("hydroxyapatite", 3160.0, 0.3, 0.35)
}
pub fn dental_enamel() -> Material {
Material::new("dental_enamel", 2950.0, 0.35, 0.4)
}
pub fn collagen() -> Material {
Material::new("collagen", 1300.0, 0.2, 0.3)
}
pub fn bioglass() -> Material {
Material::new("bioglass_45s5", 2700.0, 0.35, 0.4)
}
pub fn uhmwpe() -> Material {
Material::new("uhmwpe", 930.0, 0.1, 0.4)
}
pub fn wood() -> Material {
Material::new("wood", 600.0, 0.5, 0.4)
}
pub fn oak() -> Material {
Material::new("oak", 750.0, 0.55, 0.35)
}
pub fn glass() -> Material {
Material::new("glass", 2500.0, 0.4, 0.5)
}
pub fn tempered_glass() -> Material {
Material::new("tempered_glass", 2500.0, 0.4, 0.5)
}
pub fn concrete() -> Material {
Material::new("concrete", 2400.0, 0.65, 0.2)
}
pub fn reinforced_concrete() -> Material {
Material::new("reinforced_concrete", 2500.0, 0.65, 0.2)
}
pub fn brick() -> Material {
Material::new("brick", 1900.0, 0.7, 0.15)
}
pub fn granite() -> Material {
Material::new("granite", 2700.0, 0.75, 0.2)
}
pub fn marble() -> Material {
Material::new("marble", 2700.0, 0.45, 0.3)
}
pub fn asphalt() -> Material {
Material::new("asphalt", 2300.0, 0.9, 0.1)
}
pub fn dry_sand() -> Material {
Material::new("dry_sand", 1600.0, 0.6, 0.1)
}
pub fn wet_clay() -> Material {
Material::new("wet_clay", 1800.0, 0.3, 0.05)
}
pub fn water() -> Material {
Material::new("water", 1000.0, 0.0, 0.0)
}
pub fn seawater() -> Material {
Material::new("seawater", 1025.0, 0.0, 0.0)
}
pub fn air() -> Material {
Material::new("air", 1.225, 0.0, 0.0)
}
pub fn ice() -> Material {
Material::new("ice", 917.0, 0.03, 0.7)
}
pub fn glycerin() -> Material {
Material::new("glycerin", 1260.0, 0.0, 0.0)
}
pub fn ethanol() -> Material {
Material::new("ethanol", 789.0, 0.0, 0.0)
}
pub fn mercury() -> Material {
Material::new("mercury", 13534.0, 0.0, 0.0)
}
pub fn tennis_ball() -> Material {
Material::new("tennis_ball", 580.0, 0.6, 0.75)
}
pub fn golf_ball() -> Material {
Material::new("golf_ball", 1100.0, 0.35, 0.8)
}
pub fn basketball() -> Material {
Material::new("basketball", 580.0, 0.8, 0.72)
}
pub fn billiard_ball() -> Material {
Material::new("billiard_ball", 1550.0, 0.2, 0.95)
}
pub fn bowling_ball() -> Material {
Material::new("bowling_ball", 1600.0, 0.3, 0.65)
}
pub fn extended_steel() -> ExtendedMaterial {
ExtendedMaterial::new(
steel(),
200.0e9,
0.3,
355.0e6,
510.0e6,
50.0,
500.0,
12.0e-6,
)
}
pub fn extended_aluminum() -> ExtendedMaterial {
ExtendedMaterial::new(
aluminum(),
69.0e9,
0.33,
275.0e6,
310.0e6,
167.0,
896.0,
23.6e-6,
)
}
pub fn extended_hdpe() -> ExtendedMaterial {
ExtendedMaterial::new(hdpe(), 1.0e9, 0.44, 25.0e6, 32.0e6, 0.46, 1900.0, 150.0e-6)
}
pub fn extended_concrete() -> ExtendedMaterial {
ExtendedMaterial::new(concrete(), 30.0e9, 0.2, 30.0e6, 3.0e6, 1.7, 880.0, 10.0e-6)
}
pub fn extended_copper() -> ExtendedMaterial {
ExtendedMaterial::new(
copper(),
120.0e9,
0.34,
70.0e6,
220.0e6,
401.0,
385.0,
17.0e-6,
)
}
pub fn extended_titanium() -> ExtendedMaterial {
ExtendedMaterial::new(
titanium(),
114.0e9,
0.33,
880.0e6,
950.0e6,
6.7,
526.0,
8.6e-6,
)
}
pub fn extended_alumina() -> ExtendedMaterial {
ExtendedMaterial::new(
alumina(),
380.0e9,
0.22,
300.0e6,
300.0e6,
30.0,
880.0,
8.0e-6,
)
}
pub fn extended_silicon_carbide() -> ExtendedMaterial {
ExtendedMaterial::new(
silicon_carbide(),
410.0e9,
0.14,
400.0e6,
400.0e6,
120.0,
750.0,
4.0e-6,
)
}
pub fn extended_cfrp() -> ExtendedMaterial {
ExtendedMaterial::new(cfrp(), 70.0e9, 0.3, 600.0e6, 800.0e6, 5.0, 1000.0, 2.0e-6)
}
pub fn extended_peek() -> ExtendedMaterial {
ExtendedMaterial::new(peek(), 3.6e9, 0.4, 100.0e6, 100.0e6, 0.25, 2180.0, 47.0e-6)
}
pub fn extended_cortical_bone() -> ExtendedMaterial {
ExtendedMaterial::new(
cortical_bone(),
17.0e9,
0.3,
130.0e6,
150.0e6,
0.32,
1260.0,
11.0e-6,
)
}
pub fn metal_presets() -> Vec<Material> {
vec![
steel(),
stainless_steel(),
cast_iron(),
aluminum(),
copper(),
brass(),
titanium(),
lead(),
tungsten(),
magnesium(),
nickel(),
zinc(),
silver(),
gold(),
inconel(),
]
}
pub fn ceramic_presets() -> Vec<Material> {
vec![
alumina(),
silicon_carbide(),
silicon_nitride(),
zirconia(),
boron_carbide(),
porcelain(),
fused_silica(),
]
}
pub fn composite_presets() -> Vec<Material> {
vec![
cfrp(),
gfrp(),
kevlar_composite(),
ceramic_matrix_composite(),
metal_matrix_composite(),
plywood(),
]
}
pub fn polymer_presets() -> Vec<Material> {
vec![
rubber(),
soft_rubber(),
hdpe(),
ptfe(),
nylon(),
polycarbonate(),
pvc(),
acrylic(),
pet(),
polypropylene(),
polystyrene(),
polyurethane_foam(),
epoxy(),
peek(),
]
}
pub fn biomaterial_presets() -> Vec<Material> {
vec![
cortical_bone(),
cancellous_bone(),
cartilage(),
silicone_medical(),
hydroxyapatite(),
dental_enamel(),
collagen(),
bioglass(),
uhmwpe(),
]
}
pub fn building_presets() -> Vec<Material> {
vec![
wood(),
oak(),
glass(),
tempered_glass(),
concrete(),
reinforced_concrete(),
brick(),
granite(),
marble(),
asphalt(),
dry_sand(),
wet_clay(),
]
}
pub fn fluid_presets() -> Vec<Material> {
vec![
water(),
seawater(),
air(),
ice(),
glycerin(),
ethanol(),
mercury(),
]
}
pub fn sports_presets() -> Vec<Material> {
vec![
tennis_ball(),
golf_ball(),
basketball(),
billiard_ball(),
bowling_ball(),
]
}
pub fn all_presets() -> Vec<Material> {
let mut all = Vec::new();
all.extend(metal_presets());
all.extend(ceramic_presets());
all.extend(composite_presets());
all.extend(polymer_presets());
all.extend(biomaterial_presets());
all.extend(building_presets());
all.extend(fluid_presets());
all.extend(sports_presets());
all
}
pub fn presets_by_category(category: MaterialCategory) -> Vec<Material> {
match category {
MaterialCategory::Metal => metal_presets(),
MaterialCategory::Polymer => polymer_presets(),
MaterialCategory::Ceramic => ceramic_presets(),
MaterialCategory::Composite => composite_presets(),
MaterialCategory::Biomaterial => biomaterial_presets(),
MaterialCategory::Building => building_presets(),
MaterialCategory::Fluid => fluid_presets(),
MaterialCategory::Sports => sports_presets(),
}
}
pub fn preset_by_name(name: &str) -> Option<Material> {
let lower = name.to_lowercase();
all_presets()
.into_iter()
.find(|m| m.name.to_lowercase() == lower)
}
pub fn all_extended_presets() -> Vec<ExtendedMaterial> {
vec![
extended_steel(),
extended_aluminum(),
extended_hdpe(),
extended_concrete(),
extended_copper(),
extended_titanium(),
extended_alumina(),
extended_silicon_carbide(),
extended_cfrp(),
extended_peek(),
extended_cortical_bone(),
]
}
pub fn nitinol() -> Material {
Material::new("nitinol_niti", 6450.0, 0.5, 0.35)
}
pub fn hastelloy() -> Material {
Material::new("hastelloy_c276", 8890.0, 0.5, 0.25)
}
pub fn maraging_steel() -> Material {
Material::new("maraging_steel_300", 8000.0, 0.58, 0.25)
}
pub fn hydrogel() -> Material {
Material::new("hydrogel", 1050.0, 0.05, 0.05)
}
pub fn polyimide() -> Material {
Material::new("polyimide", 1430.0, 0.4, 0.4)
}
pub fn carbon_fiber_composite() -> Material {
Material::new("carbon_fiber_composite", 1550.0, 0.28, 0.38)
}
pub fn glass_fiber_epoxy() -> Material {
Material::new("glass_fiber_epoxy", 1900.0, 0.35, 0.40)
}
pub fn trabecular_bone() -> Material {
Material::new("trabecular_bone", 500.0, 0.3, 0.15)
}
pub fn peek_biomedical() -> Material {
Material::new("peek_biomedical", 1310.0, 0.38, 0.42)
}
pub fn extended_nitinol() -> ExtendedMaterial {
ExtendedMaterial::new(
nitinol(),
83.0e9,
0.33,
195.0e6,
895.0e6,
18.0,
490.0,
11.0e-6,
)
}
pub fn extended_ptfe() -> ExtendedMaterial {
ExtendedMaterial::new(ptfe(), 0.5e9, 0.46, 23.0e6, 31.0e6, 0.25, 1000.0, 135.0e-6)
}
pub fn extended_polycarbonate() -> ExtendedMaterial {
ExtendedMaterial::new(
polycarbonate(),
2.4e9,
0.37,
60.0e6,
65.0e6,
0.2,
1200.0,
68.0e-6,
)
}
pub fn extended_carbon_fiber_composite() -> ExtendedMaterial {
ExtendedMaterial::new(
carbon_fiber_composite(),
120.0e9,
0.27,
800.0e6,
1000.0e6,
7.0,
900.0,
1.5e-6,
)
}
pub fn extended_glass_fiber_epoxy() -> ExtendedMaterial {
ExtendedMaterial::new(
glass_fiber_epoxy(),
25.0e9,
0.27,
350.0e6,
450.0e6,
0.35,
1000.0,
15.0e-6,
)
}
pub fn extended_hydrogel() -> ExtendedMaterial {
ExtendedMaterial::new(
hydrogel(),
0.001e9,
0.49,
0.01e6,
0.02e6,
0.6,
4000.0,
300.0e-6,
)
}
pub fn extended_niti() -> ExtendedMaterial {
extended_nitinol()
}
pub fn extended_cortical_bone_v2() -> ExtendedMaterial {
ExtendedMaterial::new(
cortical_bone(),
18.0e9,
0.30,
150.0e6,
170.0e6,
0.33,
1300.0,
10.0e-6,
)
}
#[allow(dead_code)]
pub fn compare_by_density(a: &Material, b: &Material) -> std::cmp::Ordering {
a.density
.partial_cmp(&b.density)
.unwrap_or(std::cmp::Ordering::Equal)
}
#[allow(dead_code)]
pub fn stiffest_material(materials: &[ExtendedMaterial]) -> Option<&ExtendedMaterial> {
materials.iter().max_by(|a, b| {
a.young_modulus
.partial_cmp(&b.young_modulus)
.unwrap_or(std::cmp::Ordering::Equal)
})
}
#[allow(dead_code)]
pub fn highest_specific_strength(materials: &[ExtendedMaterial]) -> Option<&ExtendedMaterial> {
materials.iter().max_by(|a, b| {
a.specific_strength()
.partial_cmp(&b.specific_strength())
.unwrap_or(std::cmp::Ordering::Equal)
})
}
pub fn advanced_extended_presets() -> Vec<ExtendedMaterial> {
vec![
extended_nitinol(),
extended_ptfe(),
extended_polycarbonate(),
extended_carbon_fiber_composite(),
extended_glass_fiber_epoxy(),
extended_hydrogel(),
]
}
pub fn al_7075_t6() -> Material {
Material::new("al_7075_t6", 2810.0, 0.47, 0.28)
}
pub fn al_2024_t3() -> Material {
Material::new("al_2024_t3", 2780.0, 0.47, 0.3)
}
pub fn ti_cp_grade2() -> Material {
Material::new("ti_cp_grade2", 4510.0, 0.48, 0.3)
}
pub fn inconel_625() -> Material {
Material::new("inconel_625", 8440.0, 0.5, 0.25)
}
pub fn cobalt_chromium() -> Material {
Material::new("cobalt_chromium", 8300.0, 0.45, 0.22)
}
pub fn beryllium() -> Material {
Material::new("beryllium", 1850.0, 0.4, 0.25)
}
pub fn molybdenum() -> Material {
Material::new("molybdenum", 10220.0, 0.45, 0.2)
}
pub fn rhenium() -> Material {
Material::new("rhenium", 21020.0, 0.4, 0.15)
}
pub fn extended_al_7075_t6() -> ExtendedMaterial {
ExtendedMaterial::new(
al_7075_t6(),
71.7e9,
0.33,
503.0e6,
572.0e6,
130.0,
960.0,
23.6e-6,
)
}
pub fn extended_al_2024_t3() -> ExtendedMaterial {
ExtendedMaterial::new(
al_2024_t3(),
73.1e9,
0.33,
345.0e6,
483.0e6,
121.0,
875.0,
23.2e-6,
)
}
pub fn extended_inconel_625() -> ExtendedMaterial {
ExtendedMaterial::new(
inconel_625(),
207.0e9,
0.31,
517.0e6,
930.0e6,
12.8,
410.0,
13.0e-6,
)
}
pub fn extended_cobalt_chromium() -> ExtendedMaterial {
ExtendedMaterial::new(
cobalt_chromium(),
210.0e9,
0.3,
500.0e6,
900.0e6,
14.7,
450.0,
12.0e-6,
)
}
pub fn extended_beryllium() -> ExtendedMaterial {
ExtendedMaterial::new(
beryllium(),
287.0e9,
0.07,
207.0e6,
380.0e6,
210.0,
1825.0,
11.4e-6,
)
}
pub fn aerospace_presets() -> Vec<Material> {
vec![
al_7075_t6(),
al_2024_t3(),
ti_cp_grade2(),
inconel_625(),
cobalt_chromium(),
beryllium(),
molybdenum(),
rhenium(),
]
}
pub fn intervertebral_disc() -> Material {
Material::new("intervertebral_disc", 1020.0, 0.02, 0.3)
}
pub fn articular_cartilage() -> Material {
Material::new("articular_cartilage", 1100.0, 0.005, 0.35)
}
pub fn meniscus_cartilage() -> Material {
Material::new("meniscus_cartilage", 1200.0, 0.01, 0.3)
}
pub fn ligament() -> Material {
Material::new("ligament", 1200.0, 0.3, 0.2)
}
pub fn tendon() -> Material {
Material::new("tendon", 1165.0, 0.25, 0.15)
}
pub fn skin_dermis() -> Material {
Material::new("skin_dermis", 1090.0, 0.5, 0.2)
}
pub fn pla_biopolymer() -> Material {
Material::new("pla_biopolymer", 1240.0, 0.45, 0.4)
}
pub fn extended_cortical_bone_orthotropic() -> ExtendedMaterial {
ExtendedMaterial::new(
cortical_bone(),
20.0e9,
0.3,
140.0e6,
160.0e6,
0.34,
1260.0,
11.0e-6,
)
}
pub fn ptfe_enhanced() -> Material {
Material::new("ptfe_enhanced", 2180.0, 0.03, 0.3)
}
pub fn pei_ultem() -> Material {
Material::new("pei_ultem", 1270.0, 0.42, 0.4)
}
pub fn pvdf() -> Material {
Material::new("pvdf", 1780.0, 0.4, 0.38)
}
pub fn abs_plastic() -> Material {
Material::new("abs", 1050.0, 0.5, 0.45)
}
pub fn pa12_nylon() -> Material {
Material::new("pa12_nylon", 1010.0, 0.38, 0.42)
}
pub fn extended_peek_cf30() -> ExtendedMaterial {
ExtendedMaterial::new(peek(), 15.0e9, 0.38, 220.0e6, 230.0e6, 0.9, 1100.0, 20.0e-6)
}
pub fn mullite() -> Material {
Material::new("mullite", 2800.0, 0.3, 0.4)
}
pub fn cordierite() -> Material {
Material::new("cordierite", 2510.0, 0.3, 0.35)
}
pub fn zirconia_y_psz() -> Material {
Material::new("zirconia_y_psz", 5900.0, 0.35, 0.38)
}
pub fn extended_zirconia_y_psz() -> ExtendedMaterial {
ExtendedMaterial::new(
zirconia_y_psz(),
200.0e9,
0.31,
900.0e6,
1100.0e6,
2.0,
460.0,
10.5e-6,
)
}
pub fn concrete_c20() -> Material {
Material::new("concrete_c20", 2350.0, 0.65, 0.15)
}
pub fn concrete_c30() -> Material {
Material::new("concrete_c30", 2380.0, 0.65, 0.18)
}
pub fn concrete_c40() -> Material {
Material::new("concrete_c40", 2400.0, 0.65, 0.2)
}
pub fn concrete_c50() -> Material {
Material::new("concrete_c50", 2420.0, 0.65, 0.2)
}
pub fn concrete_c60() -> Material {
Material::new("concrete_c60", 2450.0, 0.65, 0.22)
}
pub fn extended_concrete_c20() -> ExtendedMaterial {
ExtendedMaterial::new(
concrete_c20(),
28.0e9,
0.2,
20.0e6,
2.2e6,
1.5,
850.0,
10.0e-6,
)
}
pub fn extended_concrete_c40() -> ExtendedMaterial {
ExtendedMaterial::new(
concrete_c40(),
35.0e9,
0.2,
40.0e6,
3.8e6,
1.7,
870.0,
10.0e-6,
)
}
pub fn extended_concrete_c60() -> ExtendedMaterial {
ExtendedMaterial::new(
concrete_c60(),
42.0e9,
0.2,
60.0e6,
5.0e6,
1.9,
900.0,
10.0e-6,
)
}
pub fn gravel() -> Material {
Material::new("gravel", 1700.0, 0.7, 0.08)
}
pub fn silt() -> Material {
Material::new("silt", 1850.0, 0.25, 0.05)
}
pub fn dry_clay() -> Material {
Material::new("dry_clay", 1650.0, 0.35, 0.06)
}
pub fn saturated_clay() -> Material {
Material::new("saturated_clay", 2000.0, 0.15, 0.04)
}
pub fn dense_sand() -> Material {
Material::new("dense_sand", 1900.0, 0.65, 0.1)
}
pub fn loose_sand() -> Material {
Material::new("loose_sand", 1400.0, 0.5, 0.08)
}
pub fn peat() -> Material {
Material::new("peat", 800.0, 0.2, 0.05)
}
pub fn rammed_earth() -> Material {
Material::new("rammed_earth", 2000.0, 0.55, 0.12)
}
pub fn soil_presets() -> Vec<Material> {
vec![
dry_sand(),
wet_clay(),
gravel(),
silt(),
dry_clay(),
saturated_clay(),
dense_sand(),
loose_sand(),
peat(),
rammed_earth(),
]
}
pub fn pine_wood() -> Material {
Material::new("pine_wood", 530.0, 0.5, 0.38)
}
pub fn balsa_wood() -> Material {
Material::new("balsa_wood", 160.0, 0.45, 0.35)
}
pub fn beech_wood() -> Material {
Material::new("beech_wood", 720.0, 0.55, 0.36)
}
pub fn teak_wood() -> Material {
Material::new("teak_wood", 800.0, 0.5, 0.32)
}
pub fn maple_wood() -> Material {
Material::new("maple_wood", 705.0, 0.55, 0.35)
}
pub fn walnut_wood() -> Material {
Material::new("walnut_wood", 640.0, 0.5, 0.33)
}
pub fn bamboo() -> Material {
Material::new("bamboo", 700.0, 0.45, 0.36)
}
pub fn mdf_board() -> Material {
Material::new("mdf_board", 750.0, 0.5, 0.3)
}
pub fn osb_board() -> Material {
Material::new("osb_board", 640.0, 0.5, 0.28)
}
pub fn extended_oak() -> ExtendedMaterial {
ExtendedMaterial::new(oak(), 12.0e9, 0.3, 55.0e6, 90.0e6, 0.17, 1700.0, 5.0e-6)
}
pub fn extended_pine_wood() -> ExtendedMaterial {
ExtendedMaterial::new(
pine_wood(),
10.0e9,
0.3,
40.0e6,
70.0e6,
0.14,
1600.0,
4.5e-6,
)
}