diff --git a/src/build123d/geometry.py b/src/build123d/geometry.py index f4f8ee3f..56edfaa4 100644 --- a/src/build123d/geometry.py +++ b/src/build123d/geometry.py @@ -26,6 +26,7 @@ limitations under the License. """ + from __future__ import annotations # pylint has trouble with the OCP imports @@ -1953,6 +1954,10 @@ def __repr__(self): z_dir_str = ", ".join((f"{v:.2f}" for v in self.z_dir.to_tuple())) return f"Plane(o=({origin_str}), x=({x_dir_str}), z=({z_dir_str}))" + def reverse(self) -> Plane: + """Reverse z direction of plane""" + return -self + @property def origin(self) -> Vector: """Get the Plane origin""" diff --git a/tests/test_direct_api.py b/tests/test_direct_api.py index 77999330..e5f9a27b 100644 --- a/tests/test_direct_api.py +++ b/tests/test_direct_api.py @@ -2248,6 +2248,13 @@ def test_plane_neg(self): self.assertVectorAlmostEquals( p2.y_dir, (-p.z_dir).cross(p.x_dir).normalized(), 6 ) + p3 = p.reverse() + self.assertVectorAlmostEquals(p3.origin, p.origin, 6) + self.assertVectorAlmostEquals(p3.x_dir, p.x_dir, 6) + self.assertVectorAlmostEquals(p3.z_dir, -p.z_dir, 6) + self.assertVectorAlmostEquals( + p3.y_dir, (-p.z_dir).cross(p.x_dir).normalized(), 6 + ) def test_plane_mul(self): p = Plane(origin=(1, 2, 3), x_dir=(1, 0, 0), z_dir=(0, 0, 1))