"""
Too Tall Toby Party Pack 01-10 Light Cap
"""

from build123d import *
from ocp_vscode import *

densa = 7800 / 1e6  # carbon steel density g/mm^3
densb = 2700 / 1e6  # aluminum alloy
densc = 1020 / 1e6  # ABS

with BuildPart() as p:
    with BuildSketch(Plane.YZ.rotated((90, 0, 0))) as s:
        with BuildLine() as l:
            n2 = JernArc((0, 46), (1, 0), 40, -90)
            n3 = Line(n2 @ 1, n2 @ 0)
        make_face()

        with BuildLine() as l2:
            m1 = Line((0, 0), (42, 0))
            m2 = Line((0, 0.01), (42, 0.01))
            m3 = Line(m1 @ 0, m2 @ 0)
            m4 = Line(m1 @ 1, m2 @ 1)
        make_face()
        make_hull()
    extrude(amount=100 / 2)
    revolve(s.sketch, axis=Axis.Y.reverse(), revolution_arc=-90)
    mirror(about=Plane(p.part.faces().sort_by(Axis.X)[-1]))
    mirror(about=Plane.XY)

with BuildPart() as p2:
    add(p.part)
    offset(amount=-8)

with BuildPart() as pzzz:
    add(p2.part)
    split(bisect_by=Plane.XZ.offset(46 - 16), keep=Keep.BOTTOM)
    fillet(pzzz.part.faces().filter_by(Axis.Y).sort_by(Axis.Y)[0].edges(), 12)

with BuildPart() as p3:
    with BuildSketch(Plane.XZ) as s2:
        add(p.part.faces().sort_by(Axis.Y)[-1])
        offset(amount=-8)
    loft([p2.part.faces().sort_by(Axis.Y)[-5], s2.sketch.faces()[0]])

with BuildPart() as ppp0110:
    add(p.part)
    add(pzzz.part, mode=Mode.SUBTRACT)
    add(p3.part, mode=Mode.SUBTRACT)

show(ppp0110)
print(f"\npart mass = {ppp0110.part.volume*densc:0.2f}")
