From 990f0863e8e36be07baa785ee77aea01e2e9f3da Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 16 Aug 2025 17:38:20 +1000 Subject: [PATCH] PyDoc: include buffer access in examples, cleanup Note that buffer access is possible, also minor mathutils test cleanup. --- doc/python_api/examples/mathutils.Color.py | 3 +++ doc/python_api/examples/mathutils.Euler.py | 3 +++ doc/python_api/examples/mathutils.Matrix.py | 3 +++ doc/python_api/examples/mathutils.Quaternion.py | 3 +++ doc/python_api/examples/mathutils.Vector.py | 3 +++ tests/python/bl_pyapi_mathutils.py | 13 +++++++------ 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/doc/python_api/examples/mathutils.Color.py b/doc/python_api/examples/mathutils.Color.py index 26776ab7e3f..67bd151d89c 100644 --- a/doc/python_api/examples/mathutils.Color.py +++ b/doc/python_api/examples/mathutils.Color.py @@ -28,3 +28,6 @@ print("Color: {:d}, {:d}, {:d}".format(*(int(c) for c in (col * 255.0)))) # This example prints the color as hexadecimal. print("Hexadecimal: {:02x}{:02x}{:02x}".format(int(col.r * 255), int(col.g * 255), int(col.b * 255))) + +# Direct buffer access is supported. +print(memoryview(col).tobytes()) diff --git a/doc/python_api/examples/mathutils.Euler.py b/doc/python_api/examples/mathutils.Euler.py index 56ec2c03660..ab60da249d0 100644 --- a/doc/python_api/examples/mathutils.Euler.py +++ b/doc/python_api/examples/mathutils.Euler.py @@ -30,3 +30,6 @@ vec.rotate(eul) mat_rot = eul.to_matrix() mat_loc = mathutils.Matrix.Translation((2.0, 3.0, 4.0)) mat = mat_loc @ mat_rot.to_4x4() + +# Direct buffer access is supported. +print(memoryview(eul).tobytes()) diff --git a/doc/python_api/examples/mathutils.Matrix.py b/doc/python_api/examples/mathutils.Matrix.py index 5aa19f93217..7894e3b85b2 100644 --- a/doc/python_api/examples/mathutils.Matrix.py +++ b/doc/python_api/examples/mathutils.Matrix.py @@ -30,3 +30,6 @@ mat[0][0:3] = 0.0, 1.0, 2.0 # Each item in a matrix is a vector so vector utility functions can be used. mat[0].xyz = 0.0, 1.0, 2.0 + +# Direct buffer access is supported. +print(memoryview(mat).tobytes()) diff --git a/doc/python_api/examples/mathutils.Quaternion.py b/doc/python_api/examples/mathutils.Quaternion.py index 131f1aa78c1..406128eb6a1 100644 --- a/doc/python_api/examples/mathutils.Quaternion.py +++ b/doc/python_api/examples/mathutils.Quaternion.py @@ -29,3 +29,6 @@ exp_avg = (quat_a.to_exponential_map() + quat_avg = mathutils.Quaternion(exp_avg) print("Average rotation:") print(quat_avg) + +# Direct buffer access is supported. +print(memoryview(quat_avg).tobytes()) diff --git a/doc/python_api/examples/mathutils.Vector.py b/doc/python_api/examples/mathutils.Vector.py index 11dbc1f33f4..a2af1c11ce4 100644 --- a/doc/python_api/examples/mathutils.Vector.py +++ b/doc/python_api/examples/mathutils.Vector.py @@ -53,3 +53,6 @@ vec.xyz = vec.zyx vec.xy = vec4d.zw vec.xyz = vec4d.wzz vec4d.wxyz = vec.yxyx + +# Direct buffer access is supported. +raw_data = memoryview(vec).tobytes() diff --git a/tests/python/bl_pyapi_mathutils.py b/tests/python/bl_pyapi_mathutils.py index f3f3a269d09..9368241c658 100644 --- a/tests/python/bl_pyapi_mathutils.py +++ b/tests/python/bl_pyapi_mathutils.py @@ -64,12 +64,18 @@ def _test_flat_buffer_protocol(self, ty, n): vec = ty(expected) vec.freeze() + view = memoryview(vec) with self.assertRaises(TypeError): - view = memoryview(vec) view[0] = 1 class MatrixTesting(unittest.TestCase): + + def assertAlmostEqualMatrix(self, first, second, size, *, places=6, msg=None, delta=None): + for i in range(size): + for j in range(size): + self.assertAlmostEqual(first[i][j], second[i][j], places=places, msg=msg, delta=delta) + def test_matrix_column_access(self): # mat = # [ 1 2 3 4 ] @@ -302,11 +308,6 @@ class MatrixTesting(unittest.TestCase): self.assertEqual(view.format, "f") self.assertEqual(view.tolist(), expected) - def assertAlmostEqualMatrix(self, first, second, size, *, places=6, msg=None, delta=None): - for i in range(size): - for j in range(size): - self.assertAlmostEqual(first[i][j], second[i][j], places=places, msg=msg, delta=delta) - class VectorTesting(unittest.TestCase):