Files
modeling-app/rust/kcl-lib/e2e/executor/inputs/slow_lego.kcl.tmpl
Jonathan Tran b65ea8e0a9 Change pattern functions to call user function with keyword args (#6772)
* Change pattern functions to call user function with keyword args

* Fix KCL code to use unlabeled syntax

* Update generated output
2025-05-08 13:43:50 -05:00

78 lines
2.2 KiB
Cheetah

// 2x8 Lego Brick
// A standard Lego brick with 2 bumps wide and 8 bumps long.
// Define constants
lbumps = 10 // number of bumps long
wbumps = {{N}} // number of bumps wide
pitch = 8.0
clearance = 0.1
bumpDiam = 4.8
bumpHeight = 1.8
height = 9.6
t = (pitch - (2 * clearance) - bumpDiam) / 2.0
totalLength = lbumps * pitch - (2.0 * clearance)
totalWidth = wbumps * pitch - (2.0 * clearance)
// Create the plane for the pegs. This is a hack so that the pegs can be patterned along the face of the lego base.
pegFace = {
origin = { x = 0, y = 0, z = height },
xAxis = { x = 1, y = 0, z = 0 },
yAxis = { x = 0, y = 1, z = 0 },
zAxis = { x = 0, y = 0, z = 1 }
}
// Create the plane for the tubes underneath the lego. This is a hack so that the tubes can be patterned underneath the lego.
tubeFace = {
origin = { x = 0, y = 0, z = height - t },
xAxis = { x = 1, y = 0, z = 0 },
yAxis = { x = 0, y = 1, z = 0 },
zAxis = { x = 0, y = 0, z = 1 }
}
// Make the base
s = startSketchOn(XY)
|> startProfile(at = [-totalWidth / 2, -totalLength / 2])
|> line(end = [totalWidth, 0])
|> line(end = [0, totalLength])
|> line(end = [-totalWidth, 0])
|> close()
|> extrude(length = height)
// Sketch and extrude a rectangular shape to create the shell underneath the lego. This is a hack until we have a shell function.
shellExtrude = startSketchOn(s, "start")
|> startProfile(at = [
-(totalWidth / 2 - t),
-(totalLength / 2 - t)
])
|> line(end = [totalWidth - (2 * t), 0])
|> line(end = [0, totalLength - (2 * t)])
|> line(end = [-(totalWidth - (2 * t)), 0])
|> close()
|> extrude(length = -(height - t))
fn tr(@i) {
j = i + 1
x = (j/wbumps) * pitch
y = (j % wbumps) * pitch
return {
translate = [x, y, 0],
}
}
// Create the pegs on the top of the base
totalBumps = (wbumps * lbumps)-1
peg = startSketchOn(s, face = END)
|> circle( center = [
-(pitch*(wbumps-1)/2),
-(pitch*(lbumps-1)/2)
], radius = bumpDiam / 2)
|> patternLinear2d(
axis = [1, 0],
instances = wbumps,
distance = pitch
)
|> patternLinear2d(
axis = [0, 1],
instances = lbumps,
distance = pitch
)
|> extrude(length = bumpHeight)
// |> patternTransform(instances = totalBumps-1, transform = tr)