mirror of
https://github.com/gumyr/build123d.git
synced 2025-12-06 02:30:55 -08:00
55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
from build123d import *
|
|
from bd_warehouse.thread import IsoThread
|
|
from ocp_vscode import *
|
|
|
|
# Create the thread so the min radius is available below
|
|
thread = IsoThread(
|
|
major_diameter=8, pitch=1.25, length=20, end_finishes=("fade", "raw")
|
|
)
|
|
inner_radius = 15.89 / 2
|
|
inner_gap = 0.2
|
|
|
|
with BuildPart() as rod_end:
|
|
# Create the outer shape
|
|
with BuildSketch():
|
|
Circle(22.25 / 2)
|
|
with Locations((0, -12)):
|
|
Rectangle(8, 1)
|
|
make_hull()
|
|
split(bisect_by=Plane.YZ)
|
|
revolve(axis=Axis.Y)
|
|
# Refine the shape
|
|
with BuildSketch(Plane.YZ) as s2:
|
|
Rectangle(25, 8, align=(Align.MIN, Align.CENTER))
|
|
Rectangle(9, 10, align=(Align.MIN, Align.CENTER))
|
|
chamfer(s2.vertices(), 0.5)
|
|
revolve(axis=Axis.Z, mode=Mode.INTERSECT)
|
|
# Add the screw shaft
|
|
Cylinder(
|
|
thread.min_radius,
|
|
30,
|
|
rotation=(90, 0, 0),
|
|
align=(Align.CENTER, Align.CENTER, Align.MIN),
|
|
)
|
|
# Cutout the ball socket
|
|
Sphere(inner_radius, mode=Mode.SUBTRACT)
|
|
# Add thread
|
|
with Locations((0, -30, 0)):
|
|
add(thread, rotation=(-90, 0, 0))
|
|
# Create the ball joint
|
|
BallJoint(
|
|
"socket",
|
|
joint_location=Location(),
|
|
angular_range=((-14, 14), (-14, 14), (0, 360)),
|
|
)
|
|
|
|
with BuildPart() as ball:
|
|
Sphere(inner_radius - inner_gap)
|
|
Box(50, 50, 13, mode=Mode.INTERSECT)
|
|
Hole(4)
|
|
ball.part.color = Color("aliceblue")
|
|
RigidJoint("ball", joint_location=Location())
|
|
|
|
rod_end.part.joints["socket"].connect_to(ball.part.joints["ball"], angles=(5, 10, 0))
|
|
|
|
show(rod_end.part, ball.part)
|