solidlib/solidLib/assortment.py

39 lines
1.1 KiB
Python

import solid as scad
from .globals import *
def grid(
x: float,
y: float,
w: float = 3,
h: float = 1.5,
fillet: bool = False,
dim: float = 59,
):
if w > h * 2:
out = scad.polygon([[0, 0], [w / 2, 0], [w / 2 - h, h], [0, h]])
else:
out = scad.polygon([[0, 0], [w / 2, 0], [0, h]])
out = scad.linear_extrude(dim)(out)
out = scad.rotate([90, 0, 90])(out)
if fillet:
scallop = scad.cube([dim - 2 * h - (w - 2 * h), 0.0001, 0.0001])
scallop = scad.minkowski()(scallop, scad.sphere(r=h, segments=SEGMENTS))
scallop += scad.rotate([0, -90, 0])(scallop) + scad.translate([dim - w, 0, 0])(
scad.rotate([0, -90, 0])(scallop)
)
scallop = scad.translate([w / 2, w / 2, h])(scallop)
out -= scallop
out += scad.translate([0, dim, 0])(scad.rotate([0, 0, -90])(out))
out += scad.translate([dim, dim, 0])(scad.rotate([0, 0, 180])(out))
result = out
for dx in range(x):
for dy in range(y):
result += scad.translate([dim * dx, dim * dy, 0])(out)
return result