use pyo3::prelude::*;
use std::{rc::Rc, sync::Arc};
use oxmpl::base::state::SE3State as OxmplSE3State;
use crate::base::{PyRealVectorState, PySO3State};
#[pyclass(name = "SE3State", unsendable)]
#[derive(Clone)]
pub struct PySE3State(pub Rc<OxmplSE3State>);
#[pymethods]
impl PySE3State {
#[new]
fn new(x: f64, y: f64, z: f64, rotation: PySO3State) -> Self {
let state = OxmplSE3State::new(x, y, z, (*rotation.0).clone());
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_z(&self) -> f64 {
self.0.get_z()
}
#[getter]
fn get_translation(&self) -> PyRealVectorState {
PyRealVectorState(Arc::new(self.0.get_translation().clone()))
}
#[getter]
fn get_rotation(&self) -> PySO3State {
PySO3State(Arc::new(self.0.get_rotation().clone()))
}
fn __repr__(&self) -> String {
format!(
"<SE3State with x: {}, y: {}, z: {}, rotation: {}>",
self.0.get_x(),
self.0.get_y(),
self.0.get_z(),
self.0.get_rotation()
)
}
}