From 6e07d9edfa337399e2893c368bda69834c69d1d1 Mon Sep 17 00:00:00 2001 From: shenjack <3695888@qq.com> Date: Tue, 28 Mar 2023 17:27:58 +0800 Subject: [PATCH] get pymath back --- libs/pyglet_rs/src/src/pymath.rs | 77 ++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 libs/pyglet_rs/src/src/pymath.rs diff --git a/libs/pyglet_rs/src/src/pymath.rs b/libs/pyglet_rs/src/src/pymath.rs new file mode 100644 index 0000000..507f7f6 --- /dev/null +++ b/libs/pyglet_rs/src/src/pymath.rs @@ -0,0 +1,77 @@ +/* + * ------------------------------- + * Difficult Rocket + * Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com + * All rights reserved + * ------------------------------- + */ + + +pub mod python_class { + use pyo3::prelude::*; + + use crate::math::matrix::{Matrix3, Matrix4}; + use crate::math::vector::{Vector2, Vector3, Vector4}; + + #[pyclass(name = "Vector2")] + pub struct PyVector2 { + pub data: Vector2, + } + + #[pyclass(name = "Vector3")] + pub struct PyVector3 { + pub data: Vector3, + } + + #[pyclass(name = "Vector4")] + pub struct PyVector4 { + pub data: Vector4, + } + + #[pyclass(name = "Matrix3")] + pub struct PyMatrix3 { + pub data: Matrix3, + } + + #[pyclass(name = "Matrix4")] + pub struct PyMatrix4 { + pub data: Matrix4, + } + + #[allow(unused)] + pub trait PyCalc { + fn __add__(&self, other: &Self) -> Self; + fn __sub__(&self, other: &Self) -> Self; + fn __mul__(&self, other: &Self) -> Self; + fn __truediv__(&self, other: &Self) -> Self; + fn __floordiv__(&self, other: &Self) -> Self; + fn __abs__(&self) -> f64; + fn __neg__(&self) -> Self; + fn __round__(&self, ndigits: Option) -> Self; + fn __radd__(&self, other: &PyAny) -> Self; + fn __eq__(&self, other: &Self) -> bool; + fn __ne__(&self, other: &Self) -> bool; + } + + /// 这是一个用来自动给 impl xxx for xxx 的块去掉 trait 部分的宏 + /// 用于在为 pyclass 实现 + + #[pymethods] + impl PyVector2 { + #[new] + fn py_new(x: f64, y: f64) -> Self { + return Self { + data: Vector2::new(x, y), + }; + } + } + + #[pymethods] + impl PyVector2 { + fn __add__(&self, other: &Self) -> Self { + return Self { + data: self.data + other.data, + }; + } + } +}