From 6212e36fdaca449de71d9191e299c9b66c668994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 23 Oct 2023 12:30:33 +0200 Subject: [PATCH] python: expose new Range scaled() and scaledFromCenter() overloads. --- src/python/magnum/math.range.cpp | 17 +++++++++++++++-- src/python/magnum/test/test_math.py | 4 ++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/python/magnum/math.range.cpp b/src/python/magnum/math.range.cpp index 4ed40b1..c5be3d4 100644 --- a/src/python/magnum/math.range.cpp +++ b/src/python/magnum/math.range.cpp @@ -78,8 +78,8 @@ template void range(py::module_& m, py::class_& c) { .def("center", &T::center, "Range center") .def("translated", &T::translated, "Translated range") .def("padded", &T::padded, "Padded ange") - .def("scaled", &T::scaled, "Scaled range") - .def("scaled_from_center", &T::scaledFromCenter, "Range scaled from the center") + .def("scaled", static_cast(&T::scaled), "Scaled range") + .def("scaled_from_center", static_cast(&T::scaledFromCenter), "Range scaled from the center") .def("contains", static_cast(&T::contains), "Whether given point is contained inside the range") @@ -102,6 +102,12 @@ template void range(py::module_& m, py::class_& c) { }, "Whether two ranges intersect"); } +template void rangeND(py::class_& c) { + c + .def("scaled", static_cast(&T::scaled), "Scaled range") + .def("scaled_from_center", static_cast(&T::scaledFromCenter), "Range scaled from the center"); +} + template void range2D(py::class_& c) { py::implicitly_convertible, std::tuple>, T>(); @@ -355,6 +361,13 @@ void mathRange(py::module_& root, py::module_& m) { range(m, range2Dd); range(m, range3Dd); + rangeND(range2D_); + rangeND(range2Di); + rangeND(range2Dd); + rangeND(range3D_); + rangeND(range3Di); + rangeND(range3Dd); + range2D(range2D_); range2D(range2Di); range2D(range2Dd); diff --git a/src/python/magnum/test/test_math.py b/src/python/magnum/test/test_math.py index c81672f..52bf572 100644 --- a/src/python/magnum/test/test_math.py +++ b/src/python/magnum/test/test_math.py @@ -1267,7 +1267,9 @@ class Range(unittest.TestCase): self.assertEqual(a2.center(), (2, 5)) self.assertEqual(a2.translated((1, 2)), Range2Di((2, 5), (4, 9))) self.assertEqual(a2.scaled((2, 4)), Range2Di((2, 12), (6, 28))) + self.assertEqual(a2.scaled(2), Range2Di((2, 6), (6, 14))) self.assertEqual(a2.scaled_from_center((2, 4)), Range2Di((0, -3), (4, 13))) + self.assertEqual(a2.scaled_from_center(2), Range2Di((0, 1), (4, 9))) # Verify that both integer and float variants work. There isn't # anything else special about the 3D variant to need thorough testing. @@ -1276,7 +1278,9 @@ class Range(unittest.TestCase): self.assertEqual(a3.center(), (1.0, 1.1, 1.65)) self.assertEqual(a3.translated((0.1, 0.2, 0.3)), Range3Dd((1.1, 0.4, 0.6), (1.1, 2.2, 3.3))) self.assertEqual(a3.scaled((2.0, 0.5, 1.0/3.0)), Range3Dd((2.0, 0.1, 0.1), (2.0, 1.0, 1.0))) + self.assertEqual(a3.scaled(2.0), Range3Dd((2.0, 0.4, 0.6), (2.0, 4.0, 6.0))) self.assertEqual(a3.scaled_from_center((2.0, 0.5, 1.0/3.0)), Range3Dd((1.0, 0.65, 1.2), (1.0, 1.55, 2.1))) + self.assertEqual(a3.scaled_from_center(2.0), Range3Dd((1.0, -0.7, -1.05), (1.0, 2.9, 4.35))) def test_functions(self): a = Range2D((1.5, 0.7), (4.5, 5.7))