Preparing for the removal of positional functions from the language. The first big step is to change all our KCL code examples, test code, public samples etc to all use keyword functions. Apologies for how large this PR is. Most of it is: - Changing example KCL that defined its own functions, so the functions now use keyword arguments rather than positional arguments. E.g. change `cube([20, 20])` to be `cube(center = [20, 20])`. - Some parts of the code assumed positional code and didn't handle keyword calls, e.g. the linter would only check for positional calls to startSketchOn. Now they should work with either positional or keyword. - Update all the artifacts This does _not_ remove support for positional calls. That will be in a follow-up PR.
169 lines
4.8 KiB
Plaintext
169 lines
4.8 KiB
Plaintext
// Gridfinity Bins
|
|
// Gridfinity is a system to help you work more efficiently. This is a system invented by Zack Freedman. There are two main components the baseplate and the bins. The components are comprised of a matrix of squares. Allowing easy stacking and expansion
|
|
|
|
// Set units in millimeters (mm)
|
|
@settings(defaultLengthUnit = mm)
|
|
|
|
// Define parameters
|
|
binLength = 41.5
|
|
binHeight = 7.0
|
|
binBaseLength = 2.95
|
|
binTol = 0.25
|
|
binThk = 1.2
|
|
cornerRadius = 3.75
|
|
firstStep = 0.8
|
|
secondStep = 1.8
|
|
thirdStep = 2.15
|
|
magOuterDiam = 6.5
|
|
magOffset = 4.8
|
|
magDepth = 2.4
|
|
|
|
// Number of bins in each direction
|
|
countBinWidth = 2
|
|
countBinLength = 3
|
|
countBinHeight = 2
|
|
|
|
// The total height of the baseplate is a summation of the vertical heights of the baseplate steps
|
|
height = firstStep + secondStep + thirdStep
|
|
|
|
// Define a function which builds the profile of the baseplate bin
|
|
fn face(@plane) {
|
|
faceSketch = startSketchOn(plane)
|
|
|> startProfile(at = [binBaseLength + binTol, 0])
|
|
|> yLine(length = height)
|
|
|> xLine(length = -binBaseLength)
|
|
|> angledLine(angle = -45, lengthY = thirdStep)
|
|
|> yLine(length = -secondStep)
|
|
|> angledLine(angle = -45, lengthY = firstStep)
|
|
|> close()
|
|
return faceSketch
|
|
}
|
|
|
|
// Extrude a single side of the bin
|
|
singleSide = extrude(face(offsetPlane(YZ, offset = cornerRadius + binTol)), length = binLength - (cornerRadius * 2))
|
|
|
|
// Create the other sides of the bin by using a circular pattern
|
|
sides = patternCircular3d(
|
|
singleSide,
|
|
arcDegrees = 360,
|
|
axis = [0, 0, 1],
|
|
center = [
|
|
(binLength + 2 * binTol) / 2,
|
|
(binLength + 2 * binTol) / 2,
|
|
0
|
|
],
|
|
instances = 4,
|
|
rotateDuplicates = true,
|
|
)
|
|
|
|
// Define an axis axis000
|
|
axis000 = {
|
|
direction = [0.0, 1.0],
|
|
origin = [
|
|
cornerRadius + binTol,
|
|
cornerRadius + binTol
|
|
]
|
|
}
|
|
|
|
// Create a single corner of the bin
|
|
singleCorner = revolve(face(offsetPlane(YZ, offset = cornerRadius + binTol)), angle = -90, axis = axis000)
|
|
|
|
// Create the corners of the bin
|
|
corners = patternCircular3d(
|
|
singleCorner,
|
|
arcDegrees = 360,
|
|
axis = [0, 0, 1],
|
|
center = [
|
|
(binLength + 2 * binTol) / 2,
|
|
(binLength + 2 * binTol) / 2,
|
|
0
|
|
],
|
|
instances = 4,
|
|
rotateDuplicates = true,
|
|
)
|
|
|
|
singleBinFill = startSketchOn(XY)
|
|
|> startProfile(at = [
|
|
binBaseLength + binTol,
|
|
binBaseLength + binTol
|
|
])
|
|
|> line(end = [binLength - (binBaseLength * 2), 0], tag = $line000)
|
|
|> line(end = [0, binLength - (binBaseLength * 2)], tag = $line001)
|
|
|> xLine(endAbsolute = profileStartX(%), tag = $line002)
|
|
|> close(tag = $line003)
|
|
|> extrude(length = height)
|
|
|> fillet(
|
|
radius = firstStep,
|
|
tags = [
|
|
getNextAdjacentEdge(line000),
|
|
getPreviousAdjacentEdge(line000),
|
|
getNextAdjacentEdge(line002),
|
|
getPreviousAdjacentEdge(line002)
|
|
],
|
|
)
|
|
|
|
magCutout000 = startSketchOn(singleBinFill, face = START)
|
|
|> circle(
|
|
center = [
|
|
-magOffset - binBaseLength - binTol,
|
|
magOffset + binBaseLength + binTol
|
|
],
|
|
radius = magOuterDiam / 2,
|
|
)
|
|
|> patternCircular2d(
|
|
arcDegrees = 360,
|
|
center = [
|
|
(-binLength + 2 * binTol) / 2,
|
|
(binLength + 2 * binTol) / 2
|
|
],
|
|
instances = 4,
|
|
rotateDuplicates = true,
|
|
)
|
|
|> extrude(length = -magDepth)
|
|
|
|
// Create the baseplate by patterning sides
|
|
binSides = patternLinear3d(
|
|
sides,
|
|
axis = [1.0, 0.0, 0.0],
|
|
instances = countBinWidth,
|
|
distance = binLength + binTol * 2,
|
|
)
|
|
|> patternLinear3d(axis = [0.0, 1.0, 0.0], instances = countBinLength, distance = binLength + binTol * 2)
|
|
|
|
// Create the corners of the baseplate by patterning the corners
|
|
binCorners = patternLinear3d(
|
|
corners,
|
|
axis = [1.0, 0.0, 0.0],
|
|
instances = countBinWidth,
|
|
distance = binLength + binTol * 2,
|
|
)
|
|
|> patternLinear3d(axis = [0.0, 1.0, 0.0], instances = countBinLength, distance = binLength + binTol * 2)
|
|
|
|
// Create the fill of the bin by patterning the corners
|
|
binFill = patternLinear3d(
|
|
singleBinFill,
|
|
axis = [1.0, 0.0, 0.0],
|
|
instances = countBinWidth,
|
|
distance = binLength + binTol * 2,
|
|
)
|
|
|> patternLinear3d(axis = [0.0, 1.0, 0.0], instances = countBinLength, distance = binLength + binTol * 2)
|
|
|
|
// Create the top of the bin
|
|
binTop = startSketchOn(offsetPlane(XY, offset = height))
|
|
|> startProfile(at = [0, 0])
|
|
|> xLine(length = (binLength + 2 * binTol) * countBinWidth, tag = $line010)
|
|
|> yLine(length = (binLength + 2 * binTol) * countBinLength, tag = $line011)
|
|
|> xLine(endAbsolute = profileStartX(%), tag = $line012)
|
|
|> close(tag = $line013)
|
|
|> extrude(length = binHeight * countBinHeight)
|
|
|> fillet(
|
|
radius = cornerRadius,
|
|
tags = [
|
|
getNextAdjacentEdge(line010),
|
|
getPreviousAdjacentEdge(line010),
|
|
getNextAdjacentEdge(line012),
|
|
getPreviousAdjacentEdge(line012)
|
|
],
|
|
)
|
|
|> shell(faces = [END], thickness = binThk)
|