From 5a4e7a838d7364b9b776d3200075335070c2a287 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 2 Jan 2021 01:13:32 +0000 Subject: [PATCH] wip coords matrix Signed-off-by: Ian Jackson --- Cargo.lock.example | 1 + wdriver.rs | 26 ++++++++++++++++++++++++-- wdriver/Cargo.toml | 1 + 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Cargo.lock.example b/Cargo.lock.example index 94591817..bfac8552 100644 --- a/Cargo.lock.example +++ b/Cargo.lock.example @@ -1675,6 +1675,7 @@ dependencies = [ "fehler", "humantime", "if_chain", + "itertools", "libc", "log 0.4.11", "ndarray", diff --git a/wdriver.rs b/wdriver.rs index 8705a9bc..1fbdb0e6 100644 --- a/wdriver.rs +++ b/wdriver.rs @@ -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::::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!() ) })() diff --git a/wdriver/Cargo.toml b/wdriver/Cargo.toml index e6f87433..239f22f9 100644 --- a/wdriver/Cargo.toml +++ b/wdriver/Cargo.toml @@ -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" -- 2.30.2