mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
feat: optional center argument for to_align_offset
This commit is contained in:
parent
cf11f91f2d
commit
54bc6a4681
3 changed files with 18 additions and 6 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue