mill_endstop_lever.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import cadquery as cq
  2. from cadquery.occ_impl.exporters import *
  3. from ocp_vscode import show
  4. hole_diam = 5
  5. hole_dist = 24.5
  6. bar_width = 8
  7. bar_thickness = 2.75
  8. height_padding = 2
  9. lever_length = 32
  10. lever_max_thickness = 8
  11. bar_height = hole_dist + hole_diam + 2*height_padding
  12. clip = (
  13. cq.Workplane("XY") # Start in the XY plane
  14. .box(bar_width, bar_height,bar_thickness)
  15. .edges("|Z and >Y or |Z and >X")
  16. .fillet(2)
  17. .faces(">Z")
  18. .workplane()
  19. .rect(0,hole_dist,forConstruction=True)
  20. .vertices(">X")
  21. .circle(hole_diam/2)
  22. .cutThruAll()
  23. )
  24. upper_lever = cq.Sketch().trapezoid(bar_thickness, lever_length,100, angle=90).vertices("<X").fillet(1)
  25. upper_thick_lever = upper_lever.moved(z=-bar_thickness/2)
  26. bottom = cq.Sketch().trapezoid(bar_thickness, lever_length/4,100, angle=90).vertices("<X").fillet(1).moved(x = 3*lever_length/8, z=(height_padding+hole_diam))
  27. # extr_trapezoid = cq.Workplane().placeSketch(upper_lever, lower_lever).loft()
  28. lever = (
  29. clip.faces("<Y")
  30. .workplane(
  31. offset=-(height_padding+hole_diam),
  32. origin=(-(lever_length/2 + bar_width/2), 0, 0)
  33. )
  34. .placeSketch(upper_lever, bottom).loft()
  35. )
  36. lever_thick = (
  37. clip.faces("<Y")
  38. .workplane(
  39. offset=-(height_padding+hole_diam),
  40. origin=(-(lever_length/2 + bar_width/2), 0, 0)
  41. )
  42. .placeSketch(upper_lever, upper_thick_lever).loft()
  43. )
  44. result = clip.union(lever).union(lever_thick)
  45. show(result)
  46. # export the box as a STEP file
  47. with open("/home/sgruen/Dokumente/cadquery/mill-endstop-lever.step", "w") as fp:
  48. cq.exporters.exportShape(result, ExportTypes.STEP, fp)