Skip to main content

oxmpl_js/base/
se2_state.rs

1// Copyright (c) 2025 Junior Sundar
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5use std::sync::Arc;
6
7use oxmpl::base::state::SE2State as OxmplSE2State;
8use wasm_bindgen::prelude::*;
9
10use crate::base::{JsRealVectorState, JsSO2State};
11
12#[wasm_bindgen(js_name = SE2State)]
13pub struct JsSE2State {
14    #[wasm_bindgen(skip)]
15    pub inner: Arc<OxmplSE2State>,
16}
17
18#[wasm_bindgen(js_class = SE2State)]
19impl JsSE2State {
20    #[wasm_bindgen(constructor)]
21    pub fn new(x: f64, y: f64, yaw: f64) -> Self {
22        let state = OxmplSE2State::new(x, y, yaw);
23        Self {
24            inner: Arc::new(state),
25        }
26    }
27
28    #[wasm_bindgen(getter)]
29    pub fn x(&self) -> f64 {
30        self.inner.get_x()
31    }
32    #[wasm_bindgen(getter)]
33    pub fn y(&self) -> f64 {
34        self.inner.get_y()
35    }
36    #[wasm_bindgen(getter)]
37    pub fn yaw(&self) -> f64 {
38        self.inner.get_yaw()
39    }
40    #[wasm_bindgen(getter)]
41    pub fn translation(&self) -> JsRealVectorState {
42        let translation_rs = self.inner.get_translation();
43        JsRealVectorState::new(translation_rs.values.clone())
44    }
45    #[wasm_bindgen(getter)]
46    pub fn rotation(&self) -> JsSO2State {
47        let rotation_rs = self.inner.get_rotation();
48        JsSO2State::new(rotation_rs.value)
49    }
50}