chiark / gitweb /
shapelib refactoring: Do occult calculation later
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 22 Mar 2021 01:50:24 +0000 (01:50 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 22 Mar 2021 01:50:24 +0000 (01:50 +0000)
It is going to want to look at back

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/shapelib.rs

index 762cfe001801f4b38a36a841ff6dcc60a0a75bdd..60fa6ab76cc549ecfff2b74bd515cee1ba189c70 100644 (file)
@@ -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)