struct Prep {
spec: ItemSpec,
pc: Box<dyn Piece>,
- uos: Vec<String>
+ uos: Vec<String>,
+ bbox: Vec<Vec<f64>>,
+ size: Vec<f64>,
};
let pieces : Vec<Prep> = items.into_iter().map(|it| {
let uos = uos.into_iter().map(|uo| uo.opname).collect::<Vec<_>>();
let spec = spec.clone();
- Ok::<_,AE>(Prep { spec, pc, uos })
+ let bbox = pc
+ .bbox_approx();
+ let mut bbox = bbox
+ .iter()
+ .map(|PosC(xy)| xy.iter().map(|&p| p as f64).collect::<Vec<_>>())
+ .collect::<Vec<_>>();
+ for xy in &mut bbox[0] { *xy -= BORDER }
+ for xy in &mut bbox[1] { *xy += BORDER }
+ let size = izip!(&bbox[0], &bbox[1])
+ .map(|(min,max)| max-min)
+ .collect::<Vec<_>>();
+
+ Ok::<_,AE>(Prep { spec, pc, uos, bbox, size })
})().with_context(|| format!("{:?}", &spec))
}).collect::<Result<Vec<_>,_>>()?;
let max_uos = pieces.iter().map(|s| s.uos.len()).max().unwrap_or(0);
println!(r#"<table rules="all">"#);
- for Prep { spec, pc, uos } in &pieces {
+ for Prep { spec, pc, uos, bbox, size } in &pieces {
println!(r#"<tr>"#);
println!(r#"<th align="left"><kbd>{}</kbd><th>"#, &spec.lib);
println!(r#"<th align="left"><kbd>{}</kbd><th>"#, &spec.item);
face
};
- let bbox = pc
- .bbox_approx();
- let mut bbox = bbox
- .iter()
- .map(|PosC(xy)| xy.iter().map(|&p| p as f64).collect::<Vec<_>>())
- .collect::<Vec<_>>();
- for xy in &mut bbox[0] { *xy -= BORDER }
- for xy in &mut bbox[1] { *xy += BORDER }
- let size = izip!(&bbox[0], &bbox[1])
- .map(|(min,max)| max-min)
- .collect::<Vec<_>>();
-
for face in 0..(if only1 { 1 } else { max_faces }) {
print!(r#"<td align="center""#);
if only1 { print!(r#" colspan="{}""#, max_faces); }