Compare commits
19
Commits
8e2043be72
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd48eb6dd0
|
||
|
|
3713d1583d
|
||
|
|
96756418d9
|
||
|
|
9ebbdfaf90
|
||
|
|
4d5e6a9b7a
|
||
|
|
79590b8dbd
|
||
|
|
282a713d60
|
||
|
|
91a3bcd3c2
|
||
|
|
dd5f505b0c
|
||
|
|
7650230709
|
||
|
|
a1f6951cfc
|
||
|
|
e12eb10909
|
||
|
|
dae718e21e
|
||
|
|
6a2222c55e
|
||
|
|
25fd8e5b70
|
||
|
|
978c563b7c
|
||
|
|
1ede942327
|
||
|
|
2610cf179d
|
||
|
|
b80fdf6386
|
@@ -1,47 +1,172 @@
|
|||||||
# pyright: reportUnusedCallResult=false, reportWildcardImportFromLibrary=false
|
# pyright: reportUnusedCallResult=false, reportWildcardImportFromLibrary=false, reportUnknownMemberType=false
|
||||||
from build123d import *
|
from build123d import *
|
||||||
|
|
||||||
center_thickness = 10
|
def build_mop_scraper_holder(center_thickness: float):
|
||||||
|
mop_diameter = 23.4
|
||||||
|
mop_arc_size = 240
|
||||||
|
|
||||||
mop_diameter = 40
|
scraper_diameter = 20.3
|
||||||
mop_arc_size = 180
|
scraper_arc_size = mop_arc_size
|
||||||
|
|
||||||
scraper_diameter = 40
|
arms_thickness = 3
|
||||||
scraper_arc_size = 180
|
|
||||||
|
|
||||||
arms_thickness = 5
|
clamp_length = 30
|
||||||
|
|
||||||
clamp_length = 50
|
screw_diameter = 4.75
|
||||||
|
screw_head_diameter = 9.6
|
||||||
|
screw_head_depth = 4
|
||||||
|
|
||||||
with BuildPart() as mop_scraper_holder:
|
with BuildPart() as mop_scraper_holder:
|
||||||
with BuildSketch() as profile:
|
with BuildSketch() as profile:
|
||||||
with BuildLine() as connecting_outline:
|
with BuildLine():
|
||||||
arc_s = 170
|
arc_s = 170
|
||||||
mop_arc = CenterArc((0, (mop_diameter + center_thickness) / -2), mop_diameter / 2, 90 - (arc_s / 2), arc_s)
|
mop_arc = CenterArc((0, (mop_diameter + center_thickness) / -2), mop_diameter / 2, 90 - (arc_s / 2), arc_s)
|
||||||
scraper_arc = CenterArc((0, (scraper_diameter + center_thickness) / 2), scraper_diameter / 2, (arc_s / 2) - 90, -arc_s)
|
scraper_arc = CenterArc((0, (scraper_diameter + center_thickness) / 2), scraper_diameter / 2, (arc_s / 2) - 90, -arc_s)
|
||||||
|
|
||||||
Line(mop_arc @ 0, scraper_arc @ 0)
|
Line(mop_arc @ 0, scraper_arc @ 0)
|
||||||
Line(mop_arc @ 1, scraper_arc @ 1)
|
Line(mop_arc @ 1, scraper_arc @ 1)
|
||||||
|
|
||||||
screw_pos = scraper_arc @ 0.5
|
screw_pos = scraper_arc @ 0.5
|
||||||
|
|
||||||
make_face()
|
make_face()
|
||||||
|
|
||||||
mop_arm = CenterArc((0, (mop_diameter + center_thickness) / -2), mop_diameter / 2, 90 - (mop_arc_size / 2), mop_arc_size)
|
mop_arm = CenterArc((0, (mop_diameter + center_thickness) / -2), mop_diameter / 2, 90 - (mop_arc_size / 2), mop_arc_size)
|
||||||
offset(mop_arm, amount=arms_thickness, side=Side.RIGHT)
|
offset(mop_arm, amount=arms_thickness, side=Side.RIGHT)
|
||||||
make_face()
|
make_face()
|
||||||
|
|
||||||
scraper_arm = CenterArc((0, (scraper_diameter + center_thickness) / 2), scraper_diameter / 2, (scraper_arc_size / 2) - 90, -scraper_arc_size)
|
scraper_arm = CenterArc((0, (scraper_diameter + center_thickness) / 2), scraper_diameter / 2, (scraper_arc_size / 2) - 90, -scraper_arc_size)
|
||||||
offset(scraper_arm, amount=arms_thickness, side=Side.LEFT)
|
offset(scraper_arm, amount=arms_thickness, side=Side.LEFT)
|
||||||
make_face()
|
make_face()
|
||||||
|
|
||||||
extrude(profile.sketch, clamp_length / 2)
|
extrude(profile.sketch, clamp_length / 2)
|
||||||
extrude(profile.sketch, -clamp_length / 2)
|
extrude(profile.sketch, -clamp_length / 2)
|
||||||
|
|
||||||
fillet(mop_scraper_holder.edges().filter_by(Axis.Z), 2)
|
fillet(mop_scraper_holder.edges().filter_by(Axis.Z), (arms_thickness - 0.01) / 2)
|
||||||
|
|
||||||
with Locations(Plane((screw_pos.X, screw_pos.Y, 0)).rotated((-90, 0, 0))):
|
with Locations(Plane((screw_pos.X, screw_pos.Y, 0)).rotated((-90, 0, 0))):
|
||||||
CounterBoreHole(3 / 2, 5.6 / 2, 3.2)
|
CounterBoreHole(screw_diameter / 2, screw_head_diameter / 2, screw_head_depth)
|
||||||
|
|
||||||
assert mop_scraper_holder.part is not None
|
return mop_scraper_holder
|
||||||
export_step(mop_scraper_holder.part, "mop_scraper_holder.step")
|
|
||||||
|
def build_mop_handle():
|
||||||
|
mop_diameter = 23.9
|
||||||
|
|
||||||
|
thickness = 5
|
||||||
|
|
||||||
|
hand_curve_length = 70
|
||||||
|
hand_curve_thickness = 5
|
||||||
|
hand_curve_spacing = 50
|
||||||
|
|
||||||
|
hand_cirve_top_space = 10
|
||||||
|
flared_base_space = 30
|
||||||
|
|
||||||
|
flared_base_thickness = hand_curve_thickness
|
||||||
|
flared_base_length = 5
|
||||||
|
|
||||||
|
screw_diameter = 4.75
|
||||||
|
screw_head_diameter = 9.6
|
||||||
|
screw_head_depth = 2
|
||||||
|
|
||||||
|
rounding = 5
|
||||||
|
|
||||||
|
handle_radius = (mop_diameter / 2) + thickness
|
||||||
|
handle_length_total = flared_base_length + flared_base_space + (hand_curve_length * 2) + hand_curve_spacing + hand_cirve_top_space
|
||||||
|
|
||||||
|
with BuildPart() as mop_handle:
|
||||||
|
with BuildSketch(Plane.XZ):
|
||||||
|
with BuildLine() as profile:
|
||||||
|
sl = Line((0, 0), (handle_radius, 0))
|
||||||
|
fb = ThreePointArc(sl @ 1, (handle_radius + flared_base_thickness, (sl @ 1).Y + (flared_base_length / 2)), (handle_radius, (sl @ 1).Y + flared_base_length))
|
||||||
|
hs1 = Line(fb @ 1, (handle_radius, (fb @ 1).Y + flared_base_space))
|
||||||
|
h1 = ThreePointArc(hs1 @ 1, (handle_radius + hand_curve_thickness, (hs1 @ 1).Y + (hand_curve_length / 2)), (handle_radius, (hs1 @ 1).Y + hand_curve_length))
|
||||||
|
hs2 = Line(h1 @ 1, (handle_radius, (h1 @ 1).Y + hand_curve_spacing))
|
||||||
|
h2 = ThreePointArc(hs2 @ 1, (handle_radius + hand_curve_thickness, (hs2 @ 1).Y + (hand_curve_length / 2)), (handle_radius, (hs2 @ 1).Y + hand_curve_length))
|
||||||
|
hs3 = Line(h2 @ 1, (handle_radius, (h2 @ 1).Y + hand_cirve_top_space))
|
||||||
|
el = Line(hs3 @ 1, (0, (hs3 @ 1).Y))
|
||||||
|
Line(el @ 1, sl @ 0)
|
||||||
|
make_face()
|
||||||
|
Rectangle((handle_radius + flared_base_thickness) * 2, 10, align=(Align.CENTER, Align.MAX), mode=Mode.SUBTRACT)
|
||||||
|
revolve()
|
||||||
|
|
||||||
|
fillet(mop_handle.edges().sort_by(Axis.Z)[1:], rounding)
|
||||||
|
|
||||||
|
with Locations(Plane((0, 0, handle_length_total - thickness))):
|
||||||
|
Cylinder(mop_diameter / 2, 99999, align=(Align.CENTER, Align.CENTER, Align.MAX), mode=Mode.SUBTRACT)
|
||||||
|
# this is a seem channel
|
||||||
|
with BuildSketch(Location((0, mop_diameter / 2, handle_length_total - thickness))):
|
||||||
|
Triangle(A=90, b=1, c=1)
|
||||||
|
extrude(amount=-99999, mode=Mode.SUBTRACT)
|
||||||
|
|
||||||
|
with Locations(Plane((0, 0, flared_base_length + flared_base_space + hand_curve_length + (hand_curve_spacing / 2)))):
|
||||||
|
with PolarLocations(handle_radius, 2):
|
||||||
|
with Locations(Rotation(0, 90, 0)):
|
||||||
|
CounterBoreHole(screw_diameter / 2, screw_head_diameter / 2, screw_head_depth)
|
||||||
|
|
||||||
|
with Locations(Plane((0, 0, flared_base_length + (flared_base_space / 2)))):
|
||||||
|
with PolarLocations(handle_radius, 2, 90):
|
||||||
|
with Locations(Rotation(0, 90, 0)):
|
||||||
|
CounterBoreHole(screw_diameter / 2, screw_head_diameter / 2, screw_head_depth)
|
||||||
|
|
||||||
|
return mop_handle
|
||||||
|
|
||||||
|
def build_trash_belt_hook(
|
||||||
|
belt_width: float = 38.2,
|
||||||
|
belt_thickness: float = 6.6,
|
||||||
|
|
||||||
|
clip_thickness: float = 5,
|
||||||
|
|
||||||
|
hook_width: float = 40,
|
||||||
|
hook_side_fillet: float = .9,
|
||||||
|
|
||||||
|
hook_height: float = 9,
|
||||||
|
hook_thickness: float = 13.5,
|
||||||
|
hook_chamfer: float = 10,
|
||||||
|
hook_belt_intersection_fillet: float = .8,
|
||||||
|
|
||||||
|
hook_tip_offset: float = 15,
|
||||||
|
hook_tip_thickness_p: float = 0.2,
|
||||||
|
hook_tip_width_p: float = 0.3,
|
||||||
|
):
|
||||||
|
with BuildPart() as trash_belt_hook:
|
||||||
|
with BuildSketch(Plane.YZ):
|
||||||
|
SlotOverall(belt_width, belt_thickness, 90)
|
||||||
|
offset(amount=clip_thickness)
|
||||||
|
offset(amount=-clip_thickness, mode=Mode.SUBTRACT)
|
||||||
|
extrude(amount=hook_width / 2, both=True)
|
||||||
|
|
||||||
|
hook_pln = Plane(trash_belt_hook.faces().sort_by(Axis.Y)[-1].offset(hook_height)).rotated((-45, 0, 0))
|
||||||
|
with BuildSketch(hook_pln) as hook_s:
|
||||||
|
Rectangle(hook_thickness, hook_width)
|
||||||
|
chamfer(hook_s.vertices().group_by(Axis.X)[0], hook_chamfer)
|
||||||
|
extrude(until=Until.PREVIOUS)
|
||||||
|
|
||||||
|
outside_face = trash_belt_hook.faces().group_by(Axis.Y)[-5]
|
||||||
|
fillet(outside_face.edges().sort_by(Axis.X)[1:-1], hook_belt_intersection_fillet)
|
||||||
|
|
||||||
|
with BuildSketch(hook_pln.offset(hook_tip_offset)) as hook_tip:
|
||||||
|
Rectangle(hook_thickness * hook_tip_thickness_p, hook_width * hook_tip_width_p)
|
||||||
|
chamfer(hook_tip.vertices().group_by(Axis.X)[0], hook_chamfer * hook_tip_thickness_p)
|
||||||
|
loft([hook_s.sketch, hook_tip.sketch])
|
||||||
|
|
||||||
|
fillet(trash_belt_hook.edges().group_by(Axis.X)[0], hook_side_fillet)
|
||||||
|
fillet(trash_belt_hook.edges().group_by(Axis.X)[-1], hook_side_fillet)
|
||||||
|
|
||||||
|
|
||||||
|
return trash_belt_hook
|
||||||
|
|
||||||
|
|
||||||
|
mop_scraper_holder_top = build_mop_scraper_holder(15)
|
||||||
|
assert mop_scraper_holder_top.part is not None
|
||||||
|
export_step(mop_scraper_holder_top.part, "mop_scraper_holder_top.step")
|
||||||
|
|
||||||
|
mop_scraper_holder_bottom = build_mop_scraper_holder(10)
|
||||||
|
assert mop_scraper_holder_bottom.part is not None
|
||||||
|
export_step(mop_scraper_holder_bottom.part, "mop_scraper_holder_bottom.step")
|
||||||
|
|
||||||
|
mop_handle = build_mop_handle()
|
||||||
|
assert mop_handle.part is not None
|
||||||
|
export_step(mop_handle.part, "mop_handle.step")
|
||||||
|
|
||||||
|
trash_belt_hook = build_trash_belt_hook()
|
||||||
|
assert trash_belt_hook.part is not None
|
||||||
|
export_step(trash_belt_hook.part, "trash_belt_hook.step")
|
||||||
|
|||||||
Reference in New Issue
Block a user