#![allow(clippy::field_reassign_with_default)]
use eulumdat::{Eulumdat, LampSet, Symmetry, TypeIndicator};
use std::fs;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let output_dir = "crates/eulumdat-wasm/templates";
println!("Creating wiki-batwing.ldt...");
let batwing = create_wiki_batwing();
fs::write(format!("{}/wiki-batwing.ldt", output_dir), batwing.to_ldt())?;
println!("Creating wiki-spotlight.ldt...");
let spotlight = create_wiki_spotlight();
fs::write(
format!("{}/wiki-spotlight.ldt", output_dir),
spotlight.to_ldt(),
)?;
println!("Creating wiki-flood.ldt...");
let flood = create_wiki_flood();
fs::write(format!("{}/wiki-flood.ldt", output_dir), flood.to_ldt())?;
println!("\n✓ Templates created in {}/", output_dir);
println!(" - wiki-batwing.ldt (IES vs CIE beam angle demo)");
println!(" - wiki-spotlight.ldt (narrow beam ~30°)");
println!(" - wiki-flood.ldt (wide flood ~120°)");
Ok(())
}
fn create_wiki_batwing() -> Eulumdat {
let mut ldt = Eulumdat::default();
ldt.identification = "Wikipedia Beam Angle Demo".to_string();
ldt.luminaire_name = "Batwing Distribution".to_string();
ldt.luminaire_number = "WIKI-BAT-01".to_string();
ldt.file_name = "wiki-batwing.ldt".to_string();
ldt.date_user = "IES vs CIE Demo".to_string();
ldt.type_indicator = TypeIndicator::PointSourceSymmetric;
ldt.symmetry = Symmetry::VerticalAxis;
ldt.length = 600.0;
ldt.width = 600.0;
ldt.height = 80.0;
ldt.downward_flux_fraction = 100.0;
ldt.light_output_ratio = 85.0;
ldt.lamp_sets = vec![LampSet {
num_lamps: 1,
lamp_type: "LED Panel 40W".to_string(),
total_luminous_flux: 4000.0,
color_appearance: "4000K".to_string(),
color_rendering_group: "1A".to_string(),
wattage_with_ballast: 40.0,
}];
ldt.num_c_planes = 1;
ldt.c_plane_distance = 0.0;
ldt.c_angles = vec![0.0];
ldt.num_g_planes = 19;
ldt.g_plane_distance = 5.0;
ldt.g_angles = (0..=90).step_by(5).map(|a| a as f64).collect();
ldt.intensities = vec![vec![
450.0, 470.0, 510.0, 560.0, 620.0, 680.0, 730.0, 760.0, 780.0, 770.0, 740.0, 680.0, 590.0, 470.0, 340.0, 200.0, 90.0, 30.0, 5.0, ]];
ldt
}
fn create_wiki_spotlight() -> Eulumdat {
let mut ldt = Eulumdat::default();
ldt.identification = "Wikipedia Beam Angle Demo".to_string();
ldt.luminaire_name = "Narrow Spotlight".to_string();
ldt.luminaire_number = "WIKI-SPOT-01".to_string();
ldt.file_name = "wiki-spotlight.ldt".to_string();
ldt.date_user = "30deg Beam".to_string();
ldt.type_indicator = TypeIndicator::PointSourceSymmetric;
ldt.symmetry = Symmetry::VerticalAxis;
ldt.length = 100.0;
ldt.width = 100.0;
ldt.height = 150.0;
ldt.downward_flux_fraction = 100.0;
ldt.light_output_ratio = 90.0;
ldt.lamp_sets = vec![LampSet {
num_lamps: 1,
lamp_type: "LED COB 15W".to_string(),
total_luminous_flux: 1500.0,
color_appearance: "3000K".to_string(),
color_rendering_group: "1A".to_string(),
wattage_with_ballast: 15.0,
}];
ldt.num_c_planes = 1;
ldt.c_plane_distance = 0.0;
ldt.c_angles = vec![0.0];
ldt.num_g_planes = 19;
ldt.g_plane_distance = 5.0;
ldt.g_angles = (0..=90).step_by(5).map(|a| a as f64).collect();
ldt.intensities = vec![vec![
1000.0, 980.0, 920.0, 820.0, 680.0, 520.0, 360.0, 220.0, 120.0, 60.0, 30.0, 15.0, 8.0, 4.0, 2.0, 1.0, 0.5, 0.2, 0.0, ]];
ldt
}
fn create_wiki_flood() -> Eulumdat {
let mut ldt = Eulumdat::default();
ldt.identification = "Wikipedia Beam Angle Demo".to_string();
ldt.luminaire_name = "Wide Flood".to_string();
ldt.luminaire_number = "WIKI-FLOOD-01".to_string();
ldt.file_name = "wiki-flood.ldt".to_string();
ldt.date_user = "120deg Field".to_string();
ldt.type_indicator = TypeIndicator::PointSourceSymmetric;
ldt.symmetry = Symmetry::VerticalAxis;
ldt.length = 300.0;
ldt.width = 300.0;
ldt.height = 50.0;
ldt.downward_flux_fraction = 100.0;
ldt.light_output_ratio = 88.0;
ldt.lamp_sets = vec![LampSet {
num_lamps: 1,
lamp_type: "LED Array 30W".to_string(),
total_luminous_flux: 3000.0,
color_appearance: "4000K".to_string(),
color_rendering_group: "1B".to_string(),
wattage_with_ballast: 30.0,
}];
ldt.num_c_planes = 1;
ldt.c_plane_distance = 0.0;
ldt.c_angles = vec![0.0];
ldt.num_g_planes = 19;
ldt.g_plane_distance = 5.0;
ldt.g_angles = (0..=90).step_by(5).map(|a| a as f64).collect();
ldt.intensities = vec![vec![
800.0, 795.0, 780.0, 755.0, 720.0, 675.0, 620.0, 555.0, 480.0, 400.0, 315.0, 230.0, 150.0, 85.0, 40.0, 15.0, 5.0, 1.0, 0.0, ]];
ldt
}