feat: optional center argument for to_align_offset

This commit is contained in:
Ethan Rooke 2024-11-12 21:43:41 -06:00
parent cf11f91f2d
commit 54bc6a4681
No known key found for this signature in database
GPG key ID: B2874A77049A5923
3 changed files with 18 additions and 6 deletions

View file

@ -2530,15 +2530,27 @@ def to_align_offset(
min_point: Sequence[float],
max_point: Sequence[float],
align: Sequence[Align],
center: Optional[Sequence[float]] = None,
) -> Vector:
"""Amount to move object to achieve the desired alignment"""
align_offset = []
for alignment, min_coord, max_coord in zip(align, min_point, max_point):
if center is None:
center = [
(min_coord + max_coord) / 2
for min_coord, max_coord in zip(min_point, max_point)
]
for alignment, min_coord, max_coord, center_coord in zip(
align,
min_point,
max_point,
center,
):
if alignment == Align.MIN:
align_offset.append(-min_coord)
elif alignment == Align.CENTER:
align_offset.append(-(min_coord + max_coord) / 2)
align_offset.append(-center_coord)
elif alignment == Align.MAX:
align_offset.append(-max_coord)
elif alignment == Align.NONE:

View file

@ -311,7 +311,7 @@ class RegularPolygon(BaseSketchObject):
side_count: int,
major_radius: bool = True,
rotation: float = 0,
align: tuple[Align, Align] = (Align.NONE, Align.NONE),
align: tuple[Align, Align] = (Align.CENTER, Align.CENTER),
mode: Mode = Mode.ADD,
):
# pylint: disable=too-many-locals
@ -353,7 +353,7 @@ class RegularPolygon(BaseSketchObject):
if align is not None:
align = tuplify(align, 2)
align_offset = to_align_offset(mins, maxs, align)
align_offset = to_align_offset(mins, maxs, align, center=(0, 0))
else:
align_offset = Vector(0, 0)
pts = [point + align_offset for point in pts]

View file

@ -258,7 +258,7 @@ class TestBuildSketchObjects(unittest.TestCase):
self.assertEqual(r.radius, 2)
self.assertEqual(r.side_count, 6)
self.assertEqual(r.rotation, 0)
self.assertEqual(r.align, (Align.NONE, Align.NONE))
self.assertEqual(r.align, (Align.CENTER, Align.CENTER))
self.assertEqual(r.mode, Mode.ADD)
self.assertAlmostEqual(test.sketch.area, (3 * sqrt(3) / 2) * 2**2, 5)
self.assertTupleAlmostEquals(
@ -272,7 +272,7 @@ class TestBuildSketchObjects(unittest.TestCase):
self.assertAlmostEqual(r.radius, 1, 5)
self.assertEqual(r.side_count, 3)
self.assertEqual(r.rotation, 0)
self.assertEqual(r.align, (Align.NONE, Align.NONE))
self.assertEqual(r.align, (Align.CENTER, Align.CENTER))
self.assertEqual(r.mode, Mode.ADD)
self.assertAlmostEqual(test.sketch.area, (3 * sqrt(3) / 4) * (0.5 * 2) ** 2, 5)
self.assertTupleAlmostEquals(