mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-05 18:20:46 -08:00
Improving split to explicitly handle all Keep Enum values
This commit is contained in:
parent
6605b676a3
commit
3871345dcd
3 changed files with 16 additions and 7 deletions
|
|
@ -963,9 +963,9 @@ def split(
|
|||
for obj in object_list:
|
||||
bottom = None
|
||||
if keep == Keep.BOTH:
|
||||
top, bottom = obj.split(bisect_by, keep) # type: ignore[arg-type]
|
||||
top, bottom = obj.split(bisect_by, keep)
|
||||
else:
|
||||
top = obj.split(bisect_by, keep) # type: ignore[arg-type]
|
||||
top = obj.split(bisect_by, keep)
|
||||
for subpart in [top, bottom]:
|
||||
if isinstance(subpart, Iterable):
|
||||
new_objects.extend(subpart)
|
||||
|
|
|
|||
|
|
@ -1805,6 +1805,12 @@ class Shape(NodeMixin, Generic[TOPODS]):
|
|||
]:
|
||||
"""split and keep inside and outside"""
|
||||
|
||||
@overload
|
||||
def split(
|
||||
self, tool: TrimmingTool, keep: Literal[Keep.INSIDE, Keep.OUTSIDE]
|
||||
) -> None:
|
||||
"""invalid split"""
|
||||
|
||||
@overload
|
||||
def split(self, tool: TrimmingTool) -> Self | list[Self] | None:
|
||||
"""split and keep inside (default)"""
|
||||
|
|
@ -1834,6 +1840,9 @@ class Shape(NodeMixin, Generic[TOPODS]):
|
|||
if self._wrapped is None or not tool:
|
||||
raise ValueError("Can't split an empty edge/wire/tool")
|
||||
|
||||
if keep in [Keep.INSIDE, Keep.OUTSIDE]:
|
||||
raise ValueError(f"{keep} is invalid")
|
||||
|
||||
shape_list = TopTools_ListOfShape()
|
||||
shape_list.Append(self.wrapped)
|
||||
|
||||
|
|
@ -1924,7 +1933,6 @@ class Shape(NodeMixin, Generic[TOPODS]):
|
|||
return top
|
||||
if keep == Keep.BOTTOM:
|
||||
return bottom
|
||||
return None
|
||||
|
||||
@overload
|
||||
def split_by_perimeter(
|
||||
|
|
|
|||
|
|
@ -172,10 +172,11 @@ class TestShape(unittest.TestCase):
|
|||
self.assertEqual(len(top), 2)
|
||||
self.assertAlmostEqual(top[0].length, 3, 5)
|
||||
|
||||
def test_split_return_none(self):
|
||||
shape = Box(1, 1, 1) - Pos((0, 0, -0.25)) * Box(1, 0.5, 0.5)
|
||||
split_shape = shape.split(Plane.XY, keep=Keep.INSIDE)
|
||||
self.assertIsNone(split_shape)
|
||||
def test_split_invalid_keep(self):
|
||||
with self.assertRaises(ValueError):
|
||||
Box(1, 1, 1).split(Plane.XY, keep=Keep.INSIDE)
|
||||
with self.assertRaises(ValueError):
|
||||
Box(1, 1, 1).split(Plane.XY, keep=Keep.OUTSIDE)
|
||||
|
||||
def test_split_by_perimeter(self):
|
||||
# Test 0 - extract a spherical cap
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue