use pyo3::prelude::*;
use std::{rc::Rc, sync::Arc};
use oxmpl::base::state::SE2State as OxmplSE2State;
use crate::base::{PyRealVectorState, PySO2State};
#[pyclass(name = "SE2State", unsendable)]
#[derive(Clone)]
pub struct PySE2State(pub Rc<OxmplSE2State>);
#[pymethods]
impl PySE2State {
#[new]
fn new(x: f64, y: f64, yaw: f64) -> Self {
let state = OxmplSE2State::new(x, y, yaw);
Self(Rc::new(state))
}
#[getter]
fn get_x(&self) -> f64 {
self.0.get_x()
}
#[getter]
fn get_y(&self) -> f64 {
self.0.get_y()
}
#[getter]
fn get_yaw(&self) -> f64 {
self.0.get_yaw()
}
#[getter]
fn get_translation(&self) -> PyRealVectorState {
PyRealVectorState(Arc::new(self.0.get_translation().clone()))
}
#[getter]
fn get_rotation(&self) -> PySO2State {
PySO2State(Arc::new(self.0.get_rotation().clone()))
}
fn __repr__(&self) -> String {
format!(
"<SE2State with x: {}, y: {}, yaw: {}>",
self.0.get_x(),
self.0.get_y(),
self.0.get_yaw()
)
}
}