chiark / gitweb /
wip coords matrix
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 2 Jan 2021 01:13:32 +0000 (01:13 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 2 Jan 2021 01:13:32 +0000 (01:13 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Cargo.lock.example
wdriver.rs
wdriver/Cargo.toml

index 94591817dc21cda848e89f07d3e8e1a5c55ca5bc..bfac85523557d961b76089cb93fef59d77365bb6 100644 (file)
@@ -1675,6 +1675,7 @@ dependencies = [
  "fehler",
  "humantime",
  "if_chain",
+ "itertools",
  "libc",
  "log 0.4.11",
  "ndarray",
index 8705a9bc7247b011a59435e99672d5a087b3cdfa..1fbdb0e6dbcc97af7cc891dd034c0db20b6fd7a7 100644 (file)
@@ -782,14 +782,36 @@ impl<'g> PieceElement<'g> {
 
   #[throws(AE)]
   pub fn posw(&self) -> WebPos {
-    let ary = self.w.matrix.get_or_try_init(||{
+    let mat = self.w.matrix.get_or_try_init(||{
       let ary = self.w.su.driver.execute_script(r#"
         let m = space.getScreenCTM();
         return [m.a, m.b, m.c, m.d, m.e, m.f];
       "#)?;
-      dbg!(ary.value());
+      let ary = ary.value();
+      dbg!(ary);
+
+      let mat = (||{
+        let ary = ary.as_array().ok_or_else(|| anyhow!("not array"))?;
+        let mut mat = ndarray::Array2::<f64>::zeros((3,3));
+        for got in itertools::Itertools::zip_longest(
+          [11, 12, 21, 22, 41, 42].iter(),
+          // ^ from https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix
+          ary.iter(),
+        ) {
+          let (mij, v) = got.both().ok_or_else(|| anyhow!("wrong length"))?;
+          let adj = |v| (if v == 4 { 3 } else { v }) - 1;
+          let i = adj(mij / 10);
+          let j = adj(mij % 10);
+          mat[(i,j)] = v.as_f64().ok_or_else(|| anyhow!("entry not f64"))?;
+        }
+        Ok::<_,AE>(mat)
+      })()
+        .with_context(|| format!("getScreenCGM script gave {:?}", &ary))?;
+
+      dbg!(mat);
       Ok::<_,AE>(())
     })?;
+    let () = mat;
     (||{
       Ok::<_,AE>( todo!() )
     })()
index e6f8743322ab13673715d3439f51d50ca4d67aa7..239f22f936eed7901a51547a140e17bdb62b1b8f 100644 (file)
@@ -19,6 +19,7 @@ env_logger = "0.8"
 fehler = "1"
 humantime = "2"
 if_chain = "1"
+itertools = "0.9"
 log = "0.4"
 libc = "0.2"
 nix = "0.19"