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") .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("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("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 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("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)