import cadquery as cq # These can be modified rather than hardcoding values for each dimension. width = 3.0 # The width of the plate height = 4.0 # The height of the plate thickness = 0.25 # The thickness of the plate polygon_sides = 6 # The number of sides that the polygonal holes should have polygon_dia = 1.0 # The diameter of the circle enclosing the polygon points # Create a plate with two polygons cut through it # 1. Establishes a workplane that an object can be built on. # 1a. Uses the named plane orientation "front" to define the workplane, meaning # that the positive Z direction is "up", and the negative Z direction # is "down". # 2. A 3D box is created in one box() operation to represent the plate. # 2a. The box is centered around the origin, which creates a result that may # be unituitive when the polygon cuts are made. # 3. 2 points are pushed onto the stack and will be used as centers for the # polygonal holes. # 4. The two polygons are created, on for each point, with one call to # polygon() using the number of sides and the circle that bounds the # polygon. # 5. The polygons are cut thru all objects that are in the line of extrusion. # 5a. A face was not selected, and so the polygons are created on the # workplane. Since the box was centered around the origin, the polygons end # up being in the center of the box. This makes them cut from the center to # the outside along the normal (positive direction). # 6. The polygons are cut through all objects, starting at the center of the # box/plate and going "downward" (opposite of normal) direction. Functions # like cutBlind() assume a positive cut direction, but cutThruAll() assumes # instead that the cut is made from a max direction and cuts downward from # that max through all objects. result = cq.Workplane("front").box(width, height, thickness) \ .pushPoints([(0, 0.75), (0, -0.75)]) \ .polygon(polygon_sides, polygon_dia) \ .cutThruAll() # Displays the result of this script show_object(result)