from ocp_vscode import *
from build123d import *

set_port(3939)

# Set the number of clips horizontal:
number_clips_horizontal = 3
number_clips_vertical = 3

# Distance hart to hart holes pegboard 1-1/2" or about 38.1 mm
hdhh = hole_distance_hart_to_hart = 38.1
wmh = width_multiconnector_hole = 20.3
dmh = depth_multiconnector_hole = 4.15
dbr = depth_big_round = 1.2121
dsr = depth_small_round = 0.4379
db = depth_bevel = 2.5
el = extrusion_length = 10.0

pts = [
    (0, 0),
    ((wmh+4)/2, 0),
    (((wmh+4)/2), dmh+2),
    (((wmh+4)/2)-db-2, dmh+2),
    (((wmh+4)/2)-db-2, dmh+2-dsr),
    ((wmh+4)/2-2, dbr+2),
    ((wmh+4)/2-2, 2),
    (0, 2),
    (0, 0)
]

# Make one basic connector
def one_clip():
    with BuildPart() as backSlot:
        # Make a polyline sketch and revolve it 180 degrees
        with BuildSketch(Plane.XZ) as sk_backSlot:
            with BuildLine(Plane.XZ) as ln_backSlot:
                Polyline(pts)
            make_face()
        revolve(revolution_arc=180.0, axis=Axis.Z)
        # Add a straight part to it
        with BuildSketch(Plane.XZ) as sk_extrusion:
            with BuildLine(Plane.XZ) as ln_extrusion:
                Polyline(pts)
            make_face()
            mirror(about=Plane.YZ)
        extrude(amount = el)
    return backSlot.part

# Generate a raster of clips
with BuildPart() as raster:
    with BuildSketch(Plane.XY.rotated((90, 0, 0))) as sk_backSlot:
        with GridLocations(x_spacing = hdhh, y_spacing = hdhh, x_count = number_clips_horizontal, y_count = number_clips_vertical):
        # Make a polyline sketch and revolve it 180 degrees
            with BuildLine() as ln_backSlot:
                Polyline(pts)
            make_face()
    revolve(revolution_arc=180.0, axis=Axis.Z)
    # Add a straight part to it
    with BuildSketch(Plane.XZ) as sk_extrusion:
        with BuildLine(Plane.XZ) as ln_extrusion:
            Polyline(pts)
        make_face()
        mirror(about=Plane.YZ)
    extrude(amount = el)
    
#export_stl(backSlot.part, "backSlot.stl")
show_all()
