mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
from build123d import *
|
|
|
|
|
|
class Shamrock(BaseSketchObject):
|
|
"""Sketch Object: Shamrock
|
|
|
|
Adds a four leaf clover
|
|
|
|
Args:
|
|
height (float): y axis dimension
|
|
rotation (float, optional): angle in degrees. Defaults to 0.
|
|
align (tuple[Align, Align], optional): alignment. Defaults to (Align.CENTER, Align.CENTER).
|
|
mode (Mode, optional): combination mode. Defaults to Mode.ADD.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
height: float,
|
|
rotation: float = 0,
|
|
align: tuple[Align, Align] = (Align.CENTER, Align.CENTER),
|
|
mode: Mode = Mode.ADD,
|
|
):
|
|
with BuildSketch() as shamrock:
|
|
with BuildLine():
|
|
b0 = Bezier((240, 310), (112, 325), (162, 438), (252, 470))
|
|
b1 = Bezier(b0 @ 1, (136, 431), (73, 589), (179, 643))
|
|
b2 = Bezier(b1 @ 1, (151, 747), (293, 770), (360, 679))
|
|
b3 = Bezier(b2 @ 1, (358, 736), (366, 789), (392, 840))
|
|
l0 = Line(b3 @ 1, (407, 834))
|
|
b4 = Bezier(l0 @ 1, (366, 781), (374, 670), (374, 670))
|
|
b5 = Bezier(b4 @ 1, (373, 794), (506, 789), (528, 727))
|
|
b6 = Bezier(b5 @ 1, (636, 733), (638, 578), (507, 541))
|
|
b7 = Bezier(b6 @ 1, (628, 559), (651, 380), (575, 365))
|
|
b8 = Bezier(b7 @ 1, (592, 269), (420, 268), (417, 361))
|
|
b9 = Bezier(b8 @ 1, (410, 253), (262, 222), b0 @ 0)
|
|
Mirror(about=Plane.XZ, mode=Mode.REPLACE)
|
|
MakeFace()
|
|
Scale(by=height / shamrock.sketch.bounding_box().size.Y)
|
|
super().__init__(
|
|
obj=shamrock.sketch.translate(
|
|
-shamrock.sketch.center(CenterOf.BOUNDING_BOX)
|
|
),
|
|
rotation=rotation,
|
|
align=align,
|
|
mode=mode,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__" or "show_object" in locals():
|
|
shamrock = Shamrock(10)
|
|
|
|
if "show_object" in locals():
|
|
show_object(shamrock)
|