Skip to content

Commit f9631a0

Browse files
committed
Add math module.
1 parent fd984e8 commit f9631a0

File tree

24 files changed

+938
-245
lines changed

24 files changed

+938
-245
lines changed

crates/processing_ffi/src/lib.rs

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use bevy::{
2+
math::{Vec2, Vec3, Vec4},
23
prelude::Entity,
34
render::render_resource::{Extent3d, TextureFormat},
45
};
@@ -376,7 +377,12 @@ pub extern "C" fn processing_reset_matrix(graphics_id: u64) {
376377
pub extern "C" fn processing_translate(graphics_id: u64, x: f32, y: f32) {
377378
error::clear_error();
378379
let graphics_entity = Entity::from_bits(graphics_id);
379-
error::check(|| graphics_record_command(graphics_entity, DrawCommand::Translate { x, y }));
380+
error::check(|| {
381+
graphics_record_command(
382+
graphics_entity,
383+
DrawCommand::Translate(bevy::math::Vec2::new(x, y)),
384+
)
385+
});
380386
}
381387

382388
/// Rotate the coordinate system.
@@ -400,7 +406,12 @@ pub extern "C" fn processing_rotate(graphics_id: u64, angle: f32) {
400406
pub extern "C" fn processing_scale(graphics_id: u64, x: f32, y: f32) {
401407
error::clear_error();
402408
let graphics_entity = Entity::from_bits(graphics_id);
403-
error::check(|| graphics_record_command(graphics_entity, DrawCommand::Scale { x, y }));
409+
error::check(|| {
410+
graphics_record_command(
411+
graphics_entity,
412+
DrawCommand::Scale(bevy::math::Vec2::new(x, y)),
413+
)
414+
});
404415
}
405416

406417
/// Shear along the X axis.
@@ -625,21 +636,21 @@ pub extern "C" fn processing_ortho(
625636
pub extern "C" fn processing_transform_set_position(entity_id: u64, x: f32, y: f32, z: f32) {
626637
error::clear_error();
627638
let entity = Entity::from_bits(entity_id);
628-
error::check(|| transform_set_position(entity, x, y, z));
639+
error::check(|| transform_set_position(entity, Vec3::new(x, y, z)));
629640
}
630641

631642
#[unsafe(no_mangle)]
632643
pub extern "C" fn processing_transform_translate(entity_id: u64, x: f32, y: f32, z: f32) {
633644
error::clear_error();
634645
let entity = Entity::from_bits(entity_id);
635-
error::check(|| transform_translate(entity, x, y, z));
646+
error::check(|| transform_translate(entity, Vec3::new(x, y, z)));
636647
}
637648

638649
#[unsafe(no_mangle)]
639650
pub extern "C" fn processing_transform_set_rotation(entity_id: u64, x: f32, y: f32, z: f32) {
640651
error::clear_error();
641652
let entity = Entity::from_bits(entity_id);
642-
error::check(|| transform_set_rotation(entity, x, y, z));
653+
error::check(|| transform_set_rotation(entity, Vec3::new(x, y, z)));
643654
}
644655

645656
#[unsafe(no_mangle)]
@@ -673,21 +684,21 @@ pub extern "C" fn processing_transform_rotate_axis(
673684
) {
674685
error::clear_error();
675686
let entity = Entity::from_bits(entity_id);
676-
error::check(|| transform_rotate_axis(entity, angle, axis_x, axis_y, axis_z));
687+
error::check(|| transform_rotate_axis(entity, angle, Vec3::new(axis_x, axis_y, axis_z)));
677688
}
678689

679690
#[unsafe(no_mangle)]
680691
pub extern "C" fn processing_transform_set_scale(entity_id: u64, x: f32, y: f32, z: f32) {
681692
error::clear_error();
682693
let entity = Entity::from_bits(entity_id);
683-
error::check(|| transform_set_scale(entity, x, y, z));
694+
error::check(|| transform_set_scale(entity, Vec3::new(x, y, z)));
684695
}
685696

686697
#[unsafe(no_mangle)]
687698
pub extern "C" fn processing_transform_scale(entity_id: u64, x: f32, y: f32, z: f32) {
688699
error::clear_error();
689700
let entity = Entity::from_bits(entity_id);
690-
error::check(|| transform_scale(entity, x, y, z));
701+
error::check(|| transform_scale(entity, Vec3::new(x, y, z)));
691702
}
692703

693704
#[unsafe(no_mangle)]
@@ -699,7 +710,7 @@ pub extern "C" fn processing_transform_look_at(
699710
) {
700711
error::clear_error();
701712
let entity = Entity::from_bits(entity_id);
702-
error::check(|| transform_look_at(entity, target_x, target_y, target_z));
713+
error::check(|| transform_look_at(entity, Vec3::new(target_x, target_y, target_z)));
703714
}
704715

705716
#[unsafe(no_mangle)]
@@ -808,14 +819,14 @@ pub extern "C" fn processing_geometry_create(topology: u8) -> u64 {
808819
pub extern "C" fn processing_geometry_normal(geo_id: u64, nx: f32, ny: f32, nz: f32) {
809820
error::clear_error();
810821
let entity = Entity::from_bits(geo_id);
811-
error::check(|| geometry_normal(entity, nx, ny, nz));
822+
error::check(|| geometry_normal(entity, Vec3::new(nx, ny, nz)));
812823
}
813824

814825
#[unsafe(no_mangle)]
815826
pub extern "C" fn processing_geometry_color(geo_id: u64, r: f32, g: f32, b: f32, a: f32) {
816827
error::clear_error();
817828
let entity = Entity::from_bits(geo_id);
818-
error::check(|| geometry_color(entity, r, g, b, a));
829+
error::check(|| geometry_color(entity, Vec4::new(r, g, b, a)));
819830
}
820831

821832
#[unsafe(no_mangle)]
@@ -932,7 +943,7 @@ pub extern "C" fn processing_geometry_attribute_float4(
932943
pub extern "C" fn processing_geometry_vertex(geo_id: u64, x: f32, y: f32, z: f32) {
933944
error::clear_error();
934945
let entity = Entity::from_bits(geo_id);
935-
error::check(|| geometry_vertex(entity, x, y, z));
946+
error::check(|| geometry_vertex(entity, Vec3::new(x, y, z)));
936947
}
937948

938949
#[unsafe(no_mangle)]
@@ -1075,7 +1086,7 @@ pub unsafe extern "C" fn processing_geometry_get_indices(
10751086
pub extern "C" fn processing_geometry_set_vertex(geo_id: u64, index: u32, x: f32, y: f32, z: f32) {
10761087
error::clear_error();
10771088
let entity = Entity::from_bits(geo_id);
1078-
error::check(|| geometry_set_vertex(entity, index, x, y, z));
1089+
error::check(|| geometry_set_vertex(entity, index, Vec3::new(x, y, z)));
10791090
}
10801091

10811092
#[unsafe(no_mangle)]
@@ -1088,7 +1099,7 @@ pub extern "C" fn processing_geometry_set_normal(
10881099
) {
10891100
error::clear_error();
10901101
let entity = Entity::from_bits(geo_id);
1091-
error::check(|| geometry_set_normal(entity, index, nx, ny, nz));
1102+
error::check(|| geometry_set_normal(entity, index, Vec3::new(nx, ny, nz)));
10921103
}
10931104

10941105
#[unsafe(no_mangle)]
@@ -1102,14 +1113,14 @@ pub extern "C" fn processing_geometry_set_color(
11021113
) {
11031114
error::clear_error();
11041115
let entity = Entity::from_bits(geo_id);
1105-
error::check(|| geometry_set_color(entity, index, r, g, b, a));
1116+
error::check(|| geometry_set_color(entity, index, Vec4::new(r, g, b, a)));
11061117
}
11071118

11081119
#[unsafe(no_mangle)]
11091120
pub extern "C" fn processing_geometry_set_uv(geo_id: u64, index: u32, u: f32, v: f32) {
11101121
error::clear_error();
11111122
let entity = Entity::from_bits(geo_id);
1112-
error::check(|| geometry_set_uv(entity, index, u, v));
1123+
error::check(|| geometry_set_uv(entity, index, Vec2::new(u, v)));
11131124
}
11141125

11151126
#[unsafe(no_mangle)]

crates/processing_pyo3/src/gltf.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,3 @@ impl Gltf {
4848
Ok(Light { entity })
4949
}
5050
}
51-

crates/processing_pyo3/src/graphics.rs

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ use bevy::{
55
render::render_resource::TextureFormat,
66
};
77
use processing::prelude::*;
8-
use pyo3::{exceptions::PyRuntimeError, prelude::*, types::PyDict};
8+
use pyo3::{
9+
exceptions::PyRuntimeError,
10+
prelude::*,
11+
types::{PyDict, PyTuple},
12+
};
913

1014
use crate::glfw::GlfwContext;
1115

@@ -39,13 +43,16 @@ pub struct Light {
3943

4044
#[pymethods]
4145
impl Light {
42-
pub fn position(&self, x: f32, y: f32, z: f32) -> PyResult<()> {
43-
transform_set_position(self.entity, x, y, z)
44-
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
46+
#[pyo3(signature = (*args))]
47+
pub fn position(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
48+
let v = crate::math::extract_vec3(args)?;
49+
transform_set_position(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
4550
}
4651

47-
pub fn look_at(&self, x: f32, y: f32, z: f32) -> PyResult<()> {
48-
transform_look_at(self.entity, x, y, z).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
52+
#[pyo3(signature = (*args))]
53+
pub fn look_at(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
54+
let v = crate::math::extract_vec3(args)?;
55+
transform_look_at(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
4956
}
5057
}
5158

@@ -122,26 +129,32 @@ impl Geometry {
122129
Ok(Self { entity: geometry })
123130
}
124131

125-
pub fn color(&self, r: f32, g: f32, b: f32, a: f32) -> PyResult<()> {
126-
geometry_color(self.entity, r, g, b, a).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
132+
#[pyo3(signature = (*args))]
133+
pub fn color(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
134+
let v = crate::math::extract_vec4(args)?;
135+
geometry_color(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
127136
}
128137

129-
pub fn normal(&self, nx: f32, ny: f32, nz: f32) -> PyResult<()> {
130-
geometry_normal(self.entity, nx, ny, nz)
131-
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
138+
#[pyo3(signature = (*args))]
139+
pub fn normal(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
140+
let v = crate::math::extract_vec3(args)?;
141+
geometry_normal(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
132142
}
133143

134-
pub fn vertex(&self, x: f32, y: f32, z: f32) -> PyResult<()> {
135-
geometry_vertex(self.entity, x, y, z).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
144+
#[pyo3(signature = (*args))]
145+
pub fn vertex(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
146+
let v = crate::math::extract_vec3(args)?;
147+
geometry_vertex(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
136148
}
137149

138150
pub fn index(&self, i: u32) -> PyResult<()> {
139151
geometry_index(self.entity, i).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
140152
}
141153

142-
pub fn set_vertex(&self, i: u32, x: f32, y: f32, z: f32) -> PyResult<()> {
143-
geometry_set_vertex(self.entity, i, x, y, z)
144-
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
154+
#[pyo3(signature = (i, *args))]
155+
pub fn set_vertex(&self, i: u32, args: &Bound<'_, PyTuple>) -> PyResult<()> {
156+
let v = crate::math::extract_vec3(args)?;
157+
geometry_set_vertex(self.entity, i, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
145158
}
146159
}
147160

@@ -388,8 +401,10 @@ impl Graphics {
388401
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
389402
}
390403

391-
pub fn translate(&self, x: f32, y: f32) -> PyResult<()> {
392-
graphics_record_command(self.entity, DrawCommand::Translate { x, y })
404+
#[pyo3(signature = (*args))]
405+
pub fn translate(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
406+
let v = crate::math::extract_vec2(args)?;
407+
graphics_record_command(self.entity, DrawCommand::Translate(v))
393408
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
394409
}
395410

@@ -454,8 +469,10 @@ impl Graphics {
454469
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
455470
}
456471

457-
pub fn scale(&self, x: f32, y: f32) -> PyResult<()> {
458-
graphics_record_command(self.entity, DrawCommand::Scale { x, y })
472+
#[pyo3(signature = (*args))]
473+
pub fn scale(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
474+
let v = crate::math::extract_vec2(args)?;
475+
graphics_record_command(self.entity, DrawCommand::Scale(v))
459476
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
460477
}
461478

@@ -494,14 +511,16 @@ impl Graphics {
494511
graphics_mode_2d(self.entity).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
495512
}
496513

497-
pub fn camera_position(&self, x: f32, y: f32, z: f32) -> PyResult<()> {
498-
transform_set_position(self.entity, x, y, z)
499-
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
514+
#[pyo3(signature = (*args))]
515+
pub fn camera_position(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
516+
let v = crate::math::extract_vec3(args)?;
517+
transform_set_position(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
500518
}
501519

502-
pub fn camera_look_at(&self, target_x: f32, target_y: f32, target_z: f32) -> PyResult<()> {
503-
transform_look_at(self.entity, target_x, target_y, target_z)
504-
.map_err(|e| PyRuntimeError::new_err(format!("{e}")))
520+
#[pyo3(signature = (*args))]
521+
pub fn camera_look_at(&self, args: &Bound<'_, PyTuple>) -> PyResult<()> {
522+
let v = crate::math::extract_vec3(args)?;
523+
transform_look_at(self.entity, v).map_err(|e| PyRuntimeError::new_err(format!("{e}")))
505524
}
506525

507526
pub fn perspective(&self, fov: f32, aspect: f32, near: f32, far: f32) -> PyResult<()> {

0 commit comments

Comments
 (0)