From: Ian Jackson Date: Mon, 22 Mar 2021 01:50:24 +0000 (+0000) Subject: shapelib refactoring: Do occult calculation later X-Git-Tag: otter-0.5.0~521 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=5d3572a4aed371363242d17d9e18593b5fa4ab94;p=otter.git shapelib refactoring: Do occult calculation later It is going to want to look at back Signed-off-by: Ian Jackson --- diff --git a/src/shapelib.rs b/src/shapelib.rs index 762cfe00..60fa6ab7 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -359,6 +359,32 @@ impl Contents { fn load1(&self, idata: &ItemData, name: &str) -> ItemSpecLoaded { let svg_data = self.load_svg(name, name)?; + idata.group.d.outline.check(&idata.group) + .map_err(|e| SpE::InternalError(format!("rechecking outline: {}",&e)))?; + let outline = idata.outline.clone(); + + let mut svgs = IndexVec::with_capacity(1); + let svg = svgs.push(svg_data); + + let mut descs = index_vec![ ]; + let desc = descs.push(idata.d.desc.clone()); + descs.shrink_to_fit(); + + let xform = FaceTransform::from_group(&idata.group.d) + .map_err(|e| SpE::InternalError(format!("reckoning transform: {}",&e)))?; + let mut face = ItemFace { svg, desc, xform }; + let mut faces = index_vec![ face ]; + let mut back = None; + if idata.group.d.flip { + face.xform.scale[0] *= -1.; + faces.push(face); + } else if let Some(back_spec) = &idata.group.d.back { + let p = back_spec.load_occult()?; + let p = p.into(); + back = Some(p); + } + faces.shrink_to_fit(); + let occultable = match &idata.occ { None => None, Some(occ) => { @@ -387,32 +413,6 @@ impl Contents { }, }; - idata.group.d.outline.check(&idata.group) - .map_err(|e| SpE::InternalError(format!("rechecking outline: {}",&e)))?; - let outline = idata.outline.clone(); - - let mut svgs = IndexVec::with_capacity(1); - let svg = svgs.push(svg_data); - - let mut descs = index_vec![ ]; - let desc = descs.push(idata.d.desc.clone()); - descs.shrink_to_fit(); - - let xform = FaceTransform::from_group(&idata.group.d) - .map_err(|e| SpE::InternalError(format!("reckoning transform: {}",&e)))?; - let mut face = ItemFace { svg, desc, xform }; - let mut faces = index_vec![ face ]; - let mut back = None; - if idata.group.d.flip { - face.xform.scale[0] *= -1.; - faces.push(face); - } else if let Some(back_spec) = &idata.group.d.back { - let p = back_spec.load_occult()?; - let p = p.into(); - back = Some(p); - } - faces.shrink_to_fit(); - let it = Item { faces, descs, svgs, outline, back, itemname: name.to_string() }; (Box::new(it), occultable)