build123d/examples/extrude_algebra.py

82 lines
2.6 KiB
Python

from build123d import *
# Extrude pending face by amount
simple = extrude(Text("O", font_size=10), amount=5)
# Extrude pending face in both directions by amount
both = extrude(Text("O", font_size=10), amount=5, both=True)
# Extrude multiple pending faces on multiple faces
multiple = Box(10, 10, 10)
faces = [
Plane(face) * loc * Text("Ω", font_size=3)
for face in multiple.faces()
for loc in GridLocations(5, 5, 2, 2)
]
multiple += [extrude(face, amount=1) for face in faces]
# Non-planar surface
non_planar = Rot(90, 0, 0) * Cylinder(
10, 20, align=(Align.CENTER, Align.MIN, Align.CENTER)
)
non_planar &= Box(10, 10, 10, align=(Align.CENTER, Align.CENTER, Align.MIN))
non_planar = extrude(non_planar.faces().sort_by(Axis.Z).first, amount=2)
rad, rev = 3, 25
# Extrude last
circle = Pos(0, rev) * Circle(rad)
ex26_target = revolve(circle, Axis.X, revolution_arc=90)
ex26_target = ex26_target + mirror(ex26_target, Plane.XZ)
rect = Rectangle(rad, rev)
ex26 = extrude(rect, until=Until.LAST, target=ex26_target, clean=False)
# Extrude next
circle = Pos(0, rev) * Circle(rad)
ex27 = revolve(circle, Axis.X, revolution_arc=90)
circle2 = Plane.XZ * Pos(0, rev) * Circle(rad)
ex27 += revolve(circle2, Axis.X, revolution_arc=150)
rect = Plane.XY.offset(-60) * Rectangle(rad, rev + 25)
extrusion27 = extrude(rect, until=Until.NEXT, target=ex27, mode=Mode.ADD)
# Extrude next both
ex28 = Rot(0, 90, 0) * Torus(25, 5)
rect = Rectangle(rad, rev)
extrusion28 = extrude(rect, until=Until.NEXT, target=ex28, both=True, clean=False)
if "show_object" in locals():
show_object(simple.translate((-15, 0, 0)), name="simple pending extrude")
show_object(both.translate((20, 10, 0)), name="simple both")
show_object(multiple.translate((0, -20, 0)), name="multiple pending extrude")
show_object(non_planar.translate((20, -10, 0)), name="non planar")
show_object(
ex26_target.translate((-40, 0, 0)),
name="extrude until last target",
options={"alpha": 0.8},
)
show_object(
ex26.translate((-40, 0, 0)),
name="extrude until last",
)
show_object(
ex27.rotate(Axis.Z, 90).translate((0, 50, 0)),
name="extrude until next target",
options={"alpha": 0.8},
)
show_object(
extrusion27.rotate(Axis.Z, 90).translate((0, 50, 0)),
name="extrude until next",
)
show_object(
ex28.rotate(Axis.Z, -90).translate((0, -50, 0)),
name="extrude until next both target",
options={"alpha": 0.8},
)
show_object(
extrusion28.rotate(Axis.Z, -90).translate((0, -50, 0)),
name="extrude until next both",
)