| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- import cadquery as cq
- from cadquery.occ_impl.exporters import *
- from ocp_vscode import show, show_object
- ###### Angle param #####
- hole_diam = 5.1
- hole_dist = 50
- bar_width = 20
- two_bar_width = hole_dist + bar_width
- board_length = 64.5
- board_width = 28.7
- board_thick = 0.7
- lid = cq.importers.importStep(r"mill/Pi_housing/lid_smaller_holes.step")
- base = cq.importers.importStep(r"mill/Pi_housing/base_smaller_holes.step")
- slit_width = 3
- slit_offset = 1
- angle_thick = 3
- angle_width = 10
- angle_length = 30
- flap_length = 15
- shift = 5
- ###### BL Touch Holder param #####
- extension_len = 25
- bl_holder_width = 26.2
- bl_holder_depth = 10.5 + angle_thick
- bl_hole_diam = 3.85
- bl_hole_dist = 21.4 - bl_hole_diam
- ###### Cam Holder param #####
- lens_diam = 7.5
- lens_holder_width = 8.5
- lens_holder_thick = 2.9
- cam_dist = 30
- cam_angle = 45
- holder_length = 60
- holder_length_offset = 20
- holder_width = 12
- holder_thick = angle_thick
- edge_length = 10
- case_thick = 2
- case_air = 0.2
- cable_thick = 1
- case_fillet = 8
- holder_x = hole_dist/2-holder_length_offset
- holder_y = -10
- ###### Angle #####
- connector = (
- base.faces(">Z").workplane(origin=(-hole_dist/2,0,shift))
- .box(angle_width, angle_length, angle_thick, (True, False, False), combine=False)
- )
- connector = connector.faces(">Z").workplane().center(0, angle_width/2).circle(slit_width/2).cutThruAll()
- connector_shift = connector.translate((hole_dist+slit_offset,0,0))
- connector_bar = (
- connector.faces(">X")
- .workplane(centerOption="CenterOfBoundBox")
- .center((angle_length-angle_width)/2,0)
- .rect(angle_width, angle_thick, centered=(True, True))
- .extrude(hole_dist)
- )
- connector_wide = (
- connector.union(connector_bar).union(connector_shift)
- .edges("<Y and |Z")
- .fillet(4)
- )
- connector_wide = connector_wide.faces("|Y")[3].edges("|Z").fillet(5)
- actual_flap_length = flap_length + angle_thick
- flap = (
- connector_wide.faces(">Y")
- .workplane(centerOption="CenterOfBoundBox")
- .center(0,-angle_thick/2)
- .rect(hole_dist+angle_width+slit_offset,actual_flap_length, centered=(True,False))
- .extrude(angle_thick, combine=False)
- )
- flap = (
- flap.faces("<Y")
- .workplane()
- .center(hole_dist/2, actual_flap_length - hole_diam)
- .circle(hole_diam/2)
- .center(-hole_dist, 0)
- .circle(hole_diam/2)
- .cutThruAll()
- )
- flap = (
- flap.faces(">X")
- .workplane(centerOption="CenterOfBoundBox")
- .rect(angle_thick, flap_length+angle_thick)
- .extrude(extension_len)
- )
- holder_shift = bl_holder_width - flap_length - angle_thick
- bl_holder = (
- flap.faces(">X")
- .workplane(centerOption="CenterOfBoundBox")
- .center(-angle_thick/2, holder_shift/2)
- .rect(bl_holder_depth, bl_holder_width, centered=(False,True))
- .extrude(angle_thick)
- .faces(">X")
- .workplane(centerOption="CenterOfBoundBox")
- .center(0, -bl_hole_dist/2)
- .circle(bl_hole_diam/2)
- .center(0, bl_hole_dist)
- .circle(bl_hole_diam/2)
- .cutThruAll()
- .faces("+Z")[0]
- .edges(">X")
- .chamfer(holder_shift-0.1, holder_shift*2)
- .faces("<X")
- .edges(">Z")
- .fillet(3)
- .faces(">Y")
- .edges("|X")
- .fillet(5)
- )
- angle = connector_wide.union(bl_holder)
- ############
- ###### CamHolder #####
- holder = (
- base.faces(">Z").workplane()
- .center(holder_x, holder_y)
- .box(holder_length, holder_width, holder_thick, (False, True, False), combine=False)
- .edges("|Z and <X and <Y ")
- .fillet(4)
- )
- case_dim_x = lens_holder_width + case_thick + case_air
- case_dim_z = lens_holder_thick+case_air+case_thick
- case_dim_y = case_dim_x + holder_width/2 - holder_y
- cam_case = (
- holder.faces(">Z").workplane()
- .center(holder_length, -holder_width/2)
- .box(case_dim_x*2, case_dim_y, case_dim_z, combine=False, centered=(True,False,False))
- )
- indside_width = lens_holder_width+case_air
- cam_case_inside = (
- cam_case.faces(">Z").workplane(invert=True)
- .center(-case_dim_x/2, -case_dim_y + case_dim_x/2)
- .box(indside_width, indside_width, lens_holder_thick+case_air, combine=False, centered=(True,True,False))
- .center(-1,0)
- .box(indside_width, indside_width, cable_thick+case_air, centered=(True,True,False))
- ) # Lens holder hole
- cam_case = (
- cam_case.faces("<Z").workplane()
- .center(-case_dim_x/2, -(case_dim_y - case_dim_x/2))
- .cskHole(lens_diam, lens_diam*1.8, 120)
- ) # Lens hole
- cam_case = cam_case.cut(cam_case_inside).edges("|Z and <X and <Y").fillet(case_fillet)
- cam_case = (
- cam_case
- .rotateAboutCenter((0,1,0), 270-cam_angle)
- .translate((2,0,-6.5))
- )
- holder = (
- holder.faces(">Y").workplane()
- .rect(-holder_width,holder_thick, centered=(False,False))
- .extrude(edge_length)
- .faces(">Y")
- .edges("|Z")
- .fillet(5)
- )
- holder = (
- holder.faces(">Z")
- .workplane()
- .center(holder_width/2, edge_length/2)
- .circle(slit_width/2)
- .cutThruAll()
- .center(angle_length/2-slit_width/2, -edge_length)
- .circle(slit_width/2)
- .cutThruAll()
- )
- cam_case_lid = (
- cam_case.faces(">(-1, 0, -1)").workplane(centerOption="CenterOfBoundBox")
- .box(case_dim_y, case_dim_x*2, case_thick, combine=False, centered=(True, True, False))
- .edges(">(1, -1, -1)").fillet(case_fillet)
- )
- cam_case_lid = cam_case_lid.cut(holder)
- holder = holder.union(cam_case)
- ############
- show_object(lid)
- show_object(base)
- show_object(angle)
- show_object(holder)
- show_object(cam_case_lid)
- # export the box as a STEP file
- with open(r"mill/Pi_housing/pi_angle.step", "w") as fp:
- cq.exporters.exportShape(angle, ExportTypes.STEP, fp)
- with open(r"mill/Pi_housing/cam_holder.step", "w") as fp:
- cq.exporters.exportShape(holder, ExportTypes.STEP, fp)
- with open(r"mill/Pi_housing/cam_case_lid.step", "w") as fp:
- cq.exporters.exportShape(cam_case_lid, ExportTypes.STEP, fp)
|