use siphon::{LibraryResolver, RenderOptions, SvgSink}; use siphon::geom::BBox; use siphon::render::render as render_board; fn main() { let resolver = LibraryResolver::from_global().expect("load global fp-lib-table"); println!("loaded {} library entries", resolver.table.entries.len()); let lib_id = std::env::args().nth(1).unwrap_or_else(|| "Resistor_SMD:R_0603_1608Metric".into()); println!("resolving {lib_id}"); let fp = resolver.load_footprint(&lib_id).expect("load footprint"); println!("footprint with {} primitives, {} pads", fp.primitives.len(), fp.pads.len()); let board = siphon::Board { items: vec![siphon::Item::Footprint(fp)] }; let mut sink = SvgSink::new(BBox::empty()); let bb = render_board(&board, &mut sink, &RenderOptions::default()); sink.bounds = bb; let out_path = format!("/tmp/siphon_lib_{}.svg", lib_id.replace(':', "_").replace('/', "_")); std::fs::write(&out_path, sink.finish()).expect("write"); println!("wrote {out_path}"); }