From e0e5d0d36804f8d2fc993c1b5497ec248f34c348 Mon Sep 17 00:00:00 2001 From: snoyer Date: Sat, 15 Feb 2025 19:32:43 +0400 Subject: [PATCH] make `Axis.position` and `Axis.direction` properties --- src/build123d/geometry.py | 25 +++++++++++++++---------- tests/test_direct_api/test_axis.py | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/build123d/geometry.py b/src/build123d/geometry.py index 2f044990..ec331bf4 100644 --- a/src/build123d/geometry.py +++ b/src/build123d/geometry.py @@ -661,16 +661,21 @@ def __init__(self, *args, **kwargs): gp_Dir(*tuple(direction_vector.normalized())), ) - self.position = Vector( - self.wrapped.Location().X(), - self.wrapped.Location().Y(), - self.wrapped.Location().Z(), - ) #: Axis origin - self.direction = Vector( - self.wrapped.Direction().X(), - self.wrapped.Direction().Y(), - self.wrapped.Direction().Z(), - ) #: Axis direction + @property + def position(self): + return Vector(self.wrapped.Location()) + + @position.setter + def position(self, position: VectorLike): + self.wrapped.SetLocation(Vector(position).to_pnt()) + + @property + def direction(self): + return Vector(self.wrapped.Direction()) + + @direction.setter + def direction(self, direction: VectorLike): + self.wrapped.SetDirection(Vector(direction).to_dir()) @property def location(self) -> Location: diff --git a/tests/test_direct_api/test_axis.py b/tests/test_direct_api/test_axis.py index 49144c4c..ed422d6b 100644 --- a/tests/test_direct_api/test_axis.py +++ b/tests/test_direct_api/test_axis.py @@ -230,6 +230,27 @@ def test_axis_not_equal(self): random_obj = object() self.assertNotEqual(Axis.X, random_obj) + def test_position_property(self): + axis = Axis.X + axis.position = 1, 2, 3 + self.assertAlmostEqual(axis.position, (1, 2, 3)) + + axis.position += 1, 2, 3 + self.assertAlmostEqual(axis.position, (2, 4, 6)) + + self.assertAlmostEqual(Axis(axis.wrapped).position, (2, 4, 6)) + + def test_direction_property(self): + axis = Axis.X + axis.direction = 1, 2, 3 + self.assertAlmostEqual(axis.direction, Vector(1, 2, 3).normalized()) + + axis.direction += 5, 3, 1 + expected = (Vector(1, 2, 3).normalized() + Vector(5, 3, 1)).normalized() + self.assertAlmostEqual(axis.direction, expected) + + self.assertAlmostEqual(Axis(axis.wrapped).direction, expected) + if __name__ == "__main__": unittest.main()