import cadquery as cq from utils import punch_hole2, extrude_shape, extrude_shape2 # Measurements for my USB hub, YMMV # The hole is for a USB-A plug, y is measured in the hub # (from the bottom face to middle of the hole) # Consumers should set proper offsets for the hole holes = [ # USB-A port { "x": 0, "y": 4, "shape": cq.Sketch().trapezoid(13, 5, 90, mode="a").vertices().fillet(2), }, ] elements = [ # Thing to grab the hub { "x": 0, "y": 5, "shape": ( cq.Sketch() .trapezoid(22, 10, 90, mode="a") .trapezoid(17, 10, 90, mode="s") .clean() ), "height": 8, } ] def add( *, model, width, height, thickness, offset_x, offset_y, bottom_face, back_face, shell_t ): # USB Hub extrusions if bottom_face: 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), ) # Holes if back_face: for hole in holes: model = punch_hole2( model=model, face=back_face, w=width, h=thickness, x_offset=width - offset_x, y_offset=shell_t, hole=hole, depth=shell_t, ) return model