mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
61 lines
No EOL
2 KiB
Python
61 lines
No EOL
2 KiB
Python
import os
|
|
from copy import copy
|
|
|
|
from build123d import *
|
|
from ocp_vscode import *
|
|
|
|
working_path = os.path.dirname(os.path.abspath(__file__))
|
|
filedir = os.path.join(working_path, "..", "..", "assets", "topology_selection")
|
|
|
|
with BuildPart() as part:
|
|
with BuildSketch(Plane.XZ) as sketch:
|
|
with BuildLine():
|
|
CenterArc((-6, 12), 10, 0, 360)
|
|
Line((-16, 0), (16, 0))
|
|
make_hull()
|
|
Rectangle(50, 5, align=(Align.CENTER, Align.MAX))
|
|
|
|
extrude(amount=12)
|
|
|
|
Box(38, 6, 22, align=(Align.CENTER, Align.MAX, Align.MIN), mode=Mode.SUBTRACT)
|
|
|
|
circle = part.edges().filter_by(GeomType.CIRCLE).sort_by(Axis.Y)[0]
|
|
with Locations(Plane(circle.arc_center, z_dir=circle.normal())):
|
|
CounterBoreHole(13 / 2, 16 / 2, 4)
|
|
|
|
mirror(about=Plane.XZ)
|
|
|
|
before_fillet = copy(part)
|
|
|
|
length_groups = part.edges().group_by(Edge.length)
|
|
fillet(length_groups.group(6) + length_groups.group(5), 4)
|
|
|
|
after_fillet = copy(part)
|
|
|
|
with BuildSketch() as pins:
|
|
with Locations((-21, 0)):
|
|
Circle(3 / 2)
|
|
with Locations((21, 0)):
|
|
SlotCenterToCenter(1, 3)
|
|
extrude(amount=-12, mode=Mode.SUBTRACT)
|
|
|
|
with GridLocations(42, 16, 2, 2):
|
|
CounterBoreHole(3.5 / 2, 3.5, 0)
|
|
|
|
after_holes = copy(part)
|
|
|
|
radius_groups = part.edges().filter_by(GeomType.CIRCLE).group_by(Edge.radius)
|
|
bearing_edges = radius_groups.group(8).group_by(SortBy.DISTANCE)[-1]
|
|
pin_edges = radius_groups.group(1.5).filter_by_position(Axis.Z, -5, -5)
|
|
chamfer([pin_edges, bearing_edges], .5)
|
|
|
|
location = Location((-20, -20))
|
|
items = [before_fillet.part] + length_groups.group(6) + length_groups.group(5)
|
|
before = Compound(items).move(location)
|
|
show(before, after_fillet.part.move(Location((20, 20))))
|
|
save_screenshot(os.path.join(filedir, "group_length_key.png"))
|
|
|
|
location = Location((-20, -20), (180, 0, 0))
|
|
after = Compound([after_holes.part] + pin_edges + bearing_edges).move(location)
|
|
show(after, part.part.move(Location((20, 20), (180, 0, 0))))
|
|
save_screenshot(os.path.join(filedir, "group_radius_key.png")) |