39 lines
1.1 KiB
Python
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
|