use pyo3::prelude::*;
use std::sync::Arc;
use oxmpl::base::state::SO3State as OxmplSO3State;
#[pyclass(name = "SO3State", unsendable)]
#[derive(Clone)]
pub struct PySO3State(pub Arc<OxmplSO3State>);
#[pymethods]
impl PySO3State {
#[new]
fn new(x: f64, y: f64, z: f64, w: f64) -> Self {
let state = OxmplSO3State::new(x, y, z, w);
Self(Arc::new(state))
}
#[getter]
fn get_x(&self) -> f64 {
self.0.x
}
#[getter]
fn get_y(&self) -> f64 {
self.0.y
}
#[getter]
fn get_z(&self) -> f64 {
self.0.z
}
#[getter]
fn get_w(&self) -> f64 {
self.0.w
}
#[staticmethod]
fn identity() -> Self {
Self(Arc::new(OxmplSO3State::new(0., 0., 0., 1.)))
}
fn __repr__(&self) -> String {
format!(
"<SO3State x={:?}, y={:?}, z={:?}, w={:?}>",
self.0.x, self.0.y, self.0.z, self.0.w
)
}
}