use crate::types::Triangle;
use byteorder::{LittleEndian, WriteBytesExt};
use std::io::{BufWriter, Result, Write};
pub fn write_stl<T, W, I>(writer: &mut W, mesh: I) -> Result<()>
where
W: ::std::io::Write,
I: ::std::iter::ExactSizeIterator<Item = T>,
T: std::borrow::Borrow<Triangle>,
{
let mut writer = BufWriter::new(writer);
writer.write_all(&[0u8; 80])?;
writer.write_u32::<LittleEndian>(mesh.len() as u32)?;
for t in mesh {
let t = t.borrow();
for f in &t.normal.0 {
writer.write_f32::<LittleEndian>(*f as f32)?;
}
for &p in &t.vertices {
for c in &p.0 {
writer.write_f32::<LittleEndian>(*c as f32)?;
}
}
writer.write_u16::<LittleEndian>(0)?;
}
writer.flush()
}