diff --git a/notebook_nueva/screen_pillars.py b/notebook_nueva/screen_pillars.py new file mode 100644 index 0000000..bd519ff --- /dev/null +++ b/notebook_nueva/screen_pillars.py @@ -0,0 +1,73 @@ +from utils import extrude_shape, punch_hole2 +import cadquery as cq + +elements = None +bottom_holes = None # Not really vents FIXME + + +def init(positions, thickness): + """Because these need to match in multiple models, we create the + elemments dynamically""" + global elements, bottom_holes + elements = [ + { + "x": 0, + "y": 0, + "shape": cq.Sketch() + .push(positions) + .trapezoid(12, 12, 90, mode="a") + .circle(1.8, mode="s"), + "height": thickness, + } + ] + + bottom_holes = [ + { + "x": 0, + "y": 0, + "shape": cq.Sketch().push(positions).circle(3, mode="a"), + "depth": thickness - 13, # (screw thread length - threaded insert depth) + } + ] + + +def add( + *, + model, + width, + height, + thickness, + offset_x, + offset_y, + bottom_face, + back_face, + shell_t +): + if bottom_face: + + # Mounting pillars + for element in elements: + model = extrude_shape( + model=model, + face=bottom_face, + w=width, + h=height, + x_offset=offset_x + element["x"], + y_offset=shell_t + offset_y + element["y"], + shape=element["shape"], + height=-(element["height"] + shell_t), + ) + # Screw holes + for hole in bottom_holes: + model = punch_hole2( + model=model, + face=bottom_face, + w=width, + h=height, + x_offset=offset_x + hole["x"], + y_offset=shell_t + offset_y + hole["y"], + hole=hole, + depth=hole["depth"], + ) + + return model