mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 10:41:20 -08:00
82 lines
2.6 KiB
Python
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=Axis.X, revolution_arc=90)
|
|
ex26_target = ex26_target + mirror(ex26_target, about=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=Axis.X, revolution_arc=90)
|
|
|
|
circle2 = Plane.XZ * Pos(0, rev) * Circle(rad)
|
|
ex27 += revolve(circle2, axis=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",
|
|
)
|