Files
cover-theif/cad/build.py
T

158 lines
6.4 KiB
Python

# pyright: reportUnusedCallResult=false, reportWildcardImportFromLibrary=false
from math import radians, sin
from build123d import *
def build_drive_shaft_mount():
bearing_offset = 20
bearing_diameter = 22
bearing_through_hole_diameter = 15
bearing_height = 7
shaft_clearance_diameter = 25
core_width = 40
thickness = 20
screw_blocks_width = thickness
screw_blocks_height = bearing_offset
screw_blocks_radius = 3
screw_head_diameter = 8.5
screw_head_depth = 5
screw_body_diameter = 5
track_width = 6.2
track_height = 1.7
assert (bearing_offset - bearing_diameter / 2) > 0
assert (core_width - bearing_diameter) > 0
assert (screw_blocks_width - (screw_blocks_radius * 2)) >= 0
assert (bearing_offset - screw_blocks_height) >= 0
with BuildPart() as drive_shaft_mount:
with BuildSketch():
with BuildLine() as profile:
l1 = Line(
(0,0),
((core_width / 2) + screw_blocks_width, 0)
)
polyline_path = (
l1 @ 1,
((l1 @ 1).X, screw_blocks_height),
(core_width / 2, screw_blocks_height),
)
match (float)(bearing_offset - screw_blocks_height):
case 0:
FilletPolyline(
*polyline_path,
radius=screw_blocks_radius
)
case len if len > 0 and len < screw_blocks_radius:
sbl = FilletPolyline(
*polyline_path,
radius=screw_blocks_radius
)
Line(
sbl @ 1,
((sbl @ 1).X, bearing_offset)
)
case len if len >= screw_blocks_radius:
FilletPolyline(
*polyline_path,
(core_width / 2, bearing_offset),
radius=screw_blocks_radius
)
case _: assert False
CenterArc((0, bearing_offset), core_width / 2, 90, -90)
mirror(profile.line, Plane.YZ)
make_face()
with Locations((0, bearing_offset)):
Circle(bearing_through_hole_diameter / 2, mode=Mode.SUBTRACT)
extrude(amount=thickness / 2)
mirror(about=Plane.XY)
with Locations((0, bearing_offset, drive_shaft_mount.faces().sort_by(Axis.Z)[-1].center().Z)):
Hole(shaft_clearance_diameter / 2, (thickness / 2) - (bearing_height / 2))
Hole(bearing_diameter / 2, (thickness / 2) + (bearing_height / 2))
# this is a seem channel
with BuildSketch(Location((0, bearing_offset + bearing_diameter / 2, drive_shaft_mount.faces().sort_by(Axis.Z)[-1].center().Z))):
Triangle(A=90, b=1, c=1)
extrude(amount=-((thickness / 2) + (bearing_height / 2)), mode=Mode.SUBTRACT)
with BuildPart() as track:
angle = 30
Box(core_width + (screw_blocks_width * 2), track_width + ((sin(radians(angle))/sin(radians(90-angle))) * track_height * 2), track_height, (90, 0, 0), (Align.CENTER, Align.CENTER, Align.MIN))
chamfer(track.edges().filter_by(Axis.X).sort_by(Axis.Y)[:2], track_height - 0.01, angle=angle)
with Locations(drive_shaft_mount.faces().filter_by(Plane.XZ).sort_by(Axis.Y)[-2:]):
CounterBoreHole(screw_body_diameter / 2, screw_head_diameter / 2, screw_head_depth)
return drive_shaft_mount
def build_drive_shaft_bar_adapter():
ext_size = 20.3
ext_track_width = 6.2
ext_track_height = 1.8
height = 60
thickness = 10
ext_screw_hole_diam = 6
ext_screw_hole_head_diam = 10.5
ext_screw_hole_head_depth = 1
ext_screw_hole_offset = 10
shaft_hub_bore_diam = 8
shaft_hub_center_diam = 14
shaft_hub_center_depth = 3
# if you where to draw a square around the center of the shaft hub this var is the length of the sides and each corner is the center of a screw hole
shaft_hub_screw_spacing = 16
shaft_hub_screw_diam = 4
# the depth of the screw holes into the shaft hub
shaft_hub_screw_depth = 8
shaft_hub_screw_head_depth = 4
shaft_hub_screw_head_diam = 7
with BuildPart() as drive_shaft_bar_adapter:
Cylinder((ext_size / 2) + thickness, height, align=(Align.CENTER, Align.CENTER, Align.MIN))
# hollow the box
with BuildSketch(Plane((0, 0, thickness))):
Rectangle(ext_size, ext_size)
with PolarLocations(ext_size / 2, 4):
Rectangle(ext_track_height, ext_track_width, align=(Align.MAX, Align.CENTER), mode=Mode.SUBTRACT)
extrude(amount=height - thickness, mode=Mode.SUBTRACT)
# extrusion screw holes
screws_origin = Location((0, 0, height - ext_screw_hole_offset))
with Locations(screws_origin):
with BuildPart(screws_origin, mode=Mode.SUBTRACT) as ext_track_cut_out:
Box(ext_size, ext_size, ext_screw_hole_diam + 8)
chamfer(ext_track_cut_out.edges(), 3)
with PolarLocations((ext_size / 2) + thickness, 4):
with Locations(Rotation(0, 90, 0)):
CounterBoreHole(ext_screw_hole_diam / 2, ext_screw_hole_head_diam / 2, ext_screw_hole_head_depth)
# shaft interface
with Locations(drive_shaft_bar_adapter.faces().filter_by(Plane.XY).sort_by(Axis.Z)[1].offset(shaft_hub_screw_head_depth)):
l = shaft_hub_screw_spacing / 2
with Locations((-l, -l), (-l, l), (l, -l), (l, l)):
CounterBoreHole(shaft_hub_screw_diam / 2, shaft_hub_screw_head_diam / 2, shaft_hub_screw_head_depth, thickness + shaft_hub_screw_depth)
with Locations(drive_shaft_bar_adapter.faces().sort_by(Axis.Z)[0].center()):
Hole((shaft_hub_bore_diam + 0.5) / 2)
Hole(shaft_hub_center_diam / 2, shaft_hub_center_depth)
return drive_shaft_bar_adapter
drive_shaft_mount = build_drive_shaft_mount()
assert drive_shaft_mount.part is not None
export_step(drive_shaft_mount.part, "drive shaft mount.step")
drive_shaft_bar_adapter = build_drive_shaft_bar_adapter()
assert drive_shaft_bar_adapter.part is not None
export_step(drive_shaft_bar_adapter.part, "drive shaft bar adapter.step")