import cadquery2 as cq from cadquery2 import exporters # Dimensions copied from modelo.py, # TODO refactor into a separate file # Thickness of the outer material shell_t = 3 # Size of the kbd board kbd_height = 98 kbd_width = 286 kbd_angle = 5 # Size of the whole object width = kbd_width + 2 * shell_t height = 69 thickness = 10 # Visible screen size vis_w = 220 vis_h = 58 viewport_cutout = cq.Sketch().trapezoid(vis_w, vis_h, 90, mode="a") # Whole screen size scr_w = 231 scr_h = 65 scr_thickness = 5.5 screen_cutout = cq.Sketch().trapezoid(scr_w, scr_h, 90, mode="a") # Circuit board and cable space board_cutout = cq.Sketch().polygon( [ (0, 0), (width / 2 - 10, 0), (width / 2 - 10, vis_h - 20), (0, vis_h - 20), (0, 0), ], mode="a", ) board_cutout_2 = cq.Sketch().polygon( [ (0, 0), (width / 2 - 10 + 4, 0), (width / 2 - 10 + 4, vis_h - 20 + 4), (0, vis_h - 20 + 4), (0, 0), ], mode="a", ) def model(): return ( cq.Workplane("XY") .workplane() .box(width, 59, 59) .faces(">Z") .transformed(rotate=(45, 0, 0)) .tag("slanted") .placeSketch(cq.Sketch().trapezoid(1000, 1000, 90, mode="a")) .cutBlind(1000) # Cut off viewport .workplaneFromTagged("slanted") .placeSketch(viewport_cutout) .cutBlind(-shell_t) # Make hole for screen assembly .workplaneFromTagged("slanted") .workplane(offset=-shell_t, centerOption="CenterOfBoundBox") # Left bezel is 4mm wider than right one, so this hole is displaced to the left # Cut for the scren assembly .center(-4, 0) .placeSketch(screen_cutout) .cutBlind(-scr_thickness) # Cut for the screen board and cables .workplaneFromTagged("slanted") .workplane(offset=-shell_t - scr_thickness, centerOption="CenterOfBoundBox") .center(0, -(vis_h - 20) / 2) .placeSketch(board_cutout) .cutBlind(-5) # Make it hollow .faces("