From 9ba4dee9531e7ef4b4538fb23e3731a25fb8ea91 Mon Sep 17 00:00:00 2001 From: Kinch Date: Wed, 27 Sep 2023 11:46:17 +0200 Subject: [PATCH] rr: add rect_xyxy --- Cargo.lock | 33 +++++++++++++++++++++++++++++++- Cargo.toml | 2 +- lua/rr.example.lua | 9 +++++++-- lua_modules/rerun_lua/Cargo.toml | 3 ++- lua_modules/rerun_lua/src/lib.rs | 24 ++++++++++++++++++----- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0e4c4e..7aa0f81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1551,6 +1551,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + [[package]] name = "err-derive" version = "0.3.1" @@ -2727,12 +2736,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c3a7a7ff4481ec91b951a733390211a8ace1caba57266ccb5f4d4966704e560" dependencies = [ "bstr 1.6.2", + "erased-serde", "mlua-sys", "mlua_derive", "num-traits", "once_cell", "rustc-hash", "serde", + "serde-value", ] [[package]] @@ -3098,6 +3109,15 @@ dependencies = [ "redox_syscall 0.3.5", ] +[[package]] +name = "ordered-float" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-float" version = "3.9.1" @@ -3799,7 +3819,7 @@ dependencies = [ "macaw", "never", "notify", - "ordered-float", + "ordered-float 3.9.1", "parking_lot", "pathdiff", "re_build_tools", @@ -4459,6 +4479,7 @@ dependencies = [ "image", "mlua", "rerun", + "serde_json", ] [[package]] @@ -4712,6 +4733,16 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float 2.10.0", + "serde", +] + [[package]] name = "serde_bytes" version = "0.11.12" diff --git a/Cargo.toml b/Cargo.toml index 8be6330..cf69f7b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,4 +6,4 @@ members = [ ] [workspace.dependencies] -mlua = { version = "0.9.1", features = ["lua54", "module", "serde"] } \ No newline at end of file +mlua = { version = "0.9.1", features = ["lua54", "module", "serde", "serialize"] } \ No newline at end of file diff --git a/lua/rr.example.lua b/lua/rr.example.lua index 02ff832..9bbcf79 100644 --- a/lua/rr.example.lua +++ b/lua/rr.example.lua @@ -1,5 +1,10 @@ local rr = require("rerun_lua") -local record = rr.recording("example") +--local record = rr.recording("example") +--record:image("54-0.png", "/Users/tbr/Desktop/00054-0.png") -record:image("54-0.png", "/Users/tbr/Desktop/00054-0.png") \ No newline at end of file +function bbox(boundings) + +end + +local json = rr.json("/Users/tbr/Desktop/ms_form.json") diff --git a/lua_modules/rerun_lua/Cargo.toml b/lua_modules/rerun_lua/Cargo.toml index 997bc3b..5832763 100644 --- a/lua_modules/rerun_lua/Cargo.toml +++ b/lua_modules/rerun_lua/Cargo.toml @@ -10,4 +10,5 @@ crate-type = ["cdylib"] [dependencies] image = { version = "0.24.7", features = ["png", "jpeg", "tiff"] } mlua = { workspace = true } -rerun = "0.8.2" \ No newline at end of file +rerun = "0.8.2" +serde_json = "1.0.107" \ No newline at end of file diff --git a/lua_modules/rerun_lua/src/lib.rs b/lua_modules/rerun_lua/src/lib.rs index 995dbf3..e329ad3 100644 --- a/lua_modules/rerun_lua/src/lib.rs +++ b/lua_modules/rerun_lua/src/lib.rs @@ -1,9 +1,20 @@ use std::fmt::format; +use std::fs::File; +use std::io::BufReader; use std::path::PathBuf; use mlua::AnyUserData; use mlua::prelude::*; use rerun::{MsgSender, RecordingStream, RecordingStreamBuilder}; -use rerun::components::Tensor; +use rerun::components::{Rect2D, Tensor, Vec4D}; + +fn json(lua: &Lua, path: String) -> LuaResult { + let file = File::open(path.as_str()) + .map_err(|error| LuaError::RuntimeError(format!("could not open json path: {path}. Error: {error}")))?; + let reader = BufReader::new(file); + let json_value: serde_json::Value = serde_json::from_reader(reader) + .map_err(|error| LuaError::RuntimeError(format!("could not parse json at: {path}. Error: {error}")))?; + lua.to_value(&json_value) +} fn recording(lua: &Lua, name: String) -> LuaResult { let stream = RecordingStreamBuilder::new(name) @@ -12,13 +23,14 @@ fn recording(lua: &Lua, name: String) -> LuaResult { lua.create_any_userdata(stream) } +fn rect_xyxy(lua: &Lua, points: [f32;4]) -> LuaResult { + let rect = Rect2D::XYXY(Vec4D(points).into()); + lua.create_any_userdata(rect) +} + fn register_bindings(lua: &Lua) -> LuaResult<()> { lua.register_userdata_type::(|reg|{ reg.add_method("image", |lua, this, (entity_path, image_path): (String,String)| { - // let image = ImageReader::open(image_path.as_str()) - // .map_err(|error| LuaError::RuntimeError(format!("Could not open image file: {}. Error: {}", image_path, error)))? - // .decode() - // .map_err(|error| LuaError::RuntimeError(format!("Could not read image file: {}. Error: {}", image_path, error)))?; let image_tensor = Tensor::from_image_file(PathBuf::from(image_path.as_str()).as_path()) .map_err(|error| LuaError::RuntimeError(format!("Could not read image file {image_path}. Error: {error}")))?; MsgSender::new(entity_path) @@ -38,5 +50,7 @@ fn rerun_lua(lua: &Lua) -> LuaResult { register_bindings(lua)?; let exports = lua.create_table()?; exports.set("recording", lua.create_function(recording)?)?; + exports.set("json", lua.create_function(json)?)?; + exports.set("rect_xyxy", lua.create_function(rect_xyxy)?)?; Ok(exports) }